summaryrefslogtreecommitdiff
path: root/debian/patches/gcc-linaro.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/gcc-linaro.diff')
-rw-r--r--debian/patches/gcc-linaro.diff162123
1 files changed, 162123 insertions, 0 deletions
diff --git a/debian/patches/gcc-linaro.diff b/debian/patches/gcc-linaro.diff
new file mode 100644
index 0000000..c2e8235
--- /dev/null
+++ b/debian/patches/gcc-linaro.diff
@@ -0,0 +1,162123 @@
+# DP: Changes for the Linaro 6-2017.03 release.
+
+MSG=$(git log origin/linaro/gcc-6-branch --format=format:"%s" -n 1 --grep "Merge branches"); SVN=${MSG##* }; git log origin/gcc-6-branch --format=format:"%H" -n 1 --grep "gcc-6-branch@${SVN%.}"
+
+LANG=C git diff --no-renames 4b7882c54dabbb54686cb577f2a2cf28e93e743b..630c5507bb37d2caaef60a6f0773e4c820d76fe0 \
+ | egrep -v '^(diff|index) ' \
+ | filterdiff --strip=1 --addoldprefix=a/src/ --addnewprefix=b/src/ \
+ | sed 's,a/src//dev/null,/dev/null,'
+
+--- a/src/contrib/compare_tests
++++ b/src/contrib/compare_tests
+@@ -107,8 +107,8 @@ elif [ -d "$1" -o -d "$2" ] ; then
+ usage "Must specify either two directories or two files"
+ fi
+
+-sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$1" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp1
+-sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$2" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp2
++sed 's/^XFAIL/FAIL/; s/^ERROR/FAIL/; s/^XPASS/PASS/' < "$1" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp1
++sed 's/^XFAIL/FAIL/; s/^ERROR/FAIL/; s/^XPASS/PASS/' < "$2" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp2
+
+ before=$tmp1
+ now=$tmp2
+--- a/src/contrib/dg-extract-results.py
++++ b/src/contrib/dg-extract-results.py
+@@ -134,6 +134,7 @@ class Prog:
+ self.end_line = None
+ # Known summary types.
+ self.count_names = [
++ '# of DejaGnu errors\t\t',
+ '# of expected passes\t\t',
+ '# of unexpected failures\t',
+ '# of unexpected successes\t',
+@@ -245,6 +246,10 @@ class Prog:
+ segment = Segment (filename, file.tell())
+ variation.header = segment
+
++ # Parse the rest of the summary (the '# of ' lines).
++ if len (variation.counts) == 0:
++ variation.counts = self.zero_counts()
++
+ # Parse up until the first line of the summary.
+ if num_variations == 1:
+ end = '\t\t=== ' + tool.name + ' Summary ===\n'
+@@ -291,6 +296,11 @@ class Prog:
+ harness.results.append ((key, line))
+ if not first_key and sort_logs:
+ first_key = key
++ if line.startswith ('ERROR: (DejaGnu)'):
++ for i in range (len (self.count_names)):
++ if 'DejaGnu errors' in self.count_names[i]:
++ variation.counts[i] += 1
++ break
+
+ # 'Using ...' lines are only interesting in a header. Splitting
+ # the test up into parallel runs leads to more 'Using ...' lines
+@@ -309,9 +319,6 @@ class Prog:
+ segment.lines -= final_using
+ harness.add_segment (first_key, segment)
+
+- # Parse the rest of the summary (the '# of ' lines).
+- if len (variation.counts) == 0:
+- variation.counts = self.zero_counts()
+ while True:
+ before = file.tell()
+ line = file.readline()
+--- a/src/contrib/dg-extract-results.sh
++++ b/src/contrib/dg-extract-results.sh
+@@ -369,10 +369,11 @@ EOF
+ BEGIN {
+ variant="$VAR"
+ tool="$TOOL"
+- passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kpasscnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0;
++ passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kpasscnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0;
+ curvar=""; insummary=0
+ }
+ /^Running target / { curvar = \$3; next }
++/^ERROR: \(DejaGnu\)/ { if (variant == curvar) dgerrorcnt += 1 }
+ /^# of / { if (variant == curvar) insummary = 1 }
+ /^# of expected passes/ { if (insummary == 1) passcnt += \$5; next; }
+ /^# of unexpected successes/ { if (insummary == 1) xpasscnt += \$5; next; }
+@@ -390,6 +391,7 @@ BEGIN {
+ { next }
+ END {
+ printf ("\t\t=== %s Summary for %s ===\n\n", tool, variant)
++ if (dgerrorcnt != 0) printf ("# of DejaGnu errors\t\t%d\n", dgerrorcnt)
+ if (passcnt != 0) printf ("# of expected passes\t\t%d\n", passcnt)
+ if (failcnt != 0) printf ("# of unexpected failures\t%d\n", failcnt)
+ if (xpasscnt != 0) printf ("# of unexpected successes\t%d\n", xpasscnt)
+@@ -419,8 +421,9 @@ TOTAL_AWK=${TMP}/total.awk
+ cat << EOF > $TOTAL_AWK
+ BEGIN {
+ tool="$TOOL"
+- passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0
++ passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0
+ }
++/^# of DejaGnu errors/ { dgerrorcnt += \$5 }
+ /^# of expected passes/ { passcnt += \$5 }
+ /^# of unexpected failures/ { failcnt += \$5 }
+ /^# of unexpected successes/ { xpasscnt += \$5 }
+@@ -431,7 +434,8 @@ BEGIN {
+ /^# of unresolved testcases/ { unrescnt += \$5 }
+ /^# of unsupported tests/ { unsupcnt += \$5 }
+ END {
+- printf ("\n\t\t=== %s Summary ===\n\n", tool)
++ printf ("\n\t\t=== %s MySummary ===\n\n", tool)
++ if (dgerrorcnt != 0) printf ("# of DejaGnu errors\t\t%d\n", dgerrorcnt)
+ if (passcnt != 0) printf ("# of expected passes\t\t%d\n", passcnt)
+ if (failcnt != 0) printf ("# of unexpected failures\t%d\n", failcnt)
+ if (xpasscnt != 0) printf ("# of unexpected successes\t%d\n", xpasscnt)
+--- /dev/null
++++ b/src/gcc/LINARO-VERSION
+@@ -0,0 +1 @@
++Snapshot 6.3-2017.03
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -832,10 +832,12 @@ BASEVER := $(srcdir)/BASE-VER # 4.x.y
+ DEVPHASE := $(srcdir)/DEV-PHASE # experimental, prerelease, ""
+ DATESTAMP := $(srcdir)/DATESTAMP # YYYYMMDD or empty
+ REVISION := $(srcdir)/REVISION # [BRANCH revision XXXXXX]
++LINAROVER := $(srcdir)/LINARO-VERSION # M.x-YYYY.MM[-S][~dev]
+
+ BASEVER_c := $(shell cat $(BASEVER))
+ DEVPHASE_c := $(shell cat $(DEVPHASE))
+ DATESTAMP_c := $(shell cat $(DATESTAMP))
++LINAROVER_c := $(shell cat $(LINAROVER))
+
+ ifeq (,$(wildcard $(REVISION)))
+ REVISION_c :=
+@@ -862,6 +864,7 @@ DATESTAMP_s := \
+ "\"$(if $(DEVPHASE_c)$(filter-out 0,$(PATCHLEVEL_c)), $(DATESTAMP_c))\""
+ PKGVERSION_s:= "\"@PKGVERSION@\""
+ BUGURL_s := "\"@REPORT_BUGS_TO@\""
++LINAROVER_s := "\"$(LINAROVER_c)\""
+
+ PKGVERSION := @PKGVERSION@
+ BUGURL_TEXI := @REPORT_BUGS_TEXI@
+@@ -2701,8 +2704,9 @@ PREPROCESSOR_DEFINES = \
+ -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \
+ @TARGET_SYSTEM_ROOT_DEFINE@
+
+-CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s)
+-cppbuiltin.o: $(BASEVER)
++CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) \
++ -DLINAROVER=$(LINAROVER_s)
++cppbuiltin.o: $(BASEVER) $(LINAROVER)
+
+ CFLAGS-cppdefault.o += $(PREPROCESSOR_DEFINES)
+
+--- a/src/gcc/ada/gcc-interface/misc.c
++++ b/src/gcc/ada/gcc-interface/misc.c
+@@ -255,8 +255,7 @@ static bool
+ gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED)
+ {
+ /* Excess precision other than "fast" requires front-end support. */
+- if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD
+- && TARGET_FLT_EVAL_METHOD_NON_DEFAULT)
++ if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD)
+ sorry ("-fexcess-precision=standard for Ada");
+ flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
+
+--- a/src/gcc/builtins.c
++++ b/src/gcc/builtins.c
+@@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "gimple.h"
+ #include "predict.h"
+ #include "tm_p.h"
+--- a/src/gcc/c-family/c-common.c
++++ b/src/gcc/c-family/c-common.c
+@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "target.h"
+ #include "function.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "c-common.h"
+ #include "gimple-expr.h"
+ #include "tm_p.h"
+--- a/src/gcc/c-family/c-opts.c
++++ b/src/gcc/c-family/c-opts.c
+@@ -772,8 +772,7 @@ c_common_post_options (const char **pfilename)
+ support. */
+ if (c_dialect_cxx ())
+ {
+- if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD
+- && TARGET_FLT_EVAL_METHOD_NON_DEFAULT)
++ if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD)
+ sorry ("-fexcess-precision=standard for C++");
+ flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
+ }
+--- a/src/gcc/calls.c
++++ b/src/gcc/calls.c
+@@ -194,10 +194,19 @@ prepare_call_address (tree fndecl_or_type, rtx funexp, rtx static_chain_value,
+ && targetm.small_register_classes_for_mode_p (FUNCTION_MODE))
+ ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
+ : memory_address (FUNCTION_MODE, funexp));
+- else if (! sibcallp)
++ else
+ {
+- if (!NO_FUNCTION_CSE && optimize && ! flag_no_function_cse)
+- funexp = force_reg (Pmode, funexp);
++ /* funexp could be a SYMBOL_REF represents a function pointer which is
++ of ptr_mode. In this case, it should be converted into address mode
++ to be a valid address for memory rtx pattern. See PR 64971. */
++ if (GET_MODE (funexp) != Pmode)
++ funexp = convert_memory_address (Pmode, funexp);
++
++ if (! sibcallp)
++ {
++ if (!NO_FUNCTION_CSE && optimize && ! flag_no_function_cse)
++ funexp = force_reg (Pmode, funexp);
++ }
+ }
+
+ if (static_chain_value != 0
+--- a/src/gcc/cfg.c
++++ b/src/gcc/cfg.c
+@@ -1064,7 +1064,7 @@ free_original_copy_tables (void)
+ delete bb_copy;
+ bb_copy = NULL;
+ delete bb_original;
+- bb_copy = NULL;
++ bb_original = NULL;
+ delete loop_copy;
+ loop_copy = NULL;
+ delete original_copy_bb_pool;
+--- a/src/gcc/common/config/arm/arm-common.c
++++ b/src/gcc/common/config/arm/arm-common.c
+@@ -97,6 +97,49 @@ arm_rewrite_mcpu (int argc, const char **argv)
+ return arm_rewrite_selected_cpu (argv[argc - 1]);
+ }
+
++struct arm_arch_core_flag
++{
++ const char *const name;
++ const arm_feature_set flags;
++};
++
++static const struct arm_arch_core_flag arm_arch_core_flags[] =
++{
++#undef ARM_CORE
++#define ARM_CORE(NAME, X, IDENT, ARCH, FLAGS, COSTS) \
++ {NAME, FLAGS},
++#include "config/arm/arm-cores.def"
++#undef ARM_CORE
++#undef ARM_ARCH
++#define ARM_ARCH(NAME, CORE, ARCH, FLAGS) \
++ {NAME, FLAGS},
++#include "config/arm/arm-arches.def"
++#undef ARM_ARCH
++};
++
++/* Called by the driver to check whether the target denoted by current
++ command line options is a Thumb-only target. ARGV is an array of
++ -march and -mcpu values (ie. it contains the rhs after the equal
++ sign) and we use the last one of them to make a decision. The
++ number of elements in ARGV is given in ARGC. */
++const char *
++arm_target_thumb_only (int argc, const char **argv)
++{
++ unsigned int opt;
++
++ if (argc)
++ {
++ for (opt = 0; opt < (ARRAY_SIZE (arm_arch_core_flags)); opt++)
++ if ((strcmp (argv[argc - 1], arm_arch_core_flags[opt].name) == 0)
++ && !ARM_FSET_HAS_CPU1(arm_arch_core_flags[opt].flags, FL_NOTM))
++ return "-mthumb";
++
++ return NULL;
++ }
++ else
++ return NULL;
++}
++
+ #undef ARM_CPU_NAME_LENGTH
+
+
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -307,7 +307,7 @@ m32c*-*-*)
+ ;;
+ aarch64*-*-*)
+ cpu_type=aarch64
+- extra_headers="arm_neon.h arm_acle.h"
++ extra_headers="arm_fp16.h arm_neon.h arm_acle.h"
+ c_target_objs="aarch64-c.o"
+ cxx_target_objs="aarch64-c.o"
+ extra_objs="aarch64-builtins.o aarch-common.o cortex-a57-fma-steering.o"
+@@ -327,7 +327,7 @@ arc*-*-*)
+ arm*-*-*)
+ cpu_type=arm
+ extra_objs="arm-builtins.o aarch-common.o"
+- extra_headers="mmintrin.h arm_neon.h arm_acle.h"
++ extra_headers="mmintrin.h arm_neon.h arm_acle.h arm_fp16.h arm_cmse.h"
+ target_type_format_char='%'
+ c_target_objs="arm-c.o"
+ cxx_target_objs="arm-c.o"
+@@ -1500,7 +1500,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i
+ extra_options="${extra_options} linux-android.opt"
+ # Assume modern glibc if not targeting Android nor uclibc.
+ case ${target} in
+- *-*-*android*|*-*-*uclibc*)
++ *-*-*android*|*-*-*uclibc*|*-*-*musl*)
+ ;;
+ *)
+ default_gnu_indirect_function=yes
+@@ -1569,7 +1569,7 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
+ extra_options="${extra_options} linux-android.opt"
+ # Assume modern glibc if not targeting Android nor uclibc.
+ case ${target} in
+- *-*-*android*|*-*-*uclibc*)
++ *-*-*android*|*-*-*uclibc*|*-*-*musl*)
+ ;;
+ *)
+ default_gnu_indirect_function=yes
+@@ -3811,38 +3811,51 @@ case "${target}" in
+ # Add extra multilibs
+ if test "x$with_multilib_list" != x; then
+ arm_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
+- for arm_multilib in ${arm_multilibs}; do
+- case ${arm_multilib} in
+- aprofile)
++ case ${arm_multilibs} in
++ aprofile)
+ # Note that arm/t-aprofile is a
+ # stand-alone make file fragment to be
+ # used only with itself. We do not
+ # specifically use the
+ # TM_MULTILIB_OPTION framework because
+ # this shorthand is more
+- # pragmatic. Additionally it is only
+- # designed to work without any
+- # with-cpu, with-arch with-mode
+- # with-fpu or with-float options.
+- if test "x$with_arch" != x \
+- || test "x$with_cpu" != x \
+- || test "x$with_float" != x \
+- || test "x$with_fpu" != x \
+- || test "x$with_mode" != x ; then
+- echo "Error: You cannot use any of --with-arch/cpu/fpu/float/mode with --with-multilib-list=aprofile" 1>&2
+- exit 1
+- fi
+- tmake_file="${tmake_file} arm/t-aprofile"
+- break
+- ;;
+- default)
+- ;;
+- *)
+- echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2
+- exit 1
+- ;;
+- esac
+- done
++ # pragmatic.
++ tmake_profile_file="arm/t-aprofile"
++ ;;
++ rmprofile)
++ # Note that arm/t-rmprofile is a
++ # stand-alone make file fragment to be
++ # used only with itself. We do not
++ # specifically use the
++ # TM_MULTILIB_OPTION framework because
++ # this shorthand is more
++ # pragmatic.
++ tmake_profile_file="arm/t-rmprofile"
++ ;;
++ default)
++ ;;
++ *)
++ echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2
++ exit 1
++ ;;
++ esac
++
++ if test "x${tmake_profile_file}" != x ; then
++ # arm/t-aprofile and arm/t-rmprofile are only
++ # designed to work without any with-cpu,
++ # with-arch, with-mode, with-fpu or with-float
++ # options.
++ if test "x$with_arch" != x \
++ || test "x$with_cpu" != x \
++ || test "x$with_float" != x \
++ || test "x$with_fpu" != x \
++ || test "x$with_mode" != x ; then
++ echo "Error: You cannot use any of --with-arch/cpu/fpu/float/mode with --with-multilib-list=${with_multilib_list}" 1>&2
++ exit 1
++ fi
++
++ tmake_file="${tmake_file} ${tmake_profile_file}"
++ fi
+ fi
+ ;;
+
+--- a/src/gcc/config/aarch64/aarch64-arches.def
++++ b/src/gcc/config/aarch64/aarch64-arches.def
+@@ -32,4 +32,6 @@
+
+ AARCH64_ARCH("armv8-a", generic, 8A, 8, AARCH64_FL_FOR_ARCH8)
+ AARCH64_ARCH("armv8.1-a", generic, 8_1A, 8, AARCH64_FL_FOR_ARCH8_1)
++AARCH64_ARCH("armv8.2-a", generic, 8_2A, 8, AARCH64_FL_FOR_ARCH8_2)
++AARCH64_ARCH("armv8.3-a", generic, 8_3A, 8, AARCH64_FL_FOR_ARCH8_3)
+
+--- a/src/gcc/config/aarch64/aarch64-builtins.c
++++ b/src/gcc/config/aarch64/aarch64-builtins.c
+@@ -62,6 +62,7 @@
+ #define si_UP SImode
+ #define sf_UP SFmode
+ #define hi_UP HImode
++#define hf_UP HFmode
+ #define qi_UP QImode
+ #define UP(X) X##_UP
+
+@@ -139,6 +140,10 @@ aarch64_types_binop_ssu_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ = { qualifier_none, qualifier_none, qualifier_unsigned };
+ #define TYPES_BINOP_SSU (aarch64_types_binop_ssu_qualifiers)
+ static enum aarch64_type_qualifiers
++aarch64_types_binop_uss_qualifiers[SIMD_MAX_BUILTIN_ARGS]
++ = { qualifier_unsigned, qualifier_none, qualifier_none };
++#define TYPES_BINOP_USS (aarch64_types_binop_uss_qualifiers)
++static enum aarch64_type_qualifiers
+ aarch64_types_binopp_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ = { qualifier_poly, qualifier_poly, qualifier_poly };
+ #define TYPES_BINOPP (aarch64_types_binopp_qualifiers)
+@@ -164,6 +169,10 @@ aarch64_types_quadop_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ #define TYPES_QUADOP_LANE (aarch64_types_quadop_lane_qualifiers)
+
+ static enum aarch64_type_qualifiers
++aarch64_types_binop_imm_p_qualifiers[SIMD_MAX_BUILTIN_ARGS]
++ = { qualifier_poly, qualifier_none, qualifier_immediate };
++#define TYPES_GETREGP (aarch64_types_binop_imm_p_qualifiers)
++static enum aarch64_type_qualifiers
+ aarch64_types_binop_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ = { qualifier_none, qualifier_none, qualifier_immediate };
+ #define TYPES_GETREG (aarch64_types_binop_imm_qualifiers)
+@@ -173,16 +182,29 @@ aarch64_types_shift_to_unsigned_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ = { qualifier_unsigned, qualifier_none, qualifier_immediate };
+ #define TYPES_SHIFTIMM_USS (aarch64_types_shift_to_unsigned_qualifiers)
+ static enum aarch64_type_qualifiers
++aarch64_types_fcvt_from_unsigned_qualifiers[SIMD_MAX_BUILTIN_ARGS]
++ = { qualifier_none, qualifier_unsigned, qualifier_immediate };
++#define TYPES_FCVTIMM_SUS (aarch64_types_fcvt_from_unsigned_qualifiers)
++static enum aarch64_type_qualifiers
+ aarch64_types_unsigned_shift_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ = { qualifier_unsigned, qualifier_unsigned, qualifier_immediate };
+ #define TYPES_USHIFTIMM (aarch64_types_unsigned_shift_qualifiers)
+
+ static enum aarch64_type_qualifiers
+-aarch64_types_ternop_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+- = { qualifier_none, qualifier_none, qualifier_none, qualifier_immediate };
+-#define TYPES_SETREG (aarch64_types_ternop_imm_qualifiers)
+-#define TYPES_SHIFTINSERT (aarch64_types_ternop_imm_qualifiers)
+-#define TYPES_SHIFTACC (aarch64_types_ternop_imm_qualifiers)
++aarch64_types_ternop_s_imm_p_qualifiers[SIMD_MAX_BUILTIN_ARGS]
++ = { qualifier_none, qualifier_none, qualifier_poly, qualifier_immediate};
++#define TYPES_SETREGP (aarch64_types_ternop_s_imm_p_qualifiers)
++static enum aarch64_type_qualifiers
++aarch64_types_ternop_s_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS]
++ = { qualifier_none, qualifier_none, qualifier_none, qualifier_immediate};
++#define TYPES_SETREG (aarch64_types_ternop_s_imm_qualifiers)
++#define TYPES_SHIFTINSERT (aarch64_types_ternop_s_imm_qualifiers)
++#define TYPES_SHIFTACC (aarch64_types_ternop_s_imm_qualifiers)
++
++static enum aarch64_type_qualifiers
++aarch64_types_ternop_p_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS]
++ = { qualifier_poly, qualifier_poly, qualifier_poly, qualifier_immediate};
++#define TYPES_SHIFTINSERTP (aarch64_types_ternop_p_imm_qualifiers)
+
+ static enum aarch64_type_qualifiers
+ aarch64_types_unsigned_shiftacc_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+@@ -197,6 +219,11 @@ aarch64_types_combine_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ #define TYPES_COMBINE (aarch64_types_combine_qualifiers)
+
+ static enum aarch64_type_qualifiers
++aarch64_types_combine_p_qualifiers[SIMD_MAX_BUILTIN_ARGS]
++ = { qualifier_poly, qualifier_poly, qualifier_poly };
++#define TYPES_COMBINEP (aarch64_types_combine_p_qualifiers)
++
++static enum aarch64_type_qualifiers
+ aarch64_types_load1_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ = { qualifier_none, qualifier_const_pointer_map_mode };
+ #define TYPES_LOAD1 (aarch64_types_load1_qualifiers)
+@@ -229,6 +256,10 @@ aarch64_types_bsl_u_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ qualifier_map_mode | qualifier_pointer to build a pointer to the
+ element type of the vector. */
+ static enum aarch64_type_qualifiers
++aarch64_types_store1_p_qualifiers[SIMD_MAX_BUILTIN_ARGS]
++ = { qualifier_void, qualifier_pointer_map_mode, qualifier_poly };
++#define TYPES_STORE1P (aarch64_types_store1_p_qualifiers)
++static enum aarch64_type_qualifiers
+ aarch64_types_store1_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ = { qualifier_void, qualifier_pointer_map_mode, qualifier_none };
+ #define TYPES_STORE1 (aarch64_types_store1_qualifiers)
+@@ -753,16 +784,16 @@ aarch64_init_simd_builtins (void)
+
+ if (qualifiers & qualifier_unsigned)
+ {
+- type_signature[arg_num] = 'u';
++ type_signature[op_num] = 'u';
+ print_type_signature_p = true;
+ }
+ else if (qualifiers & qualifier_poly)
+ {
+- type_signature[arg_num] = 'p';
++ type_signature[op_num] = 'p';
+ print_type_signature_p = true;
+ }
+ else
+- type_signature[arg_num] = 's';
++ type_signature[op_num] = 's';
+
+ /* Skip an internal operand for vget_{low, high}. */
+ if (qualifiers & qualifier_internal)
+--- a/src/gcc/config/aarch64/aarch64-c.c
++++ b/src/gcc/config/aarch64/aarch64-c.c
+@@ -95,6 +95,11 @@ aarch64_update_cpp_builtins (cpp_reader *pfile)
+ else
+ cpp_undef (pfile, "__ARM_FP");
+
++ aarch64_def_or_undef (TARGET_FP_F16INST,
++ "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC", pfile);
++ aarch64_def_or_undef (TARGET_SIMD_F16INST,
++ "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC", pfile);
++
+ aarch64_def_or_undef (TARGET_SIMD, "__ARM_FEATURE_NUMERIC_MAXMIN", pfile);
+ aarch64_def_or_undef (TARGET_SIMD, "__ARM_NEON", pfile);
+
+--- a/src/gcc/config/aarch64/aarch64-cores.def
++++ b/src/gcc/config/aarch64/aarch64-cores.def
+@@ -40,17 +40,33 @@
+
+ /* V8 Architecture Processors. */
+
++/* ARM ('A') cores. */
+ AARCH64_CORE("cortex-a35", cortexa35, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa35, "0x41", "0xd04")
+ AARCH64_CORE("cortex-a53", cortexa53, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa53, "0x41", "0xd03")
+ AARCH64_CORE("cortex-a57", cortexa57, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa57, "0x41", "0xd07")
+ AARCH64_CORE("cortex-a72", cortexa72, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa72, "0x41", "0xd08")
++AARCH64_CORE("cortex-a73", cortexa73, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa73, "0x41", "0xd09")
++
++/* Samsung ('S') cores. */
+ AARCH64_CORE("exynos-m1", exynosm1, exynosm1, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, exynosm1, "0x53", "0x001")
+-AARCH64_CORE("qdf24xx", qdf24xx, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, cortexa57, "0x51", "0x800")
++
++/* Qualcomm ('Q') cores. */
++AARCH64_CORE("qdf24xx", qdf24xx, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, qdf24xx, "0x51", "0x800")
++
++/* Cavium ('C') cores. */
+ AARCH64_CORE("thunderx", thunderx, thunderx, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx, "0x43", "0x0a1")
++
++/* APM ('P') cores. */
+ AARCH64_CORE("xgene1", xgene1, xgene1, 8A, AARCH64_FL_FOR_ARCH8, xgene1, "0x50", "0x000")
+
++/* V8.1 Architecture Processors. */
++
++/* Broadcom ('B') cores. */
++AARCH64_CORE("vulcan", vulcan, cortexa57, 8_1A, AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_CRYPTO, vulcan, "0x42", "0x516")
++
+ /* V8 big.LITTLE implementations. */
+
+ AARCH64_CORE("cortex-a57.cortex-a53", cortexa57cortexa53, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa57, "0x41", "0xd07.0xd03")
+ AARCH64_CORE("cortex-a72.cortex-a53", cortexa72cortexa53, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa72, "0x41", "0xd08.0xd03")
+-
++AARCH64_CORE("cortex-a73.cortex-a35", cortexa73cortexa35, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa73, "0x41", "0xd09.0xd04")
++AARCH64_CORE("cortex-a73.cortex-a53", cortexa73cortexa53, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa73, "0x41", "0xd09.0xd03")
+--- a/src/gcc/config/aarch64/aarch64-cost-tables.h
++++ b/src/gcc/config/aarch64/aarch64-cost-tables.h
+@@ -127,6 +127,108 @@ const struct cpu_cost_table thunderx_extra_costs =
+ }
+ };
+
++const struct cpu_cost_table vulcan_extra_costs =
++{
++ /* ALU */
++ {
++ 0, /* Arith. */
++ 0, /* Logical. */
++ 0, /* Shift. */
++ 0, /* Shift_reg. */
++ COSTS_N_INSNS (1), /* Arith_shift. */
++ COSTS_N_INSNS (1), /* Arith_shift_reg. */
++ COSTS_N_INSNS (1), /* Log_shift. */
++ COSTS_N_INSNS (1), /* Log_shift_reg. */
++ 0, /* Extend. */
++ COSTS_N_INSNS (1), /* Extend_arith. */
++ 0, /* Bfi. */
++ 0, /* Bfx. */
++ COSTS_N_INSNS (3), /* Clz. */
++ 0, /* Rev. */
++ 0, /* Non_exec. */
++ true /* Non_exec_costs_exec. */
++ },
++ {
++ /* MULT SImode */
++ {
++ COSTS_N_INSNS (4), /* Simple. */
++ COSTS_N_INSNS (4), /* Flag_setting. */
++ COSTS_N_INSNS (4), /* Extend. */
++ COSTS_N_INSNS (5), /* Add. */
++ COSTS_N_INSNS (5), /* Extend_add. */
++ COSTS_N_INSNS (18) /* Idiv. */
++ },
++ /* MULT DImode */
++ {
++ COSTS_N_INSNS (4), /* Simple. */
++ 0, /* Flag_setting. */
++ COSTS_N_INSNS (4), /* Extend. */
++ COSTS_N_INSNS (5), /* Add. */
++ COSTS_N_INSNS (5), /* Extend_add. */
++ COSTS_N_INSNS (26) /* Idiv. */
++ }
++ },
++ /* LD/ST */
++ {
++ COSTS_N_INSNS (4), /* Load. */
++ COSTS_N_INSNS (4), /* Load_sign_extend. */
++ COSTS_N_INSNS (5), /* Ldrd. */
++ COSTS_N_INSNS (4), /* Ldm_1st. */
++ 1, /* Ldm_regs_per_insn_1st. */
++ 1, /* Ldm_regs_per_insn_subsequent. */
++ COSTS_N_INSNS (4), /* Loadf. */
++ COSTS_N_INSNS (4), /* Loadd. */
++ COSTS_N_INSNS (4), /* Load_unaligned. */
++ 0, /* Store. */
++ 0, /* Strd. */
++ 0, /* Stm_1st. */
++ 1, /* Stm_regs_per_insn_1st. */
++ 1, /* Stm_regs_per_insn_subsequent. */
++ 0, /* Storef. */
++ 0, /* Stored. */
++ 0, /* Store_unaligned. */
++ COSTS_N_INSNS (1), /* Loadv. */
++ COSTS_N_INSNS (1) /* Storev. */
++ },
++ {
++ /* FP SFmode */
++ {
++ COSTS_N_INSNS (4), /* Div. */
++ COSTS_N_INSNS (1), /* Mult. */
++ COSTS_N_INSNS (1), /* Mult_addsub. */
++ COSTS_N_INSNS (1), /* Fma. */
++ COSTS_N_INSNS (1), /* Addsub. */
++ COSTS_N_INSNS (1), /* Fpconst. */
++ COSTS_N_INSNS (1), /* Neg. */
++ COSTS_N_INSNS (1), /* Compare. */
++ COSTS_N_INSNS (2), /* Widen. */
++ COSTS_N_INSNS (2), /* Narrow. */
++ COSTS_N_INSNS (2), /* Toint. */
++ COSTS_N_INSNS (2), /* Fromint. */
++ COSTS_N_INSNS (2) /* Roundint. */
++ },
++ /* FP DFmode */
++ {
++ COSTS_N_INSNS (6), /* Div. */
++ COSTS_N_INSNS (1), /* Mult. */
++ COSTS_N_INSNS (1), /* Mult_addsub. */
++ COSTS_N_INSNS (1), /* Fma. */
++ COSTS_N_INSNS (1), /* Addsub. */
++ COSTS_N_INSNS (1), /* Fpconst. */
++ COSTS_N_INSNS (1), /* Neg. */
++ COSTS_N_INSNS (1), /* Compare. */
++ COSTS_N_INSNS (2), /* Widen. */
++ COSTS_N_INSNS (2), /* Narrow. */
++ COSTS_N_INSNS (2), /* Toint. */
++ COSTS_N_INSNS (2), /* Fromint. */
++ COSTS_N_INSNS (2) /* Roundint. */
++ }
++ },
++ /* Vector */
++ {
++ COSTS_N_INSNS (1) /* Alu. */
++ }
++};
+
+
+ #endif
+--- a/src/gcc/config/aarch64/aarch64-elf.h
++++ b/src/gcc/config/aarch64/aarch64-elf.h
+@@ -25,15 +25,6 @@
+ #define ASM_OUTPUT_LABELREF(FILE, NAME) \
+ aarch64_asm_output_labelref (FILE, NAME)
+
+-#define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \
+- do \
+- { \
+- assemble_name (FILE, NAME1); \
+- fputs (" = ", FILE); \
+- assemble_name (FILE, NAME2); \
+- fputc ('\n', FILE); \
+- } while (0)
+-
+ #define TEXT_SECTION_ASM_OP "\t.text"
+ #define DATA_SECTION_ASM_OP "\t.data"
+ #define BSS_SECTION_ASM_OP "\t.bss"
+--- a/src/gcc/config/aarch64/aarch64-modes.def
++++ b/src/gcc/config/aarch64/aarch64-modes.def
+@@ -21,8 +21,6 @@
+ CC_MODE (CCFP);
+ CC_MODE (CCFPE);
+ CC_MODE (CC_SWP);
+-CC_MODE (CC_ZESWP); /* zero-extend LHS (but swap to make it RHS). */
+-CC_MODE (CC_SESWP); /* sign-extend LHS (but swap to make it RHS). */
+ CC_MODE (CC_NZ); /* Only N and Z bits of condition flags are valid. */
+ CC_MODE (CC_Z); /* Only Z bit of condition flags is valid. */
+ CC_MODE (CC_C); /* Only C bit of condition flags is valid. */
+--- a/src/gcc/config/aarch64/aarch64-option-extensions.def
++++ b/src/gcc/config/aarch64/aarch64-option-extensions.def
+@@ -39,8 +39,8 @@
+ that are required. Their order is not important. */
+
+ /* Enabling "fp" just enables "fp".
+- Disabling "fp" also disables "simd", "crypto". */
+-AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, 0, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO, "fp")
++ Disabling "fp" also disables "simd", "crypto" and "fp16". */
++AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, 0, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO | AARCH64_FL_F16, "fp")
+
+ /* Enabling "simd" also enables "fp".
+ Disabling "simd" also disables "crypto". */
+@@ -55,3 +55,7 @@ AARCH64_OPT_EXTENSION("crc", AARCH64_FL_CRC, 0, 0, "crc32")
+
+ /* Enabling or disabling "lse" only changes "lse". */
+ AARCH64_OPT_EXTENSION("lse", AARCH64_FL_LSE, 0, 0, "atomics")
++
++/* Enabling "fp16" also enables "fp".
++ Disabling "fp16" just disables "fp16". */
++AARCH64_OPT_EXTENSION("fp16", AARCH64_FL_F16, AARCH64_FL_FP, 0, "fp16")
+--- /dev/null
++++ b/src/gcc/config/aarch64/aarch64-passes.def
+@@ -0,0 +1,21 @@
++/* AArch64-specific passes declarations.
++ Copyright (C) 2016 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++INSERT_PASS_AFTER (pass_regrename, 1, pass_fma_steering);
+--- a/src/gcc/config/aarch64/aarch64-protos.h
++++ b/src/gcc/config/aarch64/aarch64-protos.h
+@@ -178,6 +178,25 @@ struct cpu_branch_cost
+ const int unpredictable; /* Unpredictable branch or optimizing for speed. */
+ };
+
++/* Control approximate alternatives to certain FP operators. */
++#define AARCH64_APPROX_MODE(MODE) \
++ ((MIN_MODE_FLOAT <= (MODE) && (MODE) <= MAX_MODE_FLOAT) \
++ ? (1 << ((MODE) - MIN_MODE_FLOAT)) \
++ : (MIN_MODE_VECTOR_FLOAT <= (MODE) && (MODE) <= MAX_MODE_VECTOR_FLOAT) \
++ ? (1 << ((MODE) - MIN_MODE_VECTOR_FLOAT \
++ + MAX_MODE_FLOAT - MIN_MODE_FLOAT + 1)) \
++ : (0))
++#define AARCH64_APPROX_NONE (0)
++#define AARCH64_APPROX_ALL (-1)
++
++/* Allowed modes for approximations. */
++struct cpu_approx_modes
++{
++ const unsigned int division; /* Division. */
++ const unsigned int sqrt; /* Square root. */
++ const unsigned int recip_sqrt; /* Reciprocal square root. */
++};
++
+ struct tune_params
+ {
+ const struct cpu_cost_table *insn_extra_cost;
+@@ -185,6 +204,7 @@ struct tune_params
+ const struct cpu_regmove_cost *regmove_cost;
+ const struct cpu_vector_cost *vec_costs;
+ const struct cpu_branch_cost *branch_costs;
++ const struct cpu_approx_modes *approx_modes;
+ int memmov_cost;
+ int issue_rate;
+ unsigned int fusible_ops;
+@@ -282,14 +302,14 @@ int aarch64_get_condition_code (rtx);
+ bool aarch64_bitmask_imm (HOST_WIDE_INT val, machine_mode);
+ int aarch64_branch_cost (bool, bool);
+ enum aarch64_symbol_type aarch64_classify_symbolic_expression (rtx);
+-bool aarch64_cannot_change_mode_class (machine_mode,
+- machine_mode,
+- enum reg_class);
+ bool aarch64_const_vec_all_same_int_p (rtx, HOST_WIDE_INT);
+ bool aarch64_constant_address_p (rtx);
++bool aarch64_emit_approx_div (rtx, rtx, rtx);
++bool aarch64_emit_approx_sqrt (rtx, rtx, bool);
+ bool aarch64_expand_movmem (rtx *);
+ bool aarch64_float_const_zero_rtx_p (rtx);
+ bool aarch64_function_arg_regno_p (unsigned);
++bool aarch64_fusion_enabled_p (enum aarch64_fusion_pairs);
+ bool aarch64_gen_movmemqi (rtx *);
+ bool aarch64_gimple_fold_builtin (gimple_stmt_iterator *);
+ bool aarch64_is_extend_from_extract (machine_mode, rtx, rtx);
+@@ -298,6 +318,7 @@ bool aarch64_is_noplt_call_p (rtx);
+ bool aarch64_label_mentioned_p (rtx);
+ void aarch64_declare_function_name (FILE *, const char*, tree);
+ bool aarch64_legitimate_pic_operand_p (rtx);
++bool aarch64_mask_and_shift_for_ubfiz_p (machine_mode, rtx, rtx);
+ bool aarch64_modes_tieable_p (machine_mode mode1,
+ machine_mode mode2);
+ bool aarch64_zero_extend_const_eq (machine_mode, rtx, machine_mode, rtx);
+@@ -320,6 +341,7 @@ bool aarch64_simd_scalar_immediate_valid_for_move (rtx, machine_mode);
+ bool aarch64_simd_shift_imm_p (rtx, machine_mode, bool);
+ bool aarch64_simd_valid_immediate (rtx, machine_mode, bool,
+ struct simd_immediate_info *);
++bool aarch64_split_dimode_const_store (rtx, rtx);
+ bool aarch64_symbolic_address_p (rtx);
+ bool aarch64_uimm12_shift (HOST_WIDE_INT);
+ bool aarch64_use_return_insn_p (void);
+@@ -335,11 +357,9 @@ machine_mode aarch64_hard_regno_caller_save_mode (unsigned, unsigned,
+ machine_mode);
+ int aarch64_hard_regno_mode_ok (unsigned, machine_mode);
+ int aarch64_hard_regno_nregs (unsigned, machine_mode);
+-int aarch64_simd_attr_length_move (rtx_insn *);
+ int aarch64_uxt_size (int, HOST_WIDE_INT);
+ int aarch64_vec_fpconst_pow_of_2 (rtx);
+ rtx aarch64_eh_return_handler_rtx (void);
+-rtx aarch64_legitimize_reload_address (rtx *, machine_mode, int, int, int);
+ rtx aarch64_mask_from_zextract_ops (rtx, rtx);
+ const char *aarch64_output_move_struct (rtx *operands);
+ rtx aarch64_return_addr (int, rtx);
+@@ -352,7 +372,6 @@ unsigned aarch64_dbx_register_number (unsigned);
+ unsigned aarch64_trampoline_size (void);
+ void aarch64_asm_output_labelref (FILE *, const char *);
+ void aarch64_cpu_cpp_builtins (cpp_reader *);
+-void aarch64_elf_asm_named_section (const char *, unsigned, tree);
+ const char * aarch64_gen_far_branch (rtx *, int, const char *, const char *);
+ const char * aarch64_output_probe_stack_range (rtx, rtx);
+ void aarch64_err_no_fpadvsimd (machine_mode, const char *);
+@@ -369,7 +388,6 @@ void aarch64_register_pragmas (void);
+ void aarch64_relayout_simd_types (void);
+ void aarch64_reset_previous_fndecl (void);
+ void aarch64_save_restore_target_globals (tree);
+-void aarch64_emit_approx_rsqrt (rtx, rtx);
+
+ /* Initialize builtins for SIMD intrinsics. */
+ void init_aarch64_simd_builtins (void);
+@@ -436,7 +454,6 @@ int aarch64_ccmp_mode_to_code (enum machine_mode mode);
+ bool extract_base_offset_in_addr (rtx mem, rtx *base, rtx *offset);
+ bool aarch64_operands_ok_for_ldpstp (rtx *, bool, enum machine_mode);
+ bool aarch64_operands_adjust_ok_for_ldpstp (rtx *, bool, enum machine_mode);
+-extern bool aarch64_nopcrelative_literal_loads;
+
+ extern void aarch64_asm_output_pool_epilogue (FILE *, const char *,
+ tree, HOST_WIDE_INT);
+@@ -450,4 +467,6 @@ enum aarch64_parse_opt_result aarch64_parse_extension (const char *,
+ std::string aarch64_get_extension_string_for_isa_flags (unsigned long,
+ unsigned long);
+
++rtl_opt_pass *make_pass_fma_steering (gcc::context *ctxt);
++
+ #endif /* GCC_AARCH64_PROTOS_H */
+--- a/src/gcc/config/aarch64/aarch64-simd-builtins.def
++++ b/src/gcc/config/aarch64/aarch64-simd-builtins.def
+@@ -40,9 +40,10 @@
+ 10 - CODE_FOR_<name><mode>. */
+
+ BUILTIN_VDC (COMBINE, combine, 0)
++ VAR1 (COMBINEP, combine, 0, di)
+ BUILTIN_VB (BINOP, pmul, 0)
+- BUILTIN_VALLF (BINOP, fmulx, 0)
+- BUILTIN_VDQF_DF (UNOP, sqrt, 2)
++ BUILTIN_VHSDF_HSDF (BINOP, fmulx, 0)
++ BUILTIN_VHSDF_DF (UNOP, sqrt, 2)
+ BUILTIN_VD_BHSI (BINOP, addp, 0)
+ VAR1 (UNOP, addp, 0, di)
+ BUILTIN_VDQ_BHSI (UNOP, clrsb, 2)
+@@ -68,14 +69,23 @@
+ BUILTIN_VDC (GETREG, get_dregoi, 0)
+ BUILTIN_VDC (GETREG, get_dregci, 0)
+ BUILTIN_VDC (GETREG, get_dregxi, 0)
++ VAR1 (GETREGP, get_dregoi, 0, di)
++ VAR1 (GETREGP, get_dregci, 0, di)
++ VAR1 (GETREGP, get_dregxi, 0, di)
+ /* Implemented by aarch64_get_qreg<VSTRUCT:mode><VQ:mode>. */
+ BUILTIN_VQ (GETREG, get_qregoi, 0)
+ BUILTIN_VQ (GETREG, get_qregci, 0)
+ BUILTIN_VQ (GETREG, get_qregxi, 0)
++ VAR1 (GETREGP, get_qregoi, 0, v2di)
++ VAR1 (GETREGP, get_qregci, 0, v2di)
++ VAR1 (GETREGP, get_qregxi, 0, v2di)
+ /* Implemented by aarch64_set_qreg<VSTRUCT:mode><VQ:mode>. */
+ BUILTIN_VQ (SETREG, set_qregoi, 0)
+ BUILTIN_VQ (SETREG, set_qregci, 0)
+ BUILTIN_VQ (SETREG, set_qregxi, 0)
++ VAR1 (SETREGP, set_qregoi, 0, v2di)
++ VAR1 (SETREGP, set_qregci, 0, v2di)
++ VAR1 (SETREGP, set_qregxi, 0, v2di)
+ /* Implemented by aarch64_ld<VSTRUCT:nregs><VDC:mode>. */
+ BUILTIN_VDC (LOADSTRUCT, ld2, 0)
+ BUILTIN_VDC (LOADSTRUCT, ld3, 0)
+@@ -224,6 +234,7 @@
+ BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n, 0)
+ BUILTIN_VSDQ_I_DI (USHIFTACC, usri_n, 0)
+ BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n, 0)
++ VAR2 (SHIFTINSERTP, ssli_n, 0, di, v2di)
+ BUILTIN_VSDQ_I_DI (USHIFTACC, usli_n, 0)
+ /* Implemented by aarch64_<sur>qshl<u>_n<mode>. */
+ BUILTIN_VSDQ_I (SHIFTIMM_USS, sqshlu_n, 0)
+@@ -234,105 +245,145 @@
+ BUILTIN_VALL (UNOP, reduc_plus_scal_, 10)
+
+ /* Implemented by reduc_<maxmin_uns>_scal_<mode> (producing scalar). */
+- BUILTIN_VDQIF (UNOP, reduc_smax_scal_, 10)
+- BUILTIN_VDQIF (UNOP, reduc_smin_scal_, 10)
++ BUILTIN_VDQIF_F16 (UNOP, reduc_smax_scal_, 10)
++ BUILTIN_VDQIF_F16 (UNOP, reduc_smin_scal_, 10)
+ BUILTIN_VDQ_BHSI (UNOPU, reduc_umax_scal_, 10)
+ BUILTIN_VDQ_BHSI (UNOPU, reduc_umin_scal_, 10)
+- BUILTIN_VDQF (UNOP, reduc_smax_nan_scal_, 10)
+- BUILTIN_VDQF (UNOP, reduc_smin_nan_scal_, 10)
++ BUILTIN_VHSDF (UNOP, reduc_smax_nan_scal_, 10)
++ BUILTIN_VHSDF (UNOP, reduc_smin_nan_scal_, 10)
+
+- /* Implemented by <maxmin><mode>3.
++ /* Implemented by <maxmin_uns><mode>3.
+ smax variants map to fmaxnm,
+ smax_nan variants map to fmax. */
+ BUILTIN_VDQ_BHSI (BINOP, smax, 3)
+ BUILTIN_VDQ_BHSI (BINOP, smin, 3)
+ BUILTIN_VDQ_BHSI (BINOP, umax, 3)
+ BUILTIN_VDQ_BHSI (BINOP, umin, 3)
+- BUILTIN_VDQF (BINOP, smax_nan, 3)
+- BUILTIN_VDQF (BINOP, smin_nan, 3)
++ BUILTIN_VHSDF_DF (BINOP, smax_nan, 3)
++ BUILTIN_VHSDF_DF (BINOP, smin_nan, 3)
+
+- /* Implemented by <fmaxmin><mode>3. */
+- BUILTIN_VDQF (BINOP, fmax, 3)
+- BUILTIN_VDQF (BINOP, fmin, 3)
++ /* Implemented by <maxmin_uns><mode>3. */
++ BUILTIN_VHSDF_HSDF (BINOP, fmax, 3)
++ BUILTIN_VHSDF_HSDF (BINOP, fmin, 3)
+
+ /* Implemented by aarch64_<maxmin_uns>p<mode>. */
+ BUILTIN_VDQ_BHSI (BINOP, smaxp, 0)
+ BUILTIN_VDQ_BHSI (BINOP, sminp, 0)
+ BUILTIN_VDQ_BHSI (BINOP, umaxp, 0)
+ BUILTIN_VDQ_BHSI (BINOP, uminp, 0)
+- BUILTIN_VDQF (BINOP, smaxp, 0)
+- BUILTIN_VDQF (BINOP, sminp, 0)
+- BUILTIN_VDQF (BINOP, smax_nanp, 0)
+- BUILTIN_VDQF (BINOP, smin_nanp, 0)
++ BUILTIN_VHSDF (BINOP, smaxp, 0)
++ BUILTIN_VHSDF (BINOP, sminp, 0)
++ BUILTIN_VHSDF (BINOP, smax_nanp, 0)
++ BUILTIN_VHSDF (BINOP, smin_nanp, 0)
+
+ /* Implemented by <frint_pattern><mode>2. */
+- BUILTIN_VDQF (UNOP, btrunc, 2)
+- BUILTIN_VDQF (UNOP, ceil, 2)
+- BUILTIN_VDQF (UNOP, floor, 2)
+- BUILTIN_VDQF (UNOP, nearbyint, 2)
+- BUILTIN_VDQF (UNOP, rint, 2)
+- BUILTIN_VDQF (UNOP, round, 2)
+- BUILTIN_VDQF_DF (UNOP, frintn, 2)
++ BUILTIN_VHSDF (UNOP, btrunc, 2)
++ BUILTIN_VHSDF (UNOP, ceil, 2)
++ BUILTIN_VHSDF (UNOP, floor, 2)
++ BUILTIN_VHSDF (UNOP, nearbyint, 2)
++ BUILTIN_VHSDF (UNOP, rint, 2)
++ BUILTIN_VHSDF (UNOP, round, 2)
++ BUILTIN_VHSDF_DF (UNOP, frintn, 2)
++
++ VAR1 (UNOP, btrunc, 2, hf)
++ VAR1 (UNOP, ceil, 2, hf)
++ VAR1 (UNOP, floor, 2, hf)
++ VAR1 (UNOP, frintn, 2, hf)
++ VAR1 (UNOP, nearbyint, 2, hf)
++ VAR1 (UNOP, rint, 2, hf)
++ VAR1 (UNOP, round, 2, hf)
+
+ /* Implemented by l<fcvt_pattern><su_optab><VQDF:mode><vcvt_target>2. */
++ VAR1 (UNOP, lbtruncv4hf, 2, v4hi)
++ VAR1 (UNOP, lbtruncv8hf, 2, v8hi)
+ VAR1 (UNOP, lbtruncv2sf, 2, v2si)
+ VAR1 (UNOP, lbtruncv4sf, 2, v4si)
+ VAR1 (UNOP, lbtruncv2df, 2, v2di)
+
++ VAR1 (UNOPUS, lbtruncuv4hf, 2, v4hi)
++ VAR1 (UNOPUS, lbtruncuv8hf, 2, v8hi)
+ VAR1 (UNOPUS, lbtruncuv2sf, 2, v2si)
+ VAR1 (UNOPUS, lbtruncuv4sf, 2, v4si)
+ VAR1 (UNOPUS, lbtruncuv2df, 2, v2di)
+
++ VAR1 (UNOP, lroundv4hf, 2, v4hi)
++ VAR1 (UNOP, lroundv8hf, 2, v8hi)
+ VAR1 (UNOP, lroundv2sf, 2, v2si)
+ VAR1 (UNOP, lroundv4sf, 2, v4si)
+ VAR1 (UNOP, lroundv2df, 2, v2di)
+- /* Implemented by l<fcvt_pattern><su_optab><GPF:mode><GPI:mode>2. */
++ /* Implemented by l<fcvt_pattern><su_optab><GPF_F16:mode><GPI:mode>2. */
++ BUILTIN_GPI_I16 (UNOP, lroundhf, 2)
+ VAR1 (UNOP, lroundsf, 2, si)
+ VAR1 (UNOP, lrounddf, 2, di)
+
++ VAR1 (UNOPUS, lrounduv4hf, 2, v4hi)
++ VAR1 (UNOPUS, lrounduv8hf, 2, v8hi)
+ VAR1 (UNOPUS, lrounduv2sf, 2, v2si)
+ VAR1 (UNOPUS, lrounduv4sf, 2, v4si)
+ VAR1 (UNOPUS, lrounduv2df, 2, v2di)
++ BUILTIN_GPI_I16 (UNOPUS, lrounduhf, 2)
+ VAR1 (UNOPUS, lroundusf, 2, si)
+ VAR1 (UNOPUS, lroundudf, 2, di)
+
++ VAR1 (UNOP, lceilv4hf, 2, v4hi)
++ VAR1 (UNOP, lceilv8hf, 2, v8hi)
+ VAR1 (UNOP, lceilv2sf, 2, v2si)
+ VAR1 (UNOP, lceilv4sf, 2, v4si)
+ VAR1 (UNOP, lceilv2df, 2, v2di)
++ BUILTIN_GPI_I16 (UNOP, lceilhf, 2)
+
++ VAR1 (UNOPUS, lceiluv4hf, 2, v4hi)
++ VAR1 (UNOPUS, lceiluv8hf, 2, v8hi)
+ VAR1 (UNOPUS, lceiluv2sf, 2, v2si)
+ VAR1 (UNOPUS, lceiluv4sf, 2, v4si)
+ VAR1 (UNOPUS, lceiluv2df, 2, v2di)
++ BUILTIN_GPI_I16 (UNOPUS, lceiluhf, 2)
+ VAR1 (UNOPUS, lceilusf, 2, si)
+ VAR1 (UNOPUS, lceiludf, 2, di)
+
++ VAR1 (UNOP, lfloorv4hf, 2, v4hi)
++ VAR1 (UNOP, lfloorv8hf, 2, v8hi)
+ VAR1 (UNOP, lfloorv2sf, 2, v2si)
+ VAR1 (UNOP, lfloorv4sf, 2, v4si)
+ VAR1 (UNOP, lfloorv2df, 2, v2di)
++ BUILTIN_GPI_I16 (UNOP, lfloorhf, 2)
+
++ VAR1 (UNOPUS, lflooruv4hf, 2, v4hi)
++ VAR1 (UNOPUS, lflooruv8hf, 2, v8hi)
+ VAR1 (UNOPUS, lflooruv2sf, 2, v2si)
+ VAR1 (UNOPUS, lflooruv4sf, 2, v4si)
+ VAR1 (UNOPUS, lflooruv2df, 2, v2di)
++ BUILTIN_GPI_I16 (UNOPUS, lflooruhf, 2)
+ VAR1 (UNOPUS, lfloorusf, 2, si)
+ VAR1 (UNOPUS, lfloorudf, 2, di)
+
++ VAR1 (UNOP, lfrintnv4hf, 2, v4hi)
++ VAR1 (UNOP, lfrintnv8hf, 2, v8hi)
+ VAR1 (UNOP, lfrintnv2sf, 2, v2si)
+ VAR1 (UNOP, lfrintnv4sf, 2, v4si)
+ VAR1 (UNOP, lfrintnv2df, 2, v2di)
++ BUILTIN_GPI_I16 (UNOP, lfrintnhf, 2)
+ VAR1 (UNOP, lfrintnsf, 2, si)
+ VAR1 (UNOP, lfrintndf, 2, di)
+
++ VAR1 (UNOPUS, lfrintnuv4hf, 2, v4hi)
++ VAR1 (UNOPUS, lfrintnuv8hf, 2, v8hi)
+ VAR1 (UNOPUS, lfrintnuv2sf, 2, v2si)
+ VAR1 (UNOPUS, lfrintnuv4sf, 2, v4si)
+ VAR1 (UNOPUS, lfrintnuv2df, 2, v2di)
++ BUILTIN_GPI_I16 (UNOPUS, lfrintnuhf, 2)
+ VAR1 (UNOPUS, lfrintnusf, 2, si)
+ VAR1 (UNOPUS, lfrintnudf, 2, di)
+
+ /* Implemented by <optab><fcvt_target><VDQF:mode>2. */
++ VAR1 (UNOP, floatv4hi, 2, v4hf)
++ VAR1 (UNOP, floatv8hi, 2, v8hf)
+ VAR1 (UNOP, floatv2si, 2, v2sf)
+ VAR1 (UNOP, floatv4si, 2, v4sf)
+ VAR1 (UNOP, floatv2di, 2, v2df)
+
++ VAR1 (UNOP, floatunsv4hi, 2, v4hf)
++ VAR1 (UNOP, floatunsv8hi, 2, v8hf)
+ VAR1 (UNOP, floatunsv2si, 2, v2sf)
+ VAR1 (UNOP, floatunsv4si, 2, v4sf)
+ VAR1 (UNOP, floatunsv2di, 2, v2df)
+@@ -352,19 +403,19 @@
+
+ /* Implemented by
+ aarch64_frecp<FRECP:frecp_suffix><mode>. */
+- BUILTIN_GPF (UNOP, frecpe, 0)
+- BUILTIN_GPF (BINOP, frecps, 0)
+- BUILTIN_GPF (UNOP, frecpx, 0)
++ BUILTIN_GPF_F16 (UNOP, frecpe, 0)
++ BUILTIN_GPF_F16 (UNOP, frecpx, 0)
+
+ BUILTIN_VDQ_SI (UNOP, urecpe, 0)
+
+- BUILTIN_VDQF (UNOP, frecpe, 0)
+- BUILTIN_VDQF (BINOP, frecps, 0)
++ BUILTIN_VHSDF (UNOP, frecpe, 0)
++ BUILTIN_VHSDF_HSDF (BINOP, frecps, 0)
+
+ /* Implemented by a mixture of abs2 patterns. Note the DImode builtin is
+ only ever used for the int64x1_t intrinsic, there is no scalar version. */
+ BUILTIN_VSDQ_I_DI (UNOP, abs, 0)
+- BUILTIN_VDQF (UNOP, abs, 2)
++ BUILTIN_VHSDF (UNOP, abs, 2)
++ VAR1 (UNOP, abs, 2, hf)
+
+ BUILTIN_VQ_HSF (UNOP, vec_unpacks_hi_, 10)
+ VAR1 (BINOP, float_truncate_hi_, 0, v4sf)
+@@ -376,15 +427,22 @@
+
+ /* Implemented by aarch64_ld1<VALL_F16:mode>. */
+ BUILTIN_VALL_F16 (LOAD1, ld1, 0)
++ VAR1(STORE1P, ld1, 0, v2di)
+
+ /* Implemented by aarch64_st1<VALL_F16:mode>. */
+ BUILTIN_VALL_F16 (STORE1, st1, 0)
++ VAR1(STORE1P, st1, 0, v2di)
+
+ /* Implemented by fma<mode>4. */
+- BUILTIN_VDQF (TERNOP, fma, 4)
++ BUILTIN_VHSDF (TERNOP, fma, 4)
++ VAR1 (TERNOP, fma, 4, hf)
++ /* Implemented by fnma<mode>4. */
++ BUILTIN_VHSDF (TERNOP, fnma, 4)
++ VAR1 (TERNOP, fnma, 4, hf)
+
+ /* Implemented by aarch64_simd_bsl<mode>. */
+ BUILTIN_VDQQH (BSL_P, simd_bsl, 0)
++ VAR2 (BSL_P, simd_bsl,0, di, v2di)
+ BUILTIN_VSDQ_I_DI (BSL_U, simd_bsl, 0)
+ BUILTIN_VALLDIF (BSL_S, simd_bsl, 0)
+
+@@ -436,7 +494,7 @@
+ VAR1 (TERNOP, qtbx4, 0, v8qi)
+ VAR1 (TERNOP, qtbx4, 0, v16qi)
+
+- /* Builtins for ARMv8.1 Adv.SIMD instructions. */
++ /* Builtins for ARMv8.1-A Adv.SIMD instructions. */
+
+ /* Implemented by aarch64_sqrdml<SQRDMLH_AS:rdma_as>h<mode>. */
+ BUILTIN_VSDQ_HSI (TERNOP, sqrdmlah, 0)
+@@ -449,3 +507,60 @@
+ /* Implemented by aarch64_sqrdml<SQRDMLH_AS:rdma_as>h_laneq<mode>. */
+ BUILTIN_VSDQ_HSI (QUADOP_LANE, sqrdmlah_laneq, 0)
+ BUILTIN_VSDQ_HSI (QUADOP_LANE, sqrdmlsh_laneq, 0)
++
++ /* Implemented by <FCVT_F2FIXED/FIXED2F:fcvt_fixed_insn><*><*>3. */
++ BUILTIN_VSDQ_HSDI (SHIFTIMM, scvtf, 3)
++ BUILTIN_VSDQ_HSDI (FCVTIMM_SUS, ucvtf, 3)
++ BUILTIN_VHSDF_HSDF (SHIFTIMM, fcvtzs, 3)
++ BUILTIN_VHSDF_HSDF (SHIFTIMM_USS, fcvtzu, 3)
++ VAR1 (SHIFTIMM, scvtfsi, 3, hf)
++ VAR1 (SHIFTIMM, scvtfdi, 3, hf)
++ VAR1 (FCVTIMM_SUS, ucvtfsi, 3, hf)
++ VAR1 (FCVTIMM_SUS, ucvtfdi, 3, hf)
++ BUILTIN_GPI (SHIFTIMM, fcvtzshf, 3)
++ BUILTIN_GPI (SHIFTIMM_USS, fcvtzuhf, 3)
++
++ /* Implemented by aarch64_rsqrte<mode>. */
++ BUILTIN_VHSDF_HSDF (UNOP, rsqrte, 0)
++
++ /* Implemented by aarch64_rsqrts<mode>. */
++ BUILTIN_VHSDF_HSDF (BINOP, rsqrts, 0)
++
++ /* Implemented by fabd<mode>3. */
++ BUILTIN_VHSDF_HSDF (BINOP, fabd, 3)
++
++ /* Implemented by aarch64_faddp<mode>. */
++ BUILTIN_VHSDF (BINOP, faddp, 0)
++
++ /* Implemented by aarch64_cm<optab><mode>. */
++ BUILTIN_VHSDF_HSDF (BINOP_USS, cmeq, 0)
++ BUILTIN_VHSDF_HSDF (BINOP_USS, cmge, 0)
++ BUILTIN_VHSDF_HSDF (BINOP_USS, cmgt, 0)
++ BUILTIN_VHSDF_HSDF (BINOP_USS, cmle, 0)
++ BUILTIN_VHSDF_HSDF (BINOP_USS, cmlt, 0)
++
++ /* Implemented by neg<mode>2. */
++ BUILTIN_VHSDF_HSDF (UNOP, neg, 2)
++
++ /* Implemented by aarch64_fac<optab><mode>. */
++ BUILTIN_VHSDF_HSDF (BINOP_USS, faclt, 0)
++ BUILTIN_VHSDF_HSDF (BINOP_USS, facle, 0)
++ BUILTIN_VHSDF_HSDF (BINOP_USS, facgt, 0)
++ BUILTIN_VHSDF_HSDF (BINOP_USS, facge, 0)
++
++ /* Implemented by sqrt<mode>2. */
++ VAR1 (UNOP, sqrt, 2, hf)
++
++ /* Implemented by <optab><mode>hf2. */
++ VAR1 (UNOP, floatdi, 2, hf)
++ VAR1 (UNOP, floatsi, 2, hf)
++ VAR1 (UNOP, floathi, 2, hf)
++ VAR1 (UNOPUS, floatunsdi, 2, hf)
++ VAR1 (UNOPUS, floatunssi, 2, hf)
++ VAR1 (UNOPUS, floatunshi, 2, hf)
++ BUILTIN_GPI_I16 (UNOP, fix_trunchf, 2)
++ BUILTIN_GPI (UNOP, fix_truncsf, 2)
++ BUILTIN_GPI (UNOP, fix_truncdf, 2)
++ BUILTIN_GPI_I16 (UNOPUS, fixuns_trunchf, 2)
++ BUILTIN_GPI (UNOPUS, fixuns_truncsf, 2)
++ BUILTIN_GPI (UNOPUS, fixuns_truncdf, 2)
+\ No newline at end of file
+--- a/src/gcc/config/aarch64/aarch64-simd.md
++++ b/src/gcc/config/aarch64/aarch64-simd.md
+@@ -351,7 +351,7 @@
+ operands[2] = GEN_INT (ENDIAN_LANE_N (<MODE>mode, INTVAL (operands[2])));
+ return "<f>mul\\t%0.<Vtype>, %3.<Vtype>, %1.<Vetype>[%2]";
+ }
+- [(set_attr "type" "neon<fp>_mul_<Vetype>_scalar<q>")]
++ [(set_attr "type" "neon<fp>_mul_<stype>_scalar<q>")]
+ )
+
+ (define_insn "*aarch64_mul3_elt_<vswap_width_name><mode>"
+@@ -371,33 +371,33 @@
+ [(set_attr "type" "neon<fp>_mul_<Vetype>_scalar<q>")]
+ )
+
+-(define_insn "*aarch64_mul3_elt_to_128df"
+- [(set (match_operand:V2DF 0 "register_operand" "=w")
+- (mult:V2DF
+- (vec_duplicate:V2DF
+- (match_operand:DF 2 "register_operand" "w"))
+- (match_operand:V2DF 1 "register_operand" "w")))]
++(define_insn "*aarch64_mul3_elt_from_dup<mode>"
++ [(set (match_operand:VMUL 0 "register_operand" "=w")
++ (mult:VMUL
++ (vec_duplicate:VMUL
++ (match_operand:<VEL> 1 "register_operand" "<h_con>"))
++ (match_operand:VMUL 2 "register_operand" "w")))]
+ "TARGET_SIMD"
+- "fmul\\t%0.2d, %1.2d, %2.d[0]"
+- [(set_attr "type" "neon_fp_mul_d_scalar_q")]
++ "<f>mul\t%0.<Vtype>, %2.<Vtype>, %1.<Vetype>[0]";
++ [(set_attr "type" "neon<fp>_mul_<stype>_scalar<q>")]
+ )
+
+-(define_insn "aarch64_rsqrte_<mode>2"
+- [(set (match_operand:VALLF 0 "register_operand" "=w")
+- (unspec:VALLF [(match_operand:VALLF 1 "register_operand" "w")]
++(define_insn "aarch64_rsqrte<mode>"
++ [(set (match_operand:VHSDF_HSDF 0 "register_operand" "=w")
++ (unspec:VHSDF_HSDF [(match_operand:VHSDF_HSDF 1 "register_operand" "w")]
+ UNSPEC_RSQRTE))]
+ "TARGET_SIMD"
+ "frsqrte\\t%<v>0<Vmtype>, %<v>1<Vmtype>"
+- [(set_attr "type" "neon_fp_rsqrte_<Vetype><q>")])
++ [(set_attr "type" "neon_fp_rsqrte_<stype><q>")])
+
+-(define_insn "aarch64_rsqrts_<mode>3"
+- [(set (match_operand:VALLF 0 "register_operand" "=w")
+- (unspec:VALLF [(match_operand:VALLF 1 "register_operand" "w")
+- (match_operand:VALLF 2 "register_operand" "w")]
+- UNSPEC_RSQRTS))]
++(define_insn "aarch64_rsqrts<mode>"
++ [(set (match_operand:VHSDF_HSDF 0 "register_operand" "=w")
++ (unspec:VHSDF_HSDF [(match_operand:VHSDF_HSDF 1 "register_operand" "w")
++ (match_operand:VHSDF_HSDF 2 "register_operand" "w")]
++ UNSPEC_RSQRTS))]
+ "TARGET_SIMD"
+ "frsqrts\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
+- [(set_attr "type" "neon_fp_rsqrts_<Vetype><q>")])
++ [(set_attr "type" "neon_fp_rsqrts_<stype><q>")])
+
+ (define_expand "rsqrt<mode>2"
+ [(set (match_operand:VALLF 0 "register_operand" "=w")
+@@ -405,7 +405,7 @@
+ UNSPEC_RSQRT))]
+ "TARGET_SIMD"
+ {
+- aarch64_emit_approx_rsqrt (operands[0], operands[1]);
++ aarch64_emit_approx_sqrt (operands[0], operands[1], true);
+ DONE;
+ })
+
+@@ -474,24 +474,15 @@
+ [(set_attr "type" "neon_arith_acc<q>")]
+ )
+
+-(define_insn "fabd<mode>_3"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (abs:VDQF (minus:VDQF
+- (match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w"))))]
+- "TARGET_SIMD"
+- "fabd\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_abd_<Vetype><q>")]
+-)
+-
+-(define_insn "*fabd_scalar<mode>3"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (abs:GPF (minus:GPF
+- (match_operand:GPF 1 "register_operand" "w")
+- (match_operand:GPF 2 "register_operand" "w"))))]
++(define_insn "fabd<mode>3"
++ [(set (match_operand:VHSDF_HSDF 0 "register_operand" "=w")
++ (abs:VHSDF_HSDF
++ (minus:VHSDF_HSDF
++ (match_operand:VHSDF_HSDF 1 "register_operand" "w")
++ (match_operand:VHSDF_HSDF 2 "register_operand" "w"))))]
+ "TARGET_SIMD"
+- "fabd\t%<s>0, %<s>1, %<s>2"
+- [(set_attr "type" "neon_fp_abd_<Vetype><q>")]
++ "fabd\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
++ [(set_attr "type" "neon_fp_abd_<stype><q>")]
+ )
+
+ (define_insn "and<mode>3"
+@@ -555,6 +546,49 @@
+ [(set_attr "type" "neon_from_gp<q>, neon_ins<q>, neon_load1_1reg<q>")]
+ )
+
++(define_insn "*aarch64_simd_vec_copy_lane<mode>"
++ [(set (match_operand:VALL 0 "register_operand" "=w")
++ (vec_merge:VALL
++ (vec_duplicate:VALL
++ (vec_select:<VEL>
++ (match_operand:VALL 3 "register_operand" "w")
++ (parallel
++ [(match_operand:SI 4 "immediate_operand" "i")])))
++ (match_operand:VALL 1 "register_operand" "0")
++ (match_operand:SI 2 "immediate_operand" "i")))]
++ "TARGET_SIMD"
++ {
++ int elt = ENDIAN_LANE_N (<MODE>mode, exact_log2 (INTVAL (operands[2])));
++ operands[2] = GEN_INT (HOST_WIDE_INT_1 << elt);
++ operands[4] = GEN_INT (ENDIAN_LANE_N (<MODE>mode, INTVAL (operands[4])));
++
++ return "ins\t%0.<Vetype>[%p2], %3.<Vetype>[%4]";
++ }
++ [(set_attr "type" "neon_ins<q>")]
++)
++
++(define_insn "*aarch64_simd_vec_copy_lane_<vswap_width_name><mode>"
++ [(set (match_operand:VALL 0 "register_operand" "=w")
++ (vec_merge:VALL
++ (vec_duplicate:VALL
++ (vec_select:<VEL>
++ (match_operand:<VSWAP_WIDTH> 3 "register_operand" "w")
++ (parallel
++ [(match_operand:SI 4 "immediate_operand" "i")])))
++ (match_operand:VALL 1 "register_operand" "0")
++ (match_operand:SI 2 "immediate_operand" "i")))]
++ "TARGET_SIMD"
++ {
++ int elt = ENDIAN_LANE_N (<MODE>mode, exact_log2 (INTVAL (operands[2])));
++ operands[2] = GEN_INT (HOST_WIDE_INT_1 << elt);
++ operands[4] = GEN_INT (ENDIAN_LANE_N (<VSWAP_WIDTH>mode,
++ INTVAL (operands[4])));
++
++ return "ins\t%0.<Vetype>[%p2], %3.<Vetype>[%4]";
++ }
++ [(set_attr "type" "neon_ins<q>")]
++)
++
+ (define_insn "aarch64_simd_lshr<mode>"
+ [(set (match_operand:VDQ_I 0 "register_operand" "=w")
+ (lshiftrt:VDQ_I (match_operand:VDQ_I 1 "register_operand" "w")
+@@ -1071,10 +1105,10 @@
+
+ ;; Pairwise FP Max/Min operations.
+ (define_insn "aarch64_<maxmin_uns>p<mode>"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w")]
+- FMAXMINV))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (unspec:VHSDF [(match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")]
++ FMAXMINV))]
+ "TARGET_SIMD"
+ "<maxmin_uns_op>p\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+ [(set_attr "type" "neon_minmax<q>")]
+@@ -1483,65 +1517,77 @@
+ ;; FP arithmetic operations.
+
+ (define_insn "add<mode>3"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (plus:VDQF (match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w")))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (plus:VHSDF (match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")))]
+ "TARGET_SIMD"
+ "fadd\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_addsub_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_addsub_<stype><q>")]
+ )
+
+ (define_insn "sub<mode>3"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (minus:VDQF (match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w")))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (minus:VHSDF (match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")))]
+ "TARGET_SIMD"
+ "fsub\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_addsub_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_addsub_<stype><q>")]
+ )
+
+ (define_insn "mul<mode>3"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (mult:VDQF (match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w")))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (mult:VHSDF (match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")))]
+ "TARGET_SIMD"
+ "fmul\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_mul_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_mul_<stype><q>")]
+ )
+
+-(define_insn "div<mode>3"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (div:VDQF (match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w")))]
++(define_expand "div<mode>3"
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (div:VHSDF (match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++{
++ if (aarch64_emit_approx_div (operands[0], operands[1], operands[2]))
++ DONE;
++
++ operands[1] = force_reg (<MODE>mode, operands[1]);
++})
++
++(define_insn "*div<mode>3"
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (div:VHSDF (match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")))]
+ "TARGET_SIMD"
+ "fdiv\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_div_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_div_<stype><q>")]
+ )
+
+ (define_insn "neg<mode>2"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (neg:VDQF (match_operand:VDQF 1 "register_operand" "w")))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (neg:VHSDF (match_operand:VHSDF 1 "register_operand" "w")))]
+ "TARGET_SIMD"
+ "fneg\\t%0.<Vtype>, %1.<Vtype>"
+- [(set_attr "type" "neon_fp_neg_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_neg_<stype><q>")]
+ )
+
+ (define_insn "abs<mode>2"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (abs:VDQF (match_operand:VDQF 1 "register_operand" "w")))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (abs:VHSDF (match_operand:VHSDF 1 "register_operand" "w")))]
+ "TARGET_SIMD"
+ "fabs\\t%0.<Vtype>, %1.<Vtype>"
+- [(set_attr "type" "neon_fp_abs_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_abs_<stype><q>")]
+ )
+
+ (define_insn "fma<mode>4"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (fma:VDQF (match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w")
+- (match_operand:VDQF 3 "register_operand" "0")))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (fma:VHSDF (match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")
++ (match_operand:VHSDF 3 "register_operand" "0")))]
+ "TARGET_SIMD"
+ "fmla\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_mla_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_mla_<stype><q>")]
+ )
+
+ (define_insn "*aarch64_fma4_elt<mode>"
+@@ -1579,16 +1625,16 @@
+ [(set_attr "type" "neon_fp_mla_<Vetype>_scalar<q>")]
+ )
+
+-(define_insn "*aarch64_fma4_elt_to_128df"
+- [(set (match_operand:V2DF 0 "register_operand" "=w")
+- (fma:V2DF
+- (vec_duplicate:V2DF
+- (match_operand:DF 1 "register_operand" "w"))
+- (match_operand:V2DF 2 "register_operand" "w")
+- (match_operand:V2DF 3 "register_operand" "0")))]
++(define_insn "*aarch64_fma4_elt_from_dup<mode>"
++ [(set (match_operand:VMUL 0 "register_operand" "=w")
++ (fma:VMUL
++ (vec_duplicate:VMUL
++ (match_operand:<VEL> 1 "register_operand" "w"))
++ (match_operand:VMUL 2 "register_operand" "w")
++ (match_operand:VMUL 3 "register_operand" "0")))]
+ "TARGET_SIMD"
+- "fmla\\t%0.2d, %2.2d, %1.2d[0]"
+- [(set_attr "type" "neon_fp_mla_d_scalar_q")]
++ "fmla\t%0.<Vtype>, %2.<Vtype>, %1.<Vetype>[0]"
++ [(set_attr "type" "neon<fp>_mla_<stype>_scalar<q>")]
+ )
+
+ (define_insn "*aarch64_fma4_elt_to_64v2df"
+@@ -1608,15 +1654,15 @@
+ )
+
+ (define_insn "fnma<mode>4"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (fma:VDQF
+- (match_operand:VDQF 1 "register_operand" "w")
+- (neg:VDQF
+- (match_operand:VDQF 2 "register_operand" "w"))
+- (match_operand:VDQF 3 "register_operand" "0")))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (fma:VHSDF
++ (match_operand:VHSDF 1 "register_operand" "w")
++ (neg:VHSDF
++ (match_operand:VHSDF 2 "register_operand" "w"))
++ (match_operand:VHSDF 3 "register_operand" "0")))]
+ "TARGET_SIMD"
+- "fmls\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_mla_<Vetype><q>")]
++ "fmls\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "type" "neon_fp_mla_<stype><q>")]
+ )
+
+ (define_insn "*aarch64_fnma4_elt<mode>"
+@@ -1656,17 +1702,17 @@
+ [(set_attr "type" "neon_fp_mla_<Vetype>_scalar<q>")]
+ )
+
+-(define_insn "*aarch64_fnma4_elt_to_128df"
+- [(set (match_operand:V2DF 0 "register_operand" "=w")
+- (fma:V2DF
+- (neg:V2DF
+- (match_operand:V2DF 2 "register_operand" "w"))
+- (vec_duplicate:V2DF
+- (match_operand:DF 1 "register_operand" "w"))
+- (match_operand:V2DF 3 "register_operand" "0")))]
++(define_insn "*aarch64_fnma4_elt_from_dup<mode>"
++ [(set (match_operand:VMUL 0 "register_operand" "=w")
++ (fma:VMUL
++ (neg:VMUL
++ (match_operand:VMUL 2 "register_operand" "w"))
++ (vec_duplicate:VMUL
++ (match_operand:<VEL> 1 "register_operand" "w"))
++ (match_operand:VMUL 3 "register_operand" "0")))]
+ "TARGET_SIMD"
+- "fmls\\t%0.2d, %2.2d, %1.2d[0]"
+- [(set_attr "type" "neon_fp_mla_d_scalar_q")]
++ "fmls\t%0.<Vtype>, %2.<Vtype>, %1.<Vetype>[0]"
++ [(set_attr "type" "neon<fp>_mla_<stype>_scalar<q>")]
+ )
+
+ (define_insn "*aarch64_fnma4_elt_to_64v2df"
+@@ -1689,24 +1735,50 @@
+ ;; Vector versions of the floating-point frint patterns.
+ ;; Expands to btrunc, ceil, floor, nearbyint, rint, round, frintn.
+ (define_insn "<frint_pattern><mode>2"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")]
+- FRINT))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (unspec:VHSDF [(match_operand:VHSDF 1 "register_operand" "w")]
++ FRINT))]
+ "TARGET_SIMD"
+ "frint<frint_suffix>\\t%0.<Vtype>, %1.<Vtype>"
+- [(set_attr "type" "neon_fp_round_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_round_<stype><q>")]
+ )
+
+ ;; Vector versions of the fcvt standard patterns.
+ ;; Expands to lbtrunc, lround, lceil, lfloor
+-(define_insn "l<fcvt_pattern><su_optab><VDQF:mode><fcvt_target>2"
++(define_insn "l<fcvt_pattern><su_optab><VHSDF:mode><fcvt_target>2"
+ [(set (match_operand:<FCVT_TARGET> 0 "register_operand" "=w")
+ (FIXUORS:<FCVT_TARGET> (unspec:<FCVT_TARGET>
+- [(match_operand:VDQF 1 "register_operand" "w")]
++ [(match_operand:VHSDF 1 "register_operand" "w")]
+ FCVT)))]
+ "TARGET_SIMD"
+ "fcvt<frint_suffix><su>\\t%0.<Vtype>, %1.<Vtype>"
+- [(set_attr "type" "neon_fp_to_int_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_to_int_<stype><q>")]
++)
++
++;; HF Scalar variants of related SIMD instructions.
++(define_insn "l<fcvt_pattern><su_optab>hfhi2"
++ [(set (match_operand:HI 0 "register_operand" "=w")
++ (FIXUORS:HI (unspec:HF [(match_operand:HF 1 "register_operand" "w")]
++ FCVT)))]
++ "TARGET_SIMD_F16INST"
++ "fcvt<frint_suffix><su>\t%h0, %h1"
++ [(set_attr "type" "neon_fp_to_int_s")]
++)
++
++(define_insn "<optab>_trunchfhi2"
++ [(set (match_operand:HI 0 "register_operand" "=w")
++ (FIXUORS:HI (match_operand:HF 1 "register_operand" "w")))]
++ "TARGET_SIMD_F16INST"
++ "fcvtz<su>\t%h0, %h1"
++ [(set_attr "type" "neon_fp_to_int_s")]
++)
++
++(define_insn "<optab>hihf2"
++ [(set (match_operand:HF 0 "register_operand" "=w")
++ (FLOATUORS:HF (match_operand:HI 1 "register_operand" "w")))]
++ "TARGET_SIMD_F16INST"
++ "<su_optab>cvtf\t%h0, %h1"
++ [(set_attr "type" "neon_int_to_fp_s")]
+ )
+
+ (define_insn "*aarch64_fcvt<su_optab><VDQF:mode><fcvt_target>2_mult"
+@@ -1729,36 +1801,36 @@
+ [(set_attr "type" "neon_fp_to_int_<Vetype><q>")]
+ )
+
+-(define_expand "<optab><VDQF:mode><fcvt_target>2"
++(define_expand "<optab><VHSDF:mode><fcvt_target>2"
+ [(set (match_operand:<FCVT_TARGET> 0 "register_operand")
+ (FIXUORS:<FCVT_TARGET> (unspec:<FCVT_TARGET>
+- [(match_operand:VDQF 1 "register_operand")]
+- UNSPEC_FRINTZ)))]
++ [(match_operand:VHSDF 1 "register_operand")]
++ UNSPEC_FRINTZ)))]
+ "TARGET_SIMD"
+ {})
+
+-(define_expand "<fix_trunc_optab><VDQF:mode><fcvt_target>2"
++(define_expand "<fix_trunc_optab><VHSDF:mode><fcvt_target>2"
+ [(set (match_operand:<FCVT_TARGET> 0 "register_operand")
+ (FIXUORS:<FCVT_TARGET> (unspec:<FCVT_TARGET>
+- [(match_operand:VDQF 1 "register_operand")]
+- UNSPEC_FRINTZ)))]
++ [(match_operand:VHSDF 1 "register_operand")]
++ UNSPEC_FRINTZ)))]
+ "TARGET_SIMD"
+ {})
+
+-(define_expand "ftrunc<VDQF:mode>2"
+- [(set (match_operand:VDQF 0 "register_operand")
+- (unspec:VDQF [(match_operand:VDQF 1 "register_operand")]
+- UNSPEC_FRINTZ))]
++(define_expand "ftrunc<VHSDF:mode>2"
++ [(set (match_operand:VHSDF 0 "register_operand")
++ (unspec:VHSDF [(match_operand:VHSDF 1 "register_operand")]
++ UNSPEC_FRINTZ))]
+ "TARGET_SIMD"
+ {})
+
+-(define_insn "<optab><fcvt_target><VDQF:mode>2"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (FLOATUORS:VDQF
++(define_insn "<optab><fcvt_target><VHSDF:mode>2"
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (FLOATUORS:VHSDF
+ (match_operand:<FCVT_TARGET> 1 "register_operand" "w")))]
+ "TARGET_SIMD"
+ "<su_optab>cvtf\\t%0.<Vtype>, %1.<Vtype>"
+- [(set_attr "type" "neon_int_to_fp_<Vetype><q>")]
++ [(set_attr "type" "neon_int_to_fp_<stype><q>")]
+ )
+
+ ;; Conversions between vectors of floats and doubles.
+@@ -1778,6 +1850,30 @@
+ [(set_attr "type" "neon_fp_cvt_widen_s")]
+ )
+
++;; Convert between fixed-point and floating-point (vector modes)
++
++(define_insn "<FCVT_F2FIXED:fcvt_fixed_insn><VHSDF:mode>3"
++ [(set (match_operand:<VHSDF:FCVT_TARGET> 0 "register_operand" "=w")
++ (unspec:<VHSDF:FCVT_TARGET>
++ [(match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ FCVT_F2FIXED))]
++ "TARGET_SIMD"
++ "<FCVT_F2FIXED:fcvt_fixed_insn>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #%2"
++ [(set_attr "type" "neon_fp_to_int_<VHSDF:stype><q>")]
++)
++
++(define_insn "<FCVT_FIXED2F:fcvt_fixed_insn><VDQ_HSDI:mode>3"
++ [(set (match_operand:<VDQ_HSDI:FCVT_TARGET> 0 "register_operand" "=w")
++ (unspec:<VDQ_HSDI:FCVT_TARGET>
++ [(match_operand:VDQ_HSDI 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ FCVT_FIXED2F))]
++ "TARGET_SIMD"
++ "<FCVT_FIXED2F:fcvt_fixed_insn>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #%2"
++ [(set_attr "type" "neon_int_to_fp_<VDQ_HSDI:stype><q>")]
++)
++
+ ;; ??? Note that the vectorizer usage of the vec_unpacks_[lo/hi] patterns
+ ;; is inconsistent with vector ordering elsewhere in the compiler, in that
+ ;; the meaning of HI and LO changes depending on the target endianness.
+@@ -1934,33 +2030,25 @@
+ ;; NaNs.
+
+ (define_insn "<su><maxmin><mode>3"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (FMAXMIN:VDQF (match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w")))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (FMAXMIN:VHSDF (match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")))]
+ "TARGET_SIMD"
+ "f<maxmin>nm\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_minmax_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_minmax_<stype><q>")]
+ )
+
++;; Vector forms for fmax, fmin, fmaxnm, fminnm.
++;; fmaxnm and fminnm are used for the fmax<mode>3 standard pattern names,
++;; which implement the IEEE fmax ()/fmin () functions.
+ (define_insn "<maxmin_uns><mode>3"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w")]
+- FMAXMIN_UNS))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (unspec:VHSDF [(match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")]
++ FMAXMIN_UNS))]
+ "TARGET_SIMD"
+ "<maxmin_uns_op>\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_minmax_<Vetype><q>")]
+-)
+-
+-;; Auto-vectorized forms for the IEEE-754 fmax()/fmin() functions
+-(define_insn "<fmaxmin><mode>3"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")
+- (match_operand:VDQF 2 "register_operand" "w")]
+- FMAXMIN))]
+- "TARGET_SIMD"
+- "<fmaxmin_op>\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+- [(set_attr "type" "neon_fp_minmax_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_minmax_<stype><q>")]
+ )
+
+ ;; 'across lanes' add.
+@@ -1979,17 +2067,14 @@
+ }
+ )
+
+-(define_expand "reduc_plus_scal_<mode>"
+- [(match_operand:<VEL> 0 "register_operand" "=w")
+- (match_operand:V2F 1 "register_operand" "w")]
+- "TARGET_SIMD"
+- {
+- rtx elt = GEN_INT (ENDIAN_LANE_N (<MODE>mode, 0));
+- rtx scratch = gen_reg_rtx (<MODE>mode);
+- emit_insn (gen_aarch64_reduc_plus_internal<mode> (scratch, operands[1]));
+- emit_insn (gen_aarch64_get_lane<mode> (operands[0], scratch, elt));
+- DONE;
+- }
++(define_insn "aarch64_faddp<mode>"
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (unspec:VHSDF [(match_operand:VHSDF 1 "register_operand" "w")
++ (match_operand:VHSDF 2 "register_operand" "w")]
++ UNSPEC_FADDV))]
++ "TARGET_SIMD"
++ "faddp\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "type" "neon_fp_reduc_add_<stype><q>")]
+ )
+
+ (define_insn "aarch64_reduc_plus_internal<mode>"
+@@ -2010,24 +2095,15 @@
+ [(set_attr "type" "neon_reduc_add")]
+ )
+
+-(define_insn "aarch64_reduc_plus_internal<mode>"
+- [(set (match_operand:V2F 0 "register_operand" "=w")
+- (unspec:V2F [(match_operand:V2F 1 "register_operand" "w")]
++(define_insn "reduc_plus_scal_<mode>"
++ [(set (match_operand:<VEL> 0 "register_operand" "=w")
++ (unspec:<VEL> [(match_operand:V2F 1 "register_operand" "w")]
+ UNSPEC_FADDV))]
+ "TARGET_SIMD"
+ "faddp\\t%<Vetype>0, %1.<Vtype>"
+ [(set_attr "type" "neon_fp_reduc_add_<Vetype><q>")]
+ )
+
+-(define_insn "aarch64_addpv4sf"
+- [(set (match_operand:V4SF 0 "register_operand" "=w")
+- (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "w")]
+- UNSPEC_FADDV))]
+- "TARGET_SIMD"
+- "faddp\\t%0.4s, %1.4s, %1.4s"
+- [(set_attr "type" "neon_fp_reduc_add_s_q")]
+-)
+-
+ (define_expand "reduc_plus_scal_v4sf"
+ [(set (match_operand:SF 0 "register_operand")
+ (unspec:V4SF [(match_operand:V4SF 1 "register_operand")]
+@@ -2036,8 +2112,8 @@
+ {
+ rtx elt = GEN_INT (ENDIAN_LANE_N (V4SFmode, 0));
+ rtx scratch = gen_reg_rtx (V4SFmode);
+- emit_insn (gen_aarch64_addpv4sf (scratch, operands[1]));
+- emit_insn (gen_aarch64_addpv4sf (scratch, scratch));
++ emit_insn (gen_aarch64_faddpv4sf (scratch, operands[1], operands[1]));
++ emit_insn (gen_aarch64_faddpv4sf (scratch, scratch, scratch));
+ emit_insn (gen_aarch64_get_lanev4sf (operands[0], scratch, elt));
+ DONE;
+ })
+@@ -2072,8 +2148,8 @@
+ ;; gimple_fold'd to the REDUC_(MAX|MIN)_EXPR tree code. (This is FP smax/smin).
+ (define_expand "reduc_<maxmin_uns>_scal_<mode>"
+ [(match_operand:<VEL> 0 "register_operand")
+- (unspec:VDQF [(match_operand:VDQF 1 "register_operand")]
+- FMAXMINV)]
++ (unspec:VHSDF [(match_operand:VHSDF 1 "register_operand")]
++ FMAXMINV)]
+ "TARGET_SIMD"
+ {
+ rtx elt = GEN_INT (ENDIAN_LANE_N (<MODE>mode, 0));
+@@ -2120,12 +2196,12 @@
+ )
+
+ (define_insn "aarch64_reduc_<maxmin_uns>_internal<mode>"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")]
+- FMAXMINV))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (unspec:VHSDF [(match_operand:VHSDF 1 "register_operand" "w")]
++ FMAXMINV))]
+ "TARGET_SIMD"
+ "<maxmin_uns_op><vp>\\t%<Vetype>0, %1.<Vtype>"
+- [(set_attr "type" "neon_fp_reduc_minmax_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_reduc_minmax_<stype><q>")]
+ )
+
+ ;; aarch64_simd_bsl may compile to any of bsl/bif/bit depending on register
+@@ -2635,7 +2711,7 @@
+ (define_insn "*aarch64_combinez<mode>"
+ [(set (match_operand:<VDBL> 0 "register_operand" "=w,w,w")
+ (vec_concat:<VDBL>
+- (match_operand:VD_BHSI 1 "general_operand" "w,r,m")
++ (match_operand:VD_BHSI 1 "general_operand" "w,?r,m")
+ (match_operand:VD_BHSI 2 "aarch64_simd_imm_zero" "Dz,Dz,Dz")))]
+ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
+ "@
+@@ -2651,7 +2727,7 @@
+ [(set (match_operand:<VDBL> 0 "register_operand" "=w,w,w")
+ (vec_concat:<VDBL>
+ (match_operand:VD_BHSI 2 "aarch64_simd_imm_zero" "Dz,Dz,Dz")
+- (match_operand:VD_BHSI 1 "general_operand" "w,r,m")))]
++ (match_operand:VD_BHSI 1 "general_operand" "w,?r,m")))]
+ "TARGET_SIMD && BYTES_BIG_ENDIAN"
+ "@
+ mov\\t%0.8b, %1.8b
+@@ -2994,13 +3070,14 @@
+ ;; fmulx.
+
+ (define_insn "aarch64_fmulx<mode>"
+- [(set (match_operand:VALLF 0 "register_operand" "=w")
+- (unspec:VALLF [(match_operand:VALLF 1 "register_operand" "w")
+- (match_operand:VALLF 2 "register_operand" "w")]
+- UNSPEC_FMULX))]
++ [(set (match_operand:VHSDF_HSDF 0 "register_operand" "=w")
++ (unspec:VHSDF_HSDF
++ [(match_operand:VHSDF_HSDF 1 "register_operand" "w")
++ (match_operand:VHSDF_HSDF 2 "register_operand" "w")]
++ UNSPEC_FMULX))]
+ "TARGET_SIMD"
+ "fmulx\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
+- [(set_attr "type" "neon_fp_mul_<Vetype>")]
++ [(set_attr "type" "neon_fp_mul_<stype>")]
+ )
+
+ ;; vmulxq_lane_f32, and vmulx_laneq_f32
+@@ -3042,20 +3119,18 @@
+ [(set_attr "type" "neon_fp_mul_<Vetype><q>")]
+ )
+
+-;; vmulxq_lane_f64
++;; vmulxq_lane
+
+-(define_insn "*aarch64_mulx_elt_to_64v2df"
+- [(set (match_operand:V2DF 0 "register_operand" "=w")
+- (unspec:V2DF
+- [(match_operand:V2DF 1 "register_operand" "w")
+- (vec_duplicate:V2DF
+- (match_operand:DF 2 "register_operand" "w"))]
++(define_insn "*aarch64_mulx_elt_from_dup<mode>"
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (unspec:VHSDF
++ [(match_operand:VHSDF 1 "register_operand" "w")
++ (vec_duplicate:VHSDF
++ (match_operand:<VEL> 2 "register_operand" "w"))]
+ UNSPEC_FMULX))]
+ "TARGET_SIMD"
+- {
+- return "fmulx\t%0.2d, %1.2d, %2.d[0]";
+- }
+- [(set_attr "type" "neon_fp_mul_d_scalar_q")]
++ "fmulx\t%0.<Vtype>, %1.<Vtype>, %2.<Vetype>[0]";
++ [(set_attr "type" "neon<fp>_mul_<stype>_scalar<q>")]
+ )
+
+ ;; vmulxs_lane_f32, vmulxs_laneq_f32
+@@ -3937,15 +4012,12 @@
+ "aarch64_simd_shift_imm_bitsize_<ve_mode>" "i")]
+ VSHLL))]
+ "TARGET_SIMD"
+- "*
+- int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
+- if (INTVAL (operands[2]) == bit_width)
+ {
+- return \"shll\\t%0.<Vwtype>, %1.<Vtype>, %2\";
++ if (INTVAL (operands[2]) == GET_MODE_UNIT_BITSIZE (<MODE>mode))
++ return "shll\\t%0.<Vwtype>, %1.<Vtype>, %2";
++ else
++ return "<sur>shll\\t%0.<Vwtype>, %1.<Vtype>, %2";
+ }
+- else {
+- return \"<sur>shll\\t%0.<Vwtype>, %1.<Vtype>, %2\";
+- }"
+ [(set_attr "type" "neon_shift_imm_long")]
+ )
+
+@@ -3957,15 +4029,12 @@
+ (match_operand:SI 2 "immediate_operand" "i")]
+ VSHLL))]
+ "TARGET_SIMD"
+- "*
+- int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
+- if (INTVAL (operands[2]) == bit_width)
+ {
+- return \"shll2\\t%0.<Vwtype>, %1.<Vtype>, %2\";
++ if (INTVAL (operands[2]) == GET_MODE_UNIT_BITSIZE (<MODE>mode))
++ return "shll2\\t%0.<Vwtype>, %1.<Vtype>, %2";
++ else
++ return "<sur>shll2\\t%0.<Vwtype>, %1.<Vtype>, %2";
+ }
+- else {
+- return \"<sur>shll2\\t%0.<Vwtype>, %1.<Vtype>, %2\";
+- }"
+ [(set_attr "type" "neon_shift_imm_long")]
+ )
+
+@@ -4246,30 +4315,32 @@
+ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
+ (neg:<V_cmp_result>
+ (COMPARISONS:<V_cmp_result>
+- (match_operand:VALLF 1 "register_operand" "w,w")
+- (match_operand:VALLF 2 "aarch64_simd_reg_or_zero" "w,YDz")
++ (match_operand:VHSDF_HSDF 1 "register_operand" "w,w")
++ (match_operand:VHSDF_HSDF 2 "aarch64_simd_reg_or_zero" "w,YDz")
+ )))]
+ "TARGET_SIMD"
+ "@
+ fcm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
+ fcm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
+- [(set_attr "type" "neon_fp_compare_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_compare_<stype><q>")]
+ )
+
+ ;; fac(ge|gt)
+ ;; Note we can also handle what would be fac(le|lt) by
+ ;; generating fac(ge|gt).
+
+-(define_insn "*aarch64_fac<optab><mode>"
++(define_insn "aarch64_fac<optab><mode>"
+ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
+ (neg:<V_cmp_result>
+ (FAC_COMPARISONS:<V_cmp_result>
+- (abs:VALLF (match_operand:VALLF 1 "register_operand" "w"))
+- (abs:VALLF (match_operand:VALLF 2 "register_operand" "w"))
++ (abs:VHSDF_HSDF
++ (match_operand:VHSDF_HSDF 1 "register_operand" "w"))
++ (abs:VHSDF_HSDF
++ (match_operand:VHSDF_HSDF 2 "register_operand" "w"))
+ )))]
+ "TARGET_SIMD"
+ "fac<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>"
+- [(set_attr "type" "neon_fp_compare_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_compare_<stype><q>")]
+ )
+
+ ;; addp
+@@ -4297,12 +4368,21 @@
+
+ ;; sqrt
+
+-(define_insn "sqrt<mode>2"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (sqrt:VDQF (match_operand:VDQF 1 "register_operand" "w")))]
++(define_expand "sqrt<mode>2"
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (sqrt:VHSDF (match_operand:VHSDF 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++{
++ if (aarch64_emit_approx_sqrt (operands[0], operands[1], false))
++ DONE;
++})
++
++(define_insn "*sqrt<mode>2"
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (sqrt:VHSDF (match_operand:VHSDF 1 "register_operand" "w")))]
+ "TARGET_SIMD"
+ "fsqrt\\t%0.<Vtype>, %1.<Vtype>"
+- [(set_attr "type" "neon_fp_sqrt_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_sqrt_<stype><q>")]
+ )
+
+ ;; Patterns for vector struct loads and stores.
+@@ -4652,7 +4732,7 @@
+ ld1\\t{%S0.16b - %<Vendreg>0.16b}, %1"
+ [(set_attr "type" "multiple,neon_store<nregs>_<nregs>reg_q,\
+ neon_load<nregs>_<nregs>reg_q")
+- (set (attr "length") (symbol_ref "aarch64_simd_attr_length_move (insn)"))]
++ (set_attr "length" "<insn_count>,4,4")]
+ )
+
+ (define_insn "aarch64_be_ld1<mode>"
+@@ -4685,7 +4765,7 @@
+ stp\\t%q1, %R1, %0
+ ldp\\t%q0, %R0, %1"
+ [(set_attr "type" "multiple,neon_stp_q,neon_ldp_q")
+- (set (attr "length") (symbol_ref "aarch64_simd_attr_length_move (insn)"))]
++ (set_attr "length" "8,4,4")]
+ )
+
+ (define_insn "*aarch64_be_movci"
+@@ -4696,7 +4776,7 @@
+ || register_operand (operands[1], CImode))"
+ "#"
+ [(set_attr "type" "multiple")
+- (set (attr "length") (symbol_ref "aarch64_simd_attr_length_move (insn)"))]
++ (set_attr "length" "12,4,4")]
+ )
+
+ (define_insn "*aarch64_be_movxi"
+@@ -4707,7 +4787,7 @@
+ || register_operand (operands[1], XImode))"
+ "#"
+ [(set_attr "type" "multiple")
+- (set (attr "length") (symbol_ref "aarch64_simd_attr_length_move (insn)"))]
++ (set_attr "length" "16,4,4")]
+ )
+
+ (define_split
+@@ -4787,7 +4867,7 @@
+ DONE;
+ })
+
+-(define_insn "aarch64_ld2<mode>_dreg"
++(define_insn "aarch64_ld2<mode>_dreg_le"
+ [(set (match_operand:OI 0 "register_operand" "=w")
+ (subreg:OI
+ (vec_concat:<VRL2>
+@@ -4800,12 +4880,30 @@
+ (unspec:VD [(match_dup 1)]
+ UNSPEC_LD2)
+ (vec_duplicate:VD (const_int 0)))) 0))]
+- "TARGET_SIMD"
++ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
+ "ld2\\t{%S0.<Vtype> - %T0.<Vtype>}, %1"
+ [(set_attr "type" "neon_load2_2reg<q>")]
+ )
+
+-(define_insn "aarch64_ld2<mode>_dreg"
++(define_insn "aarch64_ld2<mode>_dreg_be"
++ [(set (match_operand:OI 0 "register_operand" "=w")
++ (subreg:OI
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (vec_duplicate:VD (const_int 0))
++ (unspec:VD
++ [(match_operand:BLK 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD2))
++ (vec_concat:<VDBL>
++ (vec_duplicate:VD (const_int 0))
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD2))) 0))]
++ "TARGET_SIMD && BYTES_BIG_ENDIAN"
++ "ld2\\t{%S0.<Vtype> - %T0.<Vtype>}, %1"
++ [(set_attr "type" "neon_load2_2reg<q>")]
++)
++
++(define_insn "aarch64_ld2<mode>_dreg_le"
+ [(set (match_operand:OI 0 "register_operand" "=w")
+ (subreg:OI
+ (vec_concat:<VRL2>
+@@ -4818,12 +4916,30 @@
+ (unspec:DX [(match_dup 1)]
+ UNSPEC_LD2)
+ (const_int 0))) 0))]
+- "TARGET_SIMD"
++ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
+ "ld1\\t{%S0.1d - %T0.1d}, %1"
+ [(set_attr "type" "neon_load1_2reg<q>")]
+ )
+
+-(define_insn "aarch64_ld3<mode>_dreg"
++(define_insn "aarch64_ld2<mode>_dreg_be"
++ [(set (match_operand:OI 0 "register_operand" "=w")
++ (subreg:OI
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (const_int 0)
++ (unspec:DX
++ [(match_operand:BLK 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD2))
++ (vec_concat:<VDBL>
++ (const_int 0)
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD2))) 0))]
++ "TARGET_SIMD && BYTES_BIG_ENDIAN"
++ "ld1\\t{%S0.1d - %T0.1d}, %1"
++ [(set_attr "type" "neon_load1_2reg<q>")]
++)
++
++(define_insn "aarch64_ld3<mode>_dreg_le"
+ [(set (match_operand:CI 0 "register_operand" "=w")
+ (subreg:CI
+ (vec_concat:<VRL3>
+@@ -4841,12 +4957,35 @@
+ (unspec:VD [(match_dup 1)]
+ UNSPEC_LD3)
+ (vec_duplicate:VD (const_int 0)))) 0))]
+- "TARGET_SIMD"
++ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
++ "ld3\\t{%S0.<Vtype> - %U0.<Vtype>}, %1"
++ [(set_attr "type" "neon_load3_3reg<q>")]
++)
++
++(define_insn "aarch64_ld3<mode>_dreg_be"
++ [(set (match_operand:CI 0 "register_operand" "=w")
++ (subreg:CI
++ (vec_concat:<VRL3>
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (vec_duplicate:VD (const_int 0))
++ (unspec:VD
++ [(match_operand:BLK 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD3))
++ (vec_concat:<VDBL>
++ (vec_duplicate:VD (const_int 0))
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD3)))
++ (vec_concat:<VDBL>
++ (vec_duplicate:VD (const_int 0))
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD3))) 0))]
++ "TARGET_SIMD && BYTES_BIG_ENDIAN"
+ "ld3\\t{%S0.<Vtype> - %U0.<Vtype>}, %1"
+ [(set_attr "type" "neon_load3_3reg<q>")]
+ )
+
+-(define_insn "aarch64_ld3<mode>_dreg"
++(define_insn "aarch64_ld3<mode>_dreg_le"
+ [(set (match_operand:CI 0 "register_operand" "=w")
+ (subreg:CI
+ (vec_concat:<VRL3>
+@@ -4864,12 +5003,35 @@
+ (unspec:DX [(match_dup 1)]
+ UNSPEC_LD3)
+ (const_int 0))) 0))]
+- "TARGET_SIMD"
++ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
+ "ld1\\t{%S0.1d - %U0.1d}, %1"
+ [(set_attr "type" "neon_load1_3reg<q>")]
+ )
+
+-(define_insn "aarch64_ld4<mode>_dreg"
++(define_insn "aarch64_ld3<mode>_dreg_be"
++ [(set (match_operand:CI 0 "register_operand" "=w")
++ (subreg:CI
++ (vec_concat:<VRL3>
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (const_int 0)
++ (unspec:DX
++ [(match_operand:BLK 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD3))
++ (vec_concat:<VDBL>
++ (const_int 0)
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD3)))
++ (vec_concat:<VDBL>
++ (const_int 0)
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD3))) 0))]
++ "TARGET_SIMD && BYTES_BIG_ENDIAN"
++ "ld1\\t{%S0.1d - %U0.1d}, %1"
++ [(set_attr "type" "neon_load1_3reg<q>")]
++)
++
++(define_insn "aarch64_ld4<mode>_dreg_le"
+ [(set (match_operand:XI 0 "register_operand" "=w")
+ (subreg:XI
+ (vec_concat:<VRL4>
+@@ -4880,9 +5042,9 @@
+ UNSPEC_LD4)
+ (vec_duplicate:VD (const_int 0)))
+ (vec_concat:<VDBL>
+- (unspec:VD [(match_dup 1)]
++ (unspec:VD [(match_dup 1)]
+ UNSPEC_LD4)
+- (vec_duplicate:VD (const_int 0))))
++ (vec_duplicate:VD (const_int 0))))
+ (vec_concat:<VRL2>
+ (vec_concat:<VDBL>
+ (unspec:VD [(match_dup 1)]
+@@ -4892,12 +5054,40 @@
+ (unspec:VD [(match_dup 1)]
+ UNSPEC_LD4)
+ (vec_duplicate:VD (const_int 0))))) 0))]
+- "TARGET_SIMD"
++ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
++ "ld4\\t{%S0.<Vtype> - %V0.<Vtype>}, %1"
++ [(set_attr "type" "neon_load4_4reg<q>")]
++)
++
++(define_insn "aarch64_ld4<mode>_dreg_be"
++ [(set (match_operand:XI 0 "register_operand" "=w")
++ (subreg:XI
++ (vec_concat:<VRL4>
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (vec_duplicate:VD (const_int 0))
++ (unspec:VD
++ [(match_operand:BLK 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD4))
++ (vec_concat:<VDBL>
++ (vec_duplicate:VD (const_int 0))
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD4)))
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (vec_duplicate:VD (const_int 0))
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD4))
++ (vec_concat:<VDBL>
++ (vec_duplicate:VD (const_int 0))
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD4)))) 0))]
++ "TARGET_SIMD && BYTES_BIG_ENDIAN"
+ "ld4\\t{%S0.<Vtype> - %V0.<Vtype>}, %1"
+ [(set_attr "type" "neon_load4_4reg<q>")]
+ )
+
+-(define_insn "aarch64_ld4<mode>_dreg"
++(define_insn "aarch64_ld4<mode>_dreg_le"
+ [(set (match_operand:XI 0 "register_operand" "=w")
+ (subreg:XI
+ (vec_concat:<VRL4>
+@@ -4910,7 +5100,7 @@
+ (vec_concat:<VDBL>
+ (unspec:DX [(match_dup 1)]
+ UNSPEC_LD4)
+- (const_int 0)))
++ (const_int 0)))
+ (vec_concat:<VRL2>
+ (vec_concat:<VDBL>
+ (unspec:DX [(match_dup 1)]
+@@ -4920,7 +5110,35 @@
+ (unspec:DX [(match_dup 1)]
+ UNSPEC_LD4)
+ (const_int 0)))) 0))]
+- "TARGET_SIMD"
++ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
++ "ld1\\t{%S0.1d - %V0.1d}, %1"
++ [(set_attr "type" "neon_load1_4reg<q>")]
++)
++
++(define_insn "aarch64_ld4<mode>_dreg_be"
++ [(set (match_operand:XI 0 "register_operand" "=w")
++ (subreg:XI
++ (vec_concat:<VRL4>
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (const_int 0)
++ (unspec:DX
++ [(match_operand:BLK 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD4))
++ (vec_concat:<VDBL>
++ (const_int 0)
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD4)))
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (const_int 0)
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD4))
++ (vec_concat:<VDBL>
++ (const_int 0)
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD4)))) 0))]
++ "TARGET_SIMD && BYTES_BIG_ENDIAN"
+ "ld1\\t{%S0.1d - %V0.1d}, %1"
+ [(set_attr "type" "neon_load1_4reg<q>")]
+ )
+@@ -4934,7 +5152,12 @@
+ rtx mem = gen_rtx_MEM (BLKmode, operands[1]);
+ set_mem_size (mem, <VSTRUCT:nregs> * 8);
+
+- emit_insn (gen_aarch64_ld<VSTRUCT:nregs><VDC:mode>_dreg (operands[0], mem));
++ if (BYTES_BIG_ENDIAN)
++ emit_insn (gen_aarch64_ld<VSTRUCT:nregs><VDC:mode>_dreg_be (operands[0],
++ mem));
++ else
++ emit_insn (gen_aarch64_ld<VSTRUCT:nregs><VDC:mode>_dreg_le (operands[0],
++ mem));
+ DONE;
+ })
+
+@@ -5160,10 +5383,10 @@
+ )
+
+ (define_insn "aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>"
+- [(set (match_operand:VALL 0 "register_operand" "=w")
+- (unspec:VALL [(match_operand:VALL 1 "register_operand" "w")
+- (match_operand:VALL 2 "register_operand" "w")]
+- PERMUTE))]
++ [(set (match_operand:VALL_F16 0 "register_operand" "=w")
++ (unspec:VALL_F16 [(match_operand:VALL_F16 1 "register_operand" "w")
++ (match_operand:VALL_F16 2 "register_operand" "w")]
++ PERMUTE))]
+ "TARGET_SIMD"
+ "<PERMUTE:perm_insn><PERMUTE:perm_hilo>\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
+ [(set_attr "type" "neon_permute<q>")]
+@@ -5171,11 +5394,11 @@
+
+ ;; Note immediate (third) operand is lane index not byte index.
+ (define_insn "aarch64_ext<mode>"
+- [(set (match_operand:VALL 0 "register_operand" "=w")
+- (unspec:VALL [(match_operand:VALL 1 "register_operand" "w")
+- (match_operand:VALL 2 "register_operand" "w")
+- (match_operand:SI 3 "immediate_operand" "i")]
+- UNSPEC_EXT))]
++ [(set (match_operand:VALL_F16 0 "register_operand" "=w")
++ (unspec:VALL_F16 [(match_operand:VALL_F16 1 "register_operand" "w")
++ (match_operand:VALL_F16 2 "register_operand" "w")
++ (match_operand:SI 3 "immediate_operand" "i")]
++ UNSPEC_EXT))]
+ "TARGET_SIMD"
+ {
+ operands[3] = GEN_INT (INTVAL (operands[3])
+@@ -5186,8 +5409,8 @@
+ )
+
+ (define_insn "aarch64_rev<REVERSE:rev_op><mode>"
+- [(set (match_operand:VALL 0 "register_operand" "=w")
+- (unspec:VALL [(match_operand:VALL 1 "register_operand" "w")]
++ [(set (match_operand:VALL_F16 0 "register_operand" "=w")
++ (unspec:VALL_F16 [(match_operand:VALL_F16 1 "register_operand" "w")]
+ REVERSE))]
+ "TARGET_SIMD"
+ "rev<REVERSE:rev_op>\\t%0.<Vtype>, %1.<Vtype>"
+@@ -5354,31 +5577,32 @@
+ )
+
+ (define_insn "aarch64_frecpe<mode>"
+- [(set (match_operand:VDQF 0 "register_operand" "=w")
+- (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")]
+- UNSPEC_FRECPE))]
++ [(set (match_operand:VHSDF 0 "register_operand" "=w")
++ (unspec:VHSDF [(match_operand:VHSDF 1 "register_operand" "w")]
++ UNSPEC_FRECPE))]
+ "TARGET_SIMD"
+ "frecpe\\t%0.<Vtype>, %1.<Vtype>"
+- [(set_attr "type" "neon_fp_recpe_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_recpe_<stype><q>")]
+ )
+
+ (define_insn "aarch64_frecp<FRECP:frecp_suffix><mode>"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (unspec:GPF [(match_operand:GPF 1 "register_operand" "w")]
+- FRECP))]
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (unspec:GPF_F16 [(match_operand:GPF_F16 1 "register_operand" "w")]
++ FRECP))]
+ "TARGET_SIMD"
+ "frecp<FRECP:frecp_suffix>\\t%<s>0, %<s>1"
+- [(set_attr "type" "neon_fp_recp<FRECP:frecp_suffix>_<GPF:Vetype><GPF:q>")]
++ [(set_attr "type" "neon_fp_recp<FRECP:frecp_suffix>_<GPF_F16:stype>")]
+ )
+
+ (define_insn "aarch64_frecps<mode>"
+- [(set (match_operand:VALLF 0 "register_operand" "=w")
+- (unspec:VALLF [(match_operand:VALLF 1 "register_operand" "w")
+- (match_operand:VALLF 2 "register_operand" "w")]
+- UNSPEC_FRECPS))]
++ [(set (match_operand:VHSDF_HSDF 0 "register_operand" "=w")
++ (unspec:VHSDF_HSDF
++ [(match_operand:VHSDF_HSDF 1 "register_operand" "w")
++ (match_operand:VHSDF_HSDF 2 "register_operand" "w")]
++ UNSPEC_FRECPS))]
+ "TARGET_SIMD"
+ "frecps\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
+- [(set_attr "type" "neon_fp_recps_<Vetype><q>")]
++ [(set_attr "type" "neon_fp_recps_<stype><q>")]
+ )
+
+ (define_insn "aarch64_urecpe<mode>"
+@@ -5414,13 +5638,25 @@
+ [(set_attr "type" "crypto_aese")]
+ )
+
++;; When AES/AESMC fusion is enabled we want the register allocation to
++;; look like:
++;; AESE Vn, _
++;; AESMC Vn, Vn
++;; So prefer to tie operand 1 to operand 0 when fusing.
++
+ (define_insn "aarch64_crypto_aes<aesmc_op>v16qi"
+- [(set (match_operand:V16QI 0 "register_operand" "=w")
+- (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "w")]
++ [(set (match_operand:V16QI 0 "register_operand" "=w,w")
++ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "0,w")]
+ CRYPTO_AESMC))]
+ "TARGET_SIMD && TARGET_CRYPTO"
+ "aes<aesmc_op>\\t%0.16b, %1.16b"
+- [(set_attr "type" "crypto_aesmc")]
++ [(set_attr "type" "crypto_aesmc")
++ (set_attr_alternative "enabled"
++ [(if_then_else (match_test
++ "aarch64_fusion_enabled_p (AARCH64_FUSE_AES_AESMC)")
++ (const_string "yes" )
++ (const_string "no"))
++ (const_string "yes")])]
+ )
+
+ ;; sha1
+@@ -5435,6 +5671,26 @@
+ [(set_attr "type" "crypto_sha1_fast")]
+ )
+
++(define_insn "aarch64_crypto_sha1hv4si"
++ [(set (match_operand:SI 0 "register_operand" "=w")
++ (unspec:SI [(vec_select:SI (match_operand:V4SI 1 "register_operand" "w")
++ (parallel [(const_int 0)]))]
++ UNSPEC_SHA1H))]
++ "TARGET_SIMD && TARGET_CRYPTO && !BYTES_BIG_ENDIAN"
++ "sha1h\\t%s0, %s1"
++ [(set_attr "type" "crypto_sha1_fast")]
++)
++
++(define_insn "aarch64_be_crypto_sha1hv4si"
++ [(set (match_operand:SI 0 "register_operand" "=w")
++ (unspec:SI [(vec_select:SI (match_operand:V4SI 1 "register_operand" "w")
++ (parallel [(const_int 3)]))]
++ UNSPEC_SHA1H))]
++ "TARGET_SIMD && TARGET_CRYPTO && BYTES_BIG_ENDIAN"
++ "sha1h\\t%s0, %s1"
++ [(set_attr "type" "crypto_sha1_fast")]
++)
++
+ (define_insn "aarch64_crypto_sha1su1v4si"
+ [(set (match_operand:V4SI 0 "register_operand" "=w")
+ (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "0")
+--- a/src/gcc/config/aarch64/aarch64-tune.md
++++ b/src/gcc/config/aarch64/aarch64-tune.md
+@@ -1,5 +1,5 @@
+ ;; -*- buffer-read-only: t -*-
+ ;; Generated automatically by gentune.sh from aarch64-cores.def
+ (define_attr "tune"
+- "cortexa35,cortexa53,cortexa57,cortexa72,exynosm1,qdf24xx,thunderx,xgene1,cortexa57cortexa53,cortexa72cortexa53"
++ "cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,exynosm1,qdf24xx,thunderx,xgene1,vulcan,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53"
+ (const (symbol_ref "((enum attr_tune) aarch64_tune)")))
+--- a/src/gcc/config/aarch64/aarch64-tuning-flags.def
++++ b/src/gcc/config/aarch64/aarch64-tuning-flags.def
+@@ -29,5 +29,8 @@
+ AARCH64_TUNE_ to give an enum name. */
+
+ AARCH64_EXTRA_TUNING_OPTION ("rename_fma_regs", RENAME_FMA_REGS)
+-AARCH64_EXTRA_TUNING_OPTION ("approx_rsqrt", APPROX_RSQRT)
+
++/* Don't create non-8 byte aligned load/store pair. That is if the
++two load/stores are not at least 8 byte aligned don't create load/store
++pairs. */
++AARCH64_EXTRA_TUNING_OPTION ("slow_unaligned_ldpw", SLOW_UNALIGNED_LDPW)
+--- a/src/gcc/config/aarch64/aarch64.c
++++ b/src/gcc/config/aarch64/aarch64.c
+@@ -26,6 +26,7 @@
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "gimple.h"
+ #include "cfghooks.h"
+ #include "cfgloop.h"
+@@ -61,7 +62,6 @@
+ #include "rtl-iter.h"
+ #include "tm-constrs.h"
+ #include "sched-int.h"
+-#include "cortex-a57-fma-steering.h"
+ #include "target-globals.h"
+ #include "common/common-target.h"
+
+@@ -141,6 +141,10 @@ static bool aarch64_vector_mode_supported_p (machine_mode);
+ static bool aarch64_vectorize_vec_perm_const_ok (machine_mode vmode,
+ const unsigned char *sel);
+ static int aarch64_address_cost (rtx, machine_mode, addr_space_t, bool);
++static bool aarch64_builtin_support_vector_misalignment (machine_mode mode,
++ const_tree type,
++ int misalignment,
++ bool is_packed);
+
+ /* Major revision number of the ARM Architecture implemented by the target. */
+ unsigned aarch64_architecture_version;
+@@ -152,7 +156,7 @@ enum aarch64_processor aarch64_tune = cortexa53;
+ unsigned long aarch64_tune_flags = 0;
+
+ /* Global flag for PC relative loads. */
+-bool aarch64_nopcrelative_literal_loads;
++bool aarch64_pcrelative_literal_loads;
+
+ /* Support for command line parsing of boolean flags in the tuning
+ structures. */
+@@ -250,6 +254,38 @@ static const struct cpu_addrcost_table xgene1_addrcost_table =
+ 0, /* imm_offset */
+ };
+
++static const struct cpu_addrcost_table qdf24xx_addrcost_table =
++{
++ {
++ 1, /* hi */
++ 0, /* si */
++ 0, /* di */
++ 1, /* ti */
++ },
++ 0, /* pre_modify */
++ 0, /* post_modify */
++ 0, /* register_offset */
++ 0, /* register_sextend */
++ 0, /* register_zextend */
++ 0 /* imm_offset */
++};
++
++static const struct cpu_addrcost_table vulcan_addrcost_table =
++{
++ {
++ 0, /* hi */
++ 0, /* si */
++ 0, /* di */
++ 2, /* ti */
++ },
++ 0, /* pre_modify */
++ 0, /* post_modify */
++ 2, /* register_offset */
++ 3, /* register_sextend */
++ 3, /* register_zextend */
++ 0, /* imm_offset */
++};
++
+ static const struct cpu_regmove_cost generic_regmove_cost =
+ {
+ 1, /* GP2GP */
+@@ -308,6 +344,24 @@ static const struct cpu_regmove_cost xgene1_regmove_cost =
+ 2 /* FP2FP */
+ };
+
++static const struct cpu_regmove_cost qdf24xx_regmove_cost =
++{
++ 2, /* GP2GP */
++ /* Avoid the use of int<->fp moves for spilling. */
++ 6, /* GP2FP */
++ 6, /* FP2GP */
++ 4 /* FP2FP */
++};
++
++static const struct cpu_regmove_cost vulcan_regmove_cost =
++{
++ 1, /* GP2GP */
++ /* Avoid the use of int<->fp moves for spilling. */
++ 8, /* GP2FP */
++ 8, /* FP2GP */
++ 4 /* FP2FP */
++};
++
+ /* Generic costs for vector insn classes. */
+ static const struct cpu_vector_cost generic_vector_cost =
+ {
+@@ -326,18 +380,36 @@ static const struct cpu_vector_cost generic_vector_cost =
+ 1 /* cond_not_taken_branch_cost */
+ };
+
++/* ThunderX costs for vector insn classes. */
++static const struct cpu_vector_cost thunderx_vector_cost =
++{
++ 1, /* scalar_stmt_cost */
++ 3, /* scalar_load_cost */
++ 1, /* scalar_store_cost */
++ 4, /* vec_stmt_cost */
++ 4, /* vec_permute_cost */
++ 2, /* vec_to_scalar_cost */
++ 2, /* scalar_to_vec_cost */
++ 3, /* vec_align_load_cost */
++ 10, /* vec_unalign_load_cost */
++ 10, /* vec_unalign_store_cost */
++ 1, /* vec_store_cost */
++ 3, /* cond_taken_branch_cost */
++ 3 /* cond_not_taken_branch_cost */
++};
++
+ /* Generic costs for vector insn classes. */
+ static const struct cpu_vector_cost cortexa57_vector_cost =
+ {
+ 1, /* scalar_stmt_cost */
+ 4, /* scalar_load_cost */
+ 1, /* scalar_store_cost */
+- 3, /* vec_stmt_cost */
++ 2, /* vec_stmt_cost */
+ 3, /* vec_permute_cost */
+ 8, /* vec_to_scalar_cost */
+ 8, /* scalar_to_vec_cost */
+- 5, /* vec_align_load_cost */
+- 5, /* vec_unalign_load_cost */
++ 4, /* vec_align_load_cost */
++ 4, /* vec_unalign_load_cost */
+ 1, /* vec_unalign_store_cost */
+ 1, /* vec_store_cost */
+ 1, /* cond_taken_branch_cost */
+@@ -379,6 +451,24 @@ static const struct cpu_vector_cost xgene1_vector_cost =
+ 1 /* cond_not_taken_branch_cost */
+ };
+
++/* Costs for vector insn classes for Vulcan. */
++static const struct cpu_vector_cost vulcan_vector_cost =
++{
++ 6, /* scalar_stmt_cost */
++ 4, /* scalar_load_cost */
++ 1, /* scalar_store_cost */
++ 6, /* vec_stmt_cost */
++ 3, /* vec_permute_cost */
++ 6, /* vec_to_scalar_cost */
++ 5, /* scalar_to_vec_cost */
++ 8, /* vec_align_load_cost */
++ 8, /* vec_unalign_load_cost */
++ 4, /* vec_unalign_store_cost */
++ 4, /* vec_store_cost */
++ 2, /* cond_taken_branch_cost */
++ 1 /* cond_not_taken_branch_cost */
++};
++
+ /* Generic costs for branch instructions. */
+ static const struct cpu_branch_cost generic_branch_cost =
+ {
+@@ -393,6 +483,37 @@ static const struct cpu_branch_cost cortexa57_branch_cost =
+ 3 /* Unpredictable. */
+ };
+
++/* Branch costs for Vulcan. */
++static const struct cpu_branch_cost vulcan_branch_cost =
++{
++ 1, /* Predictable. */
++ 3 /* Unpredictable. */
++};
++
++/* Generic approximation modes. */
++static const cpu_approx_modes generic_approx_modes =
++{
++ AARCH64_APPROX_NONE, /* division */
++ AARCH64_APPROX_NONE, /* sqrt */
++ AARCH64_APPROX_NONE /* recip_sqrt */
++};
++
++/* Approximation modes for Exynos M1. */
++static const cpu_approx_modes exynosm1_approx_modes =
++{
++ AARCH64_APPROX_NONE, /* division */
++ AARCH64_APPROX_ALL, /* sqrt */
++ AARCH64_APPROX_ALL /* recip_sqrt */
++};
++
++/* Approximation modes for X-Gene 1. */
++static const cpu_approx_modes xgene1_approx_modes =
++{
++ AARCH64_APPROX_NONE, /* division */
++ AARCH64_APPROX_NONE, /* sqrt */
++ AARCH64_APPROX_ALL /* recip_sqrt */
++};
++
+ static const struct tune_params generic_tunings =
+ {
+ &cortexa57_extra_costs,
+@@ -400,6 +521,7 @@ static const struct tune_params generic_tunings =
+ &generic_regmove_cost,
+ &generic_vector_cost,
+ &generic_branch_cost,
++ &generic_approx_modes,
+ 4, /* memmov_cost */
+ 2, /* issue_rate */
+ AARCH64_FUSE_NOTHING, /* fusible_ops */
+@@ -423,14 +545,15 @@ static const struct tune_params cortexa35_tunings =
+ &generic_addrcost_table,
+ &cortexa53_regmove_cost,
+ &generic_vector_cost,
+- &generic_branch_cost,
++ &cortexa57_branch_cost,
++ &generic_approx_modes,
+ 4, /* memmov_cost */
+ 1, /* issue_rate */
+- (AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD
++ (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD
+ | AARCH64_FUSE_MOVK_MOVK | AARCH64_FUSE_ADRP_LDR), /* fusible_ops */
+- 8, /* function_align. */
++ 16, /* function_align. */
+ 8, /* jump_align. */
+- 4, /* loop_align. */
++ 8, /* loop_align. */
+ 2, /* int_reassoc_width. */
+ 4, /* fp_reassoc_width. */
+ 1, /* vec_reassoc_width. */
+@@ -448,14 +571,15 @@ static const struct tune_params cortexa53_tunings =
+ &generic_addrcost_table,
+ &cortexa53_regmove_cost,
+ &generic_vector_cost,
+- &generic_branch_cost,
++ &cortexa57_branch_cost,
++ &generic_approx_modes,
+ 4, /* memmov_cost */
+ 2, /* issue_rate */
+ (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD
+ | AARCH64_FUSE_MOVK_MOVK | AARCH64_FUSE_ADRP_LDR), /* fusible_ops */
+- 8, /* function_align. */
++ 16, /* function_align. */
+ 8, /* jump_align. */
+- 4, /* loop_align. */
++ 8, /* loop_align. */
+ 2, /* int_reassoc_width. */
+ 4, /* fp_reassoc_width. */
+ 1, /* vec_reassoc_width. */
+@@ -474,13 +598,14 @@ static const struct tune_params cortexa57_tunings =
+ &cortexa57_regmove_cost,
+ &cortexa57_vector_cost,
+ &cortexa57_branch_cost,
++ &generic_approx_modes,
+ 4, /* memmov_cost */
+ 3, /* issue_rate */
+ (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD
+ | AARCH64_FUSE_MOVK_MOVK), /* fusible_ops */
+ 16, /* function_align. */
+ 8, /* jump_align. */
+- 4, /* loop_align. */
++ 8, /* loop_align. */
+ 2, /* int_reassoc_width. */
+ 4, /* fp_reassoc_width. */
+ 1, /* vec_reassoc_width. */
+@@ -498,14 +623,15 @@ static const struct tune_params cortexa72_tunings =
+ &cortexa57_addrcost_table,
+ &cortexa57_regmove_cost,
+ &cortexa57_vector_cost,
+- &generic_branch_cost,
++ &cortexa57_branch_cost,
++ &generic_approx_modes,
+ 4, /* memmov_cost */
+ 3, /* issue_rate */
+ (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD
+ | AARCH64_FUSE_MOVK_MOVK), /* fusible_ops */
+ 16, /* function_align. */
+ 8, /* jump_align. */
+- 4, /* loop_align. */
++ 8, /* loop_align. */
+ 2, /* int_reassoc_width. */
+ 4, /* fp_reassoc_width. */
+ 1, /* vec_reassoc_width. */
+@@ -513,7 +639,33 @@ static const struct tune_params cortexa72_tunings =
+ 2, /* min_div_recip_mul_df. */
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+- tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
++ tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */
++ (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
++};
++
++static const struct tune_params cortexa73_tunings =
++{
++ &cortexa57_extra_costs,
++ &cortexa57_addrcost_table,
++ &cortexa57_regmove_cost,
++ &cortexa57_vector_cost,
++ &cortexa57_branch_cost,
++ &generic_approx_modes,
++ 4, /* memmov_cost. */
++ 2, /* issue_rate. */
++ (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD
++ | AARCH64_FUSE_MOVK_MOVK | AARCH64_FUSE_ADRP_LDR), /* fusible_ops */
++ 16, /* function_align. */
++ 8, /* jump_align. */
++ 8, /* loop_align. */
++ 2, /* int_reassoc_width. */
++ 4, /* fp_reassoc_width. */
++ 1, /* vec_reassoc_width. */
++ 2, /* min_div_recip_mul_sf. */
++ 2, /* min_div_recip_mul_df. */
++ 0, /* max_case_values. */
++ 0, /* cache_line_size. */
++ tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */
+ (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
+ };
+
+@@ -524,6 +676,7 @@ static const struct tune_params exynosm1_tunings =
+ &exynosm1_regmove_cost,
+ &exynosm1_vector_cost,
+ &generic_branch_cost,
++ &exynosm1_approx_modes,
+ 4, /* memmov_cost */
+ 3, /* issue_rate */
+ (AARCH64_FUSE_AES_AESMC), /* fusible_ops */
+@@ -538,7 +691,7 @@ static const struct tune_params exynosm1_tunings =
+ 48, /* max_case_values. */
+ 64, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */
+- (AARCH64_EXTRA_TUNE_APPROX_RSQRT) /* tune_flags. */
++ (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
+ };
+
+ static const struct tune_params thunderx_tunings =
+@@ -546,8 +699,9 @@ static const struct tune_params thunderx_tunings =
+ &thunderx_extra_costs,
+ &generic_addrcost_table,
+ &thunderx_regmove_cost,
+- &generic_vector_cost,
++ &thunderx_vector_cost,
+ &generic_branch_cost,
++ &generic_approx_modes,
+ 6, /* memmov_cost */
+ 2, /* issue_rate */
+ AARCH64_FUSE_CMP_BRANCH, /* fusible_ops */
+@@ -562,7 +716,7 @@ static const struct tune_params thunderx_tunings =
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
+- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
++ (AARCH64_EXTRA_TUNE_SLOW_UNALIGNED_LDPW) /* tune_flags. */
+ };
+
+ static const struct tune_params xgene1_tunings =
+@@ -572,6 +726,7 @@ static const struct tune_params xgene1_tunings =
+ &xgene1_regmove_cost,
+ &xgene1_vector_cost,
+ &generic_branch_cost,
++ &xgene1_approx_modes,
+ 6, /* memmov_cost */
+ 4, /* issue_rate */
+ AARCH64_FUSE_NOTHING, /* fusible_ops */
+@@ -586,7 +741,58 @@ static const struct tune_params xgene1_tunings =
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
+- (AARCH64_EXTRA_TUNE_APPROX_RSQRT) /* tune_flags. */
++ (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
++};
++
++static const struct tune_params qdf24xx_tunings =
++{
++ &qdf24xx_extra_costs,
++ &qdf24xx_addrcost_table,
++ &qdf24xx_regmove_cost,
++ &generic_vector_cost,
++ &generic_branch_cost,
++ &generic_approx_modes,
++ 4, /* memmov_cost */
++ 4, /* issue_rate */
++ (AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD
++ | AARCH64_FUSE_MOVK_MOVK), /* fuseable_ops */
++ 16, /* function_align. */
++ 8, /* jump_align. */
++ 16, /* loop_align. */
++ 2, /* int_reassoc_width. */
++ 4, /* fp_reassoc_width. */
++ 1, /* vec_reassoc_width. */
++ 2, /* min_div_recip_mul_sf. */
++ 2, /* min_div_recip_mul_df. */
++ 0, /* max_case_values. */
++ 64, /* cache_line_size. */
++ tune_params::AUTOPREFETCHER_STRONG, /* autoprefetcher_model. */
++ (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
++};
++
++static const struct tune_params vulcan_tunings =
++{
++ &vulcan_extra_costs,
++ &vulcan_addrcost_table,
++ &vulcan_regmove_cost,
++ &vulcan_vector_cost,
++ &vulcan_branch_cost,
++ &generic_approx_modes,
++ 4, /* memmov_cost. */
++ 4, /* issue_rate. */
++ AARCH64_FUSE_NOTHING, /* fuseable_ops. */
++ 16, /* function_align. */
++ 8, /* jump_align. */
++ 16, /* loop_align. */
++ 3, /* int_reassoc_width. */
++ 2, /* fp_reassoc_width. */
++ 2, /* vec_reassoc_width. */
++ 2, /* min_div_recip_mul_sf. */
++ 2, /* min_div_recip_mul_df. */
++ 0, /* max_case_values. */
++ 64, /* cache_line_size. */
++ tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
++ (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
+ };
+
+ /* Support for fine-grained override of the tuning structures. */
+@@ -663,16 +869,6 @@ struct aarch64_option_extension
+ const unsigned long flags_off;
+ };
+
+-/* ISA extensions in AArch64. */
+-static const struct aarch64_option_extension all_extensions[] =
+-{
+-#define AARCH64_OPT_EXTENSION(NAME, X, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \
+- {NAME, FLAGS_ON, FLAGS_OFF},
+-#include "aarch64-option-extensions.def"
+-#undef AARCH64_OPT_EXTENSION
+- {NULL, 0, 0}
+-};
+-
+ typedef enum aarch64_cond_code
+ {
+ AARCH64_EQ = 0, AARCH64_NE, AARCH64_CS, AARCH64_CC, AARCH64_MI, AARCH64_PL,
+@@ -1110,7 +1306,8 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
+ emit_move_insn (gp_rtx, gen_rtx_HIGH (Pmode, s));
+
+ if (mode != GET_MODE (gp_rtx))
+- gp_rtx = simplify_gen_subreg (mode, gp_rtx, GET_MODE (gp_rtx), 0);
++ gp_rtx = gen_lowpart (mode, gp_rtx);
++
+ }
+
+ if (mode == ptr_mode)
+@@ -1186,10 +1383,14 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
+ case SYMBOL_SMALL_TLSGD:
+ {
+ rtx_insn *insns;
+- rtx result = gen_rtx_REG (Pmode, R0_REGNUM);
++ machine_mode mode = GET_MODE (dest);
++ rtx result = gen_rtx_REG (mode, R0_REGNUM);
+
+ start_sequence ();
+- aarch64_emit_call_insn (gen_tlsgd_small (result, imm));
++ if (TARGET_ILP32)
++ aarch64_emit_call_insn (gen_tlsgd_small_si (result, imm));
++ else
++ aarch64_emit_call_insn (gen_tlsgd_small_di (result, imm));
+ insns = get_insns ();
+ end_sequence ();
+
+@@ -1703,7 +1904,7 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm)
+ we need to expand the literal pool access carefully.
+ This is something that needs to be done in a number
+ of places, so could well live as a separate function. */
+- if (aarch64_nopcrelative_literal_loads)
++ if (!aarch64_pcrelative_literal_loads)
+ {
+ gcc_assert (can_create_pseudo_p ());
+ base = gen_reg_rtx (ptr_mode);
+@@ -1766,6 +1967,88 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm)
+ aarch64_internal_mov_immediate (dest, imm, true, GET_MODE (dest));
+ }
+
++/* Add DELTA to REGNUM in mode MODE. SCRATCHREG can be used to hold a
++ temporary value if necessary. FRAME_RELATED_P should be true if
++ the RTX_FRAME_RELATED flag should be set and CFA adjustments added
++ to the generated instructions. If SCRATCHREG is known to hold
++ abs (delta), EMIT_MOVE_IMM can be set to false to avoid emitting the
++ immediate again.
++
++ Since this function may be used to adjust the stack pointer, we must
++ ensure that it cannot cause transient stack deallocation (for example
++ by first incrementing SP and then decrementing when adjusting by a
++ large immediate). */
++
++static void
++aarch64_add_constant_internal (machine_mode mode, int regnum, int scratchreg,
++ HOST_WIDE_INT delta, bool frame_related_p,
++ bool emit_move_imm)
++{
++ HOST_WIDE_INT mdelta = abs_hwi (delta);
++ rtx this_rtx = gen_rtx_REG (mode, regnum);
++ rtx_insn *insn;
++
++ if (!mdelta)
++ return;
++
++ /* Single instruction adjustment. */
++ if (aarch64_uimm12_shift (mdelta))
++ {
++ insn = emit_insn (gen_add2_insn (this_rtx, GEN_INT (delta)));
++ RTX_FRAME_RELATED_P (insn) = frame_related_p;
++ return;
++ }
++
++ /* Emit 2 additions/subtractions if the adjustment is less than 24 bits.
++ Only do this if mdelta is not a 16-bit move as adjusting using a move
++ is better. */
++ if (mdelta < 0x1000000 && !aarch64_move_imm (mdelta, mode))
++ {
++ HOST_WIDE_INT low_off = mdelta & 0xfff;
++
++ low_off = delta < 0 ? -low_off : low_off;
++ insn = emit_insn (gen_add2_insn (this_rtx, GEN_INT (low_off)));
++ RTX_FRAME_RELATED_P (insn) = frame_related_p;
++ insn = emit_insn (gen_add2_insn (this_rtx, GEN_INT (delta - low_off)));
++ RTX_FRAME_RELATED_P (insn) = frame_related_p;
++ return;
++ }
++
++ /* Emit a move immediate if required and an addition/subtraction. */
++ rtx scratch_rtx = gen_rtx_REG (mode, scratchreg);
++ if (emit_move_imm)
++ aarch64_internal_mov_immediate (scratch_rtx, GEN_INT (mdelta), true, mode);
++ insn = emit_insn (delta < 0 ? gen_sub2_insn (this_rtx, scratch_rtx)
++ : gen_add2_insn (this_rtx, scratch_rtx));
++ if (frame_related_p)
++ {
++ RTX_FRAME_RELATED_P (insn) = frame_related_p;
++ rtx adj = plus_constant (mode, this_rtx, delta);
++ add_reg_note (insn , REG_CFA_ADJUST_CFA, gen_rtx_SET (this_rtx, adj));
++ }
++}
++
++static inline void
++aarch64_add_constant (machine_mode mode, int regnum, int scratchreg,
++ HOST_WIDE_INT delta)
++{
++ aarch64_add_constant_internal (mode, regnum, scratchreg, delta, false, true);
++}
++
++static inline void
++aarch64_add_sp (int scratchreg, HOST_WIDE_INT delta, bool emit_move_imm)
++{
++ aarch64_add_constant_internal (Pmode, SP_REGNUM, scratchreg, delta,
++ true, emit_move_imm);
++}
++
++static inline void
++aarch64_sub_sp (int scratchreg, HOST_WIDE_INT delta, bool frame_related_p)
++{
++ aarch64_add_constant_internal (Pmode, SP_REGNUM, scratchreg, -delta,
++ frame_related_p, true);
++}
++
+ static bool
+ aarch64_function_ok_for_sibcall (tree decl ATTRIBUTE_UNUSED,
+ tree exp ATTRIBUTE_UNUSED)
+@@ -2494,7 +2777,7 @@ static void
+ aarch64_layout_frame (void)
+ {
+ HOST_WIDE_INT offset = 0;
+- int regno;
++ int regno, last_fp_reg = INVALID_REGNUM;
+
+ if (reload_completed && cfun->machine->frame.laid_out)
+ return;
+@@ -2502,8 +2785,8 @@ aarch64_layout_frame (void)
+ #define SLOT_NOT_REQUIRED (-2)
+ #define SLOT_REQUIRED (-1)
+
+- cfun->machine->frame.wb_candidate1 = FIRST_PSEUDO_REGISTER;
+- cfun->machine->frame.wb_candidate2 = FIRST_PSEUDO_REGISTER;
++ cfun->machine->frame.wb_candidate1 = INVALID_REGNUM;
++ cfun->machine->frame.wb_candidate2 = INVALID_REGNUM;
+
+ /* First mark all the registers that really need to be saved... */
+ for (regno = R0_REGNUM; regno <= R30_REGNUM; regno++)
+@@ -2528,7 +2811,10 @@ aarch64_layout_frame (void)
+ for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
+ if (df_regs_ever_live_p (regno)
+ && !call_used_regs[regno])
+- cfun->machine->frame.reg_offset[regno] = SLOT_REQUIRED;
++ {
++ cfun->machine->frame.reg_offset[regno] = SLOT_REQUIRED;
++ last_fp_reg = regno;
++ }
+
+ if (frame_pointer_needed)
+ {
+@@ -2537,7 +2823,6 @@ aarch64_layout_frame (void)
+ cfun->machine->frame.wb_candidate1 = R29_REGNUM;
+ cfun->machine->frame.reg_offset[R30_REGNUM] = UNITS_PER_WORD;
+ cfun->machine->frame.wb_candidate2 = R30_REGNUM;
+- cfun->machine->frame.hardfp_offset = 2 * UNITS_PER_WORD;
+ offset += 2 * UNITS_PER_WORD;
+ }
+
+@@ -2546,35 +2831,46 @@ aarch64_layout_frame (void)
+ if (cfun->machine->frame.reg_offset[regno] == SLOT_REQUIRED)
+ {
+ cfun->machine->frame.reg_offset[regno] = offset;
+- if (cfun->machine->frame.wb_candidate1 == FIRST_PSEUDO_REGISTER)
++ if (cfun->machine->frame.wb_candidate1 == INVALID_REGNUM)
+ cfun->machine->frame.wb_candidate1 = regno;
+- else if (cfun->machine->frame.wb_candidate2 == FIRST_PSEUDO_REGISTER)
++ else if (cfun->machine->frame.wb_candidate2 == INVALID_REGNUM)
+ cfun->machine->frame.wb_candidate2 = regno;
+ offset += UNITS_PER_WORD;
+ }
+
++ HOST_WIDE_INT max_int_offset = offset;
++ offset = ROUND_UP (offset, STACK_BOUNDARY / BITS_PER_UNIT);
++ bool has_align_gap = offset != max_int_offset;
++
+ for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
+ if (cfun->machine->frame.reg_offset[regno] == SLOT_REQUIRED)
+ {
++ /* If there is an alignment gap between integer and fp callee-saves,
++ allocate the last fp register to it if possible. */
++ if (regno == last_fp_reg && has_align_gap && (offset & 8) == 0)
++ {
++ cfun->machine->frame.reg_offset[regno] = max_int_offset;
++ break;
++ }
++
+ cfun->machine->frame.reg_offset[regno] = offset;
+- if (cfun->machine->frame.wb_candidate1 == FIRST_PSEUDO_REGISTER)
++ if (cfun->machine->frame.wb_candidate1 == INVALID_REGNUM)
+ cfun->machine->frame.wb_candidate1 = regno;
+- else if (cfun->machine->frame.wb_candidate2 == FIRST_PSEUDO_REGISTER
++ else if (cfun->machine->frame.wb_candidate2 == INVALID_REGNUM
+ && cfun->machine->frame.wb_candidate1 >= V0_REGNUM)
+ cfun->machine->frame.wb_candidate2 = regno;
+ offset += UNITS_PER_WORD;
+ }
+
+- cfun->machine->frame.padding0 =
+- (ROUND_UP (offset, STACK_BOUNDARY / BITS_PER_UNIT) - offset);
+ offset = ROUND_UP (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+
+ cfun->machine->frame.saved_regs_size = offset;
+
++ HOST_WIDE_INT varargs_and_saved_regs_size
++ = offset + cfun->machine->frame.saved_varargs_size;
++
+ cfun->machine->frame.hard_fp_offset
+- = ROUND_UP (cfun->machine->frame.saved_varargs_size
+- + get_frame_size ()
+- + cfun->machine->frame.saved_regs_size,
++ = ROUND_UP (varargs_and_saved_regs_size + get_frame_size (),
+ STACK_BOUNDARY / BITS_PER_UNIT);
+
+ cfun->machine->frame.frame_size
+@@ -2582,15 +2878,92 @@ aarch64_layout_frame (void)
+ + crtl->outgoing_args_size,
+ STACK_BOUNDARY / BITS_PER_UNIT);
+
++ cfun->machine->frame.locals_offset = cfun->machine->frame.saved_varargs_size;
++
++ cfun->machine->frame.initial_adjust = 0;
++ cfun->machine->frame.final_adjust = 0;
++ cfun->machine->frame.callee_adjust = 0;
++ cfun->machine->frame.callee_offset = 0;
++
++ HOST_WIDE_INT max_push_offset = 0;
++ if (cfun->machine->frame.wb_candidate2 != INVALID_REGNUM)
++ max_push_offset = 512;
++ else if (cfun->machine->frame.wb_candidate1 != INVALID_REGNUM)
++ max_push_offset = 256;
++
++ if (cfun->machine->frame.frame_size < max_push_offset
++ && crtl->outgoing_args_size == 0)
++ {
++ /* Simple, small frame with no outgoing arguments:
++ stp reg1, reg2, [sp, -frame_size]!
++ stp reg3, reg4, [sp, 16] */
++ cfun->machine->frame.callee_adjust = cfun->machine->frame.frame_size;
++ }
++ else if ((crtl->outgoing_args_size
++ + cfun->machine->frame.saved_regs_size < 512)
++ && !(cfun->calls_alloca
++ && cfun->machine->frame.hard_fp_offset < max_push_offset))
++ {
++ /* Frame with small outgoing arguments:
++ sub sp, sp, frame_size
++ stp reg1, reg2, [sp, outgoing_args_size]
++ stp reg3, reg4, [sp, outgoing_args_size + 16] */
++ cfun->machine->frame.initial_adjust = cfun->machine->frame.frame_size;
++ cfun->machine->frame.callee_offset
++ = cfun->machine->frame.frame_size - cfun->machine->frame.hard_fp_offset;
++ }
++ else if (cfun->machine->frame.hard_fp_offset < max_push_offset)
++ {
++ /* Frame with large outgoing arguments but a small local area:
++ stp reg1, reg2, [sp, -hard_fp_offset]!
++ stp reg3, reg4, [sp, 16]
++ sub sp, sp, outgoing_args_size */
++ cfun->machine->frame.callee_adjust = cfun->machine->frame.hard_fp_offset;
++ cfun->machine->frame.final_adjust
++ = cfun->machine->frame.frame_size - cfun->machine->frame.callee_adjust;
++ }
++ else if (!frame_pointer_needed
++ && varargs_and_saved_regs_size < max_push_offset)
++ {
++ /* Frame with large local area and outgoing arguments (this pushes the
++ callee-saves first, followed by the locals and outgoing area):
++ stp reg1, reg2, [sp, -varargs_and_saved_regs_size]!
++ stp reg3, reg4, [sp, 16]
++ sub sp, sp, frame_size - varargs_and_saved_regs_size */
++ cfun->machine->frame.callee_adjust = varargs_and_saved_regs_size;
++ cfun->machine->frame.final_adjust
++ = cfun->machine->frame.frame_size - cfun->machine->frame.callee_adjust;
++ cfun->machine->frame.hard_fp_offset = cfun->machine->frame.callee_adjust;
++ cfun->machine->frame.locals_offset = cfun->machine->frame.hard_fp_offset;
++ }
++ else
++ {
++ /* Frame with large local area and outgoing arguments using frame pointer:
++ sub sp, sp, hard_fp_offset
++ stp x29, x30, [sp, 0]
++ add x29, sp, 0
++ stp reg3, reg4, [sp, 16]
++ sub sp, sp, outgoing_args_size */
++ cfun->machine->frame.initial_adjust = cfun->machine->frame.hard_fp_offset;
++ cfun->machine->frame.final_adjust
++ = cfun->machine->frame.frame_size - cfun->machine->frame.initial_adjust;
++ }
++
+ cfun->machine->frame.laid_out = true;
+ }
+
++/* Return true if the register REGNO is saved on entry to
++ the current function. */
++
+ static bool
+ aarch64_register_saved_on_entry (int regno)
+ {
+ return cfun->machine->frame.reg_offset[regno] >= 0;
+ }
+
++/* Return the next register up from REGNO up to LIMIT for the callee
++ to save. */
++
+ static unsigned
+ aarch64_next_callee_save (unsigned regno, unsigned limit)
+ {
+@@ -2599,6 +2972,9 @@ aarch64_next_callee_save (unsigned regno, unsigned limit)
+ return regno;
+ }
+
++/* Push the register number REGNO of mode MODE to the stack with write-back
++ adjusting the stack by ADJUSTMENT. */
++
+ static void
+ aarch64_pushwb_single_reg (machine_mode mode, unsigned regno,
+ HOST_WIDE_INT adjustment)
+@@ -2615,6 +2991,10 @@ aarch64_pushwb_single_reg (machine_mode mode, unsigned regno,
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
++/* Generate and return an instruction to store the pair of registers
++ REG and REG2 of mode MODE to location BASE with write-back adjusting
++ the stack location BASE by ADJUSTMENT. */
++
+ static rtx
+ aarch64_gen_storewb_pair (machine_mode mode, rtx base, rtx reg, rtx reg2,
+ HOST_WIDE_INT adjustment)
+@@ -2634,11 +3014,18 @@ aarch64_gen_storewb_pair (machine_mode mode, rtx base, rtx reg, rtx reg2,
+ }
+ }
+
++/* Push registers numbered REGNO1 and REGNO2 to the stack, adjusting the
++ stack pointer by ADJUSTMENT. */
++
+ static void
+-aarch64_pushwb_pair_reg (machine_mode mode, unsigned regno1,
+- unsigned regno2, HOST_WIDE_INT adjustment)
++aarch64_push_regs (unsigned regno1, unsigned regno2, HOST_WIDE_INT adjustment)
+ {
+ rtx_insn *insn;
++ machine_mode mode = (regno1 <= R30_REGNUM) ? DImode : DFmode;
++
++ if (regno2 == INVALID_REGNUM)
++ return aarch64_pushwb_single_reg (mode, regno1, adjustment);
++
+ rtx reg1 = gen_rtx_REG (mode, regno1);
+ rtx reg2 = gen_rtx_REG (mode, regno2);
+
+@@ -2649,6 +3036,9 @@ aarch64_pushwb_pair_reg (machine_mode mode, unsigned regno1,
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
++/* Load the pair of register REG, REG2 of mode MODE from stack location BASE,
++ adjusting it by ADJUSTMENT afterwards. */
++
+ static rtx
+ aarch64_gen_loadwb_pair (machine_mode mode, rtx base, rtx reg, rtx reg2,
+ HOST_WIDE_INT adjustment)
+@@ -2666,6 +3056,37 @@ aarch64_gen_loadwb_pair (machine_mode mode, rtx base, rtx reg, rtx reg2,
+ }
+ }
+
++/* Pop the two registers numbered REGNO1, REGNO2 from the stack, adjusting it
++ afterwards by ADJUSTMENT and writing the appropriate REG_CFA_RESTORE notes
++ into CFI_OPS. */
++
++static void
++aarch64_pop_regs (unsigned regno1, unsigned regno2, HOST_WIDE_INT adjustment,
++ rtx *cfi_ops)
++{
++ machine_mode mode = (regno1 <= R30_REGNUM) ? DImode : DFmode;
++ rtx reg1 = gen_rtx_REG (mode, regno1);
++
++ *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg1, *cfi_ops);
++
++ if (regno2 == INVALID_REGNUM)
++ {
++ rtx mem = plus_constant (Pmode, stack_pointer_rtx, adjustment);
++ mem = gen_rtx_POST_MODIFY (Pmode, stack_pointer_rtx, mem);
++ emit_move_insn (reg1, gen_rtx_MEM (mode, mem));
++ }
++ else
++ {
++ rtx reg2 = gen_rtx_REG (mode, regno2);
++ *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg2, *cfi_ops);
++ emit_insn (aarch64_gen_loadwb_pair (mode, stack_pointer_rtx, reg1,
++ reg2, adjustment));
++ }
++}
++
++/* Generate and return a store pair instruction of mode MODE to store
++ register REG1 to MEM1 and register REG2 to MEM2. */
++
+ static rtx
+ aarch64_gen_store_pair (machine_mode mode, rtx mem1, rtx reg1, rtx mem2,
+ rtx reg2)
+@@ -2683,6 +3104,9 @@ aarch64_gen_store_pair (machine_mode mode, rtx mem1, rtx reg1, rtx mem2,
+ }
+ }
+
++/* Generate and regurn a load pair isntruction of mode MODE to load register
++ REG1 from MEM1 and register REG2 from MEM2. */
++
+ static rtx
+ aarch64_gen_load_pair (machine_mode mode, rtx reg1, rtx mem1, rtx reg2,
+ rtx mem2)
+@@ -2700,6 +3124,9 @@ aarch64_gen_load_pair (machine_mode mode, rtx reg1, rtx mem1, rtx reg2,
+ }
+ }
+
++/* Emit code to save the callee-saved registers from register number START
++ to LIMIT to the stack at the location starting at offset START_OFFSET,
++ skipping any write-back candidates if SKIP_WB is true. */
+
+ static void
+ aarch64_save_callee_saves (machine_mode mode, HOST_WIDE_INT start_offset,
+@@ -2758,6 +3185,11 @@ aarch64_save_callee_saves (machine_mode mode, HOST_WIDE_INT start_offset,
+ }
+ }
+
++/* Emit code to restore the callee registers of mode MODE from register
++ number START up to and including LIMIT. Restore from the stack offset
++ START_OFFSET, skipping any write-back candidates if SKIP_WB is true.
++ Write the appropriate REG_CFA_RESTORE notes into CFI_OPS. */
++
+ static void
+ aarch64_restore_callee_saves (machine_mode mode,
+ HOST_WIDE_INT start_offset, unsigned start,
+@@ -2852,23 +3284,16 @@ aarch64_restore_callee_saves (machine_mode mode,
+ void
+ aarch64_expand_prologue (void)
+ {
+- /* sub sp, sp, #<frame_size>
+- stp {fp, lr}, [sp, #<frame_size> - 16]
+- add fp, sp, #<frame_size> - hardfp_offset
+- stp {cs_reg}, [fp, #-16] etc.
+-
+- sub sp, sp, <final_adjustment_if_any>
+- */
+- HOST_WIDE_INT frame_size, offset;
+- HOST_WIDE_INT fp_offset; /* Offset from hard FP to SP. */
+- HOST_WIDE_INT hard_fp_offset;
+- rtx_insn *insn;
+-
+ aarch64_layout_frame ();
+
+- offset = frame_size = cfun->machine->frame.frame_size;
+- hard_fp_offset = cfun->machine->frame.hard_fp_offset;
+- fp_offset = frame_size - hard_fp_offset;
++ HOST_WIDE_INT frame_size = cfun->machine->frame.frame_size;
++ HOST_WIDE_INT initial_adjust = cfun->machine->frame.initial_adjust;
++ HOST_WIDE_INT callee_adjust = cfun->machine->frame.callee_adjust;
++ HOST_WIDE_INT final_adjust = cfun->machine->frame.final_adjust;
++ HOST_WIDE_INT callee_offset = cfun->machine->frame.callee_offset;
++ unsigned reg1 = cfun->machine->frame.wb_candidate1;
++ unsigned reg2 = cfun->machine->frame.wb_candidate2;
++ rtx_insn *insn;
+
+ if (flag_stack_usage_info)
+ current_function_static_stack_size = frame_size;
+@@ -2885,129 +3310,28 @@ aarch64_expand_prologue (void)
+ aarch64_emit_probe_stack_range (STACK_CHECK_PROTECT, frame_size);
+ }
+
+- /* Store pairs and load pairs have a range only -512 to 504. */
+- if (offset >= 512)
+- {
+- /* When the frame has a large size, an initial decrease is done on
+- the stack pointer to jump over the callee-allocated save area for
+- register varargs, the local variable area and/or the callee-saved
+- register area. This will allow the pre-index write-back
+- store pair instructions to be used for setting up the stack frame
+- efficiently. */
+- offset = hard_fp_offset;
+- if (offset >= 512)
+- offset = cfun->machine->frame.saved_regs_size;
++ aarch64_sub_sp (IP0_REGNUM, initial_adjust, true);
+
+- frame_size -= (offset + crtl->outgoing_args_size);
+- fp_offset = 0;
++ if (callee_adjust != 0)
++ aarch64_push_regs (reg1, reg2, callee_adjust);
+
+- if (frame_size >= 0x1000000)
+- {
+- rtx op0 = gen_rtx_REG (Pmode, IP0_REGNUM);
+- emit_move_insn (op0, GEN_INT (-frame_size));
+- insn = emit_insn (gen_add2_insn (stack_pointer_rtx, op0));
+-
+- add_reg_note (insn, REG_CFA_ADJUST_CFA,
+- gen_rtx_SET (stack_pointer_rtx,
+- plus_constant (Pmode, stack_pointer_rtx,
+- -frame_size)));
+- RTX_FRAME_RELATED_P (insn) = 1;
+- }
+- else if (frame_size > 0)
+- {
+- int hi_ofs = frame_size & 0xfff000;
+- int lo_ofs = frame_size & 0x000fff;
+-
+- if (hi_ofs)
+- {
+- insn = emit_insn (gen_add2_insn
+- (stack_pointer_rtx, GEN_INT (-hi_ofs)));
+- RTX_FRAME_RELATED_P (insn) = 1;
+- }
+- if (lo_ofs)
+- {
+- insn = emit_insn (gen_add2_insn
+- (stack_pointer_rtx, GEN_INT (-lo_ofs)));
+- RTX_FRAME_RELATED_P (insn) = 1;
+- }
+- }
+- }
+- else
+- frame_size = -1;
+-
+- if (offset > 0)
++ if (frame_pointer_needed)
+ {
+- bool skip_wb = false;
+-
+- if (frame_pointer_needed)
+- {
+- skip_wb = true;
+-
+- if (fp_offset)
+- {
+- insn = emit_insn (gen_add2_insn (stack_pointer_rtx,
+- GEN_INT (-offset)));
+- RTX_FRAME_RELATED_P (insn) = 1;
+-
+- aarch64_save_callee_saves (DImode, fp_offset, R29_REGNUM,
+- R30_REGNUM, false);
+- }
+- else
+- aarch64_pushwb_pair_reg (DImode, R29_REGNUM, R30_REGNUM, offset);
+-
+- /* Set up frame pointer to point to the location of the
+- previous frame pointer on the stack. */
+- insn = emit_insn (gen_add3_insn (hard_frame_pointer_rtx,
+- stack_pointer_rtx,
+- GEN_INT (fp_offset)));
+- RTX_FRAME_RELATED_P (insn) = 1;
+- emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx));
+- }
+- else
+- {
+- unsigned reg1 = cfun->machine->frame.wb_candidate1;
+- unsigned reg2 = cfun->machine->frame.wb_candidate2;
+-
+- if (fp_offset
+- || reg1 == FIRST_PSEUDO_REGISTER
+- || (reg2 == FIRST_PSEUDO_REGISTER
+- && offset >= 256))
+- {
+- insn = emit_insn (gen_add2_insn (stack_pointer_rtx,
+- GEN_INT (-offset)));
+- RTX_FRAME_RELATED_P (insn) = 1;
+- }
+- else
+- {
+- machine_mode mode1 = (reg1 <= R30_REGNUM) ? DImode : DFmode;
+-
+- skip_wb = true;
+-
+- if (reg2 == FIRST_PSEUDO_REGISTER)
+- aarch64_pushwb_single_reg (mode1, reg1, offset);
+- else
+- aarch64_pushwb_pair_reg (mode1, reg1, reg2, offset);
+- }
+- }
+-
+- aarch64_save_callee_saves (DImode, fp_offset, R0_REGNUM, R30_REGNUM,
+- skip_wb);
+- aarch64_save_callee_saves (DFmode, fp_offset, V0_REGNUM, V31_REGNUM,
+- skip_wb);
++ if (callee_adjust == 0)
++ aarch64_save_callee_saves (DImode, callee_offset, R29_REGNUM,
++ R30_REGNUM, false);
++ insn = emit_insn (gen_add3_insn (hard_frame_pointer_rtx,
++ stack_pointer_rtx,
++ GEN_INT (callee_offset)));
++ RTX_FRAME_RELATED_P (insn) = 1;
++ emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx));
+ }
+
+- /* when offset >= 512,
+- sub sp, sp, #<outgoing_args_size> */
+- if (frame_size > -1)
+- {
+- if (crtl->outgoing_args_size > 0)
+- {
+- insn = emit_insn (gen_add2_insn
+- (stack_pointer_rtx,
+- GEN_INT (- crtl->outgoing_args_size)));
+- RTX_FRAME_RELATED_P (insn) = 1;
+- }
+- }
++ aarch64_save_callee_saves (DImode, callee_offset, R0_REGNUM, R30_REGNUM,
++ callee_adjust != 0 || frame_pointer_needed);
++ aarch64_save_callee_saves (DFmode, callee_offset, V0_REGNUM, V31_REGNUM,
++ callee_adjust != 0 || frame_pointer_needed);
++ aarch64_sub_sp (IP1_REGNUM, final_adjust, !frame_pointer_needed);
+ }
+
+ /* Return TRUE if we can use a simple_return insn.
+@@ -3030,151 +3354,80 @@ aarch64_use_return_insn_p (void)
+ return cfun->machine->frame.frame_size == 0;
+ }
+
+-/* Generate the epilogue instructions for returning from a function. */
++/* Generate the epilogue instructions for returning from a function.
++ This is almost exactly the reverse of the prolog sequence, except
++ that we need to insert barriers to avoid scheduling loads that read
++ from a deallocated stack, and we optimize the unwind records by
++ emitting them all together if possible. */
+ void
+ aarch64_expand_epilogue (bool for_sibcall)
+ {
+- HOST_WIDE_INT frame_size, offset;
+- HOST_WIDE_INT fp_offset;
+- HOST_WIDE_INT hard_fp_offset;
+- rtx_insn *insn;
+- /* We need to add memory barrier to prevent read from deallocated stack. */
+- bool need_barrier_p = (get_frame_size () != 0
+- || cfun->machine->frame.saved_varargs_size
+- || crtl->calls_eh_return);
+-
+ aarch64_layout_frame ();
+
+- offset = frame_size = cfun->machine->frame.frame_size;
+- hard_fp_offset = cfun->machine->frame.hard_fp_offset;
+- fp_offset = frame_size - hard_fp_offset;
++ HOST_WIDE_INT initial_adjust = cfun->machine->frame.initial_adjust;
++ HOST_WIDE_INT callee_adjust = cfun->machine->frame.callee_adjust;
++ HOST_WIDE_INT final_adjust = cfun->machine->frame.final_adjust;
++ HOST_WIDE_INT callee_offset = cfun->machine->frame.callee_offset;
++ unsigned reg1 = cfun->machine->frame.wb_candidate1;
++ unsigned reg2 = cfun->machine->frame.wb_candidate2;
++ rtx cfi_ops = NULL;
++ rtx_insn *insn;
+
+- /* Store pairs and load pairs have a range only -512 to 504. */
+- if (offset >= 512)
+- {
+- offset = hard_fp_offset;
+- if (offset >= 512)
+- offset = cfun->machine->frame.saved_regs_size;
++ /* We need to add memory barrier to prevent read from deallocated stack. */
++ bool need_barrier_p = (get_frame_size ()
++ + cfun->machine->frame.saved_varargs_size) != 0;
+
+- frame_size -= (offset + crtl->outgoing_args_size);
+- fp_offset = 0;
+- if (!frame_pointer_needed && crtl->outgoing_args_size > 0)
+- {
+- insn = emit_insn (gen_add2_insn
+- (stack_pointer_rtx,
+- GEN_INT (crtl->outgoing_args_size)));
+- RTX_FRAME_RELATED_P (insn) = 1;
+- }
++ /* Emit a barrier to prevent loads from a deallocated stack. */
++ if (final_adjust > crtl->outgoing_args_size || cfun->calls_alloca
++ || crtl->calls_eh_return)
++ {
++ emit_insn (gen_stack_tie (stack_pointer_rtx, stack_pointer_rtx));
++ need_barrier_p = false;
+ }
+- else
+- frame_size = -1;
+
+- /* If there were outgoing arguments or we've done dynamic stack
+- allocation, then restore the stack pointer from the frame
+- pointer. This is at most one insn and more efficient than using
+- GCC's internal mechanism. */
+- if (frame_pointer_needed
+- && (crtl->outgoing_args_size || cfun->calls_alloca))
++ /* Restore the stack pointer from the frame pointer if it may not
++ be the same as the stack pointer. */
++ if (frame_pointer_needed && (final_adjust || cfun->calls_alloca))
+ {
+- if (cfun->calls_alloca)
+- emit_insn (gen_stack_tie (stack_pointer_rtx, stack_pointer_rtx));
+-
+ insn = emit_insn (gen_add3_insn (stack_pointer_rtx,
+ hard_frame_pointer_rtx,
+- GEN_INT (0)));
+- offset = offset - fp_offset;
+- }
+-
+- if (offset > 0)
+- {
+- unsigned reg1 = cfun->machine->frame.wb_candidate1;
+- unsigned reg2 = cfun->machine->frame.wb_candidate2;
+- bool skip_wb = true;
+- rtx cfi_ops = NULL;
+-
+- if (frame_pointer_needed)
+- fp_offset = 0;
+- else if (fp_offset
+- || reg1 == FIRST_PSEUDO_REGISTER
+- || (reg2 == FIRST_PSEUDO_REGISTER
+- && offset >= 256))
+- skip_wb = false;
+-
+- aarch64_restore_callee_saves (DImode, fp_offset, R0_REGNUM, R30_REGNUM,
+- skip_wb, &cfi_ops);
+- aarch64_restore_callee_saves (DFmode, fp_offset, V0_REGNUM, V31_REGNUM,
+- skip_wb, &cfi_ops);
+-
+- if (need_barrier_p)
+- emit_insn (gen_stack_tie (stack_pointer_rtx, stack_pointer_rtx));
+-
+- if (skip_wb)
+- {
+- machine_mode mode1 = (reg1 <= R30_REGNUM) ? DImode : DFmode;
+- rtx rreg1 = gen_rtx_REG (mode1, reg1);
+-
+- cfi_ops = alloc_reg_note (REG_CFA_RESTORE, rreg1, cfi_ops);
+- if (reg2 == FIRST_PSEUDO_REGISTER)
+- {
+- rtx mem = plus_constant (Pmode, stack_pointer_rtx, offset);
+- mem = gen_rtx_POST_MODIFY (Pmode, stack_pointer_rtx, mem);
+- mem = gen_rtx_MEM (mode1, mem);
+- insn = emit_move_insn (rreg1, mem);
+- }
+- else
+- {
+- rtx rreg2 = gen_rtx_REG (mode1, reg2);
+-
+- cfi_ops = alloc_reg_note (REG_CFA_RESTORE, rreg2, cfi_ops);
+- insn = emit_insn (aarch64_gen_loadwb_pair
+- (mode1, stack_pointer_rtx, rreg1,
+- rreg2, offset));
+- }
+- }
+- else
+- {
+- insn = emit_insn (gen_add2_insn (stack_pointer_rtx,
+- GEN_INT (offset)));
+- }
+-
+- /* Reset the CFA to be SP + FRAME_SIZE. */
+- rtx new_cfa = stack_pointer_rtx;
+- if (frame_size > 0)
+- new_cfa = plus_constant (Pmode, new_cfa, frame_size);
+- cfi_ops = alloc_reg_note (REG_CFA_DEF_CFA, new_cfa, cfi_ops);
+- REG_NOTES (insn) = cfi_ops;
+- RTX_FRAME_RELATED_P (insn) = 1;
++ GEN_INT (-callee_offset)));
++ /* If writeback is used when restoring callee-saves, the CFA
++ is restored on the instruction doing the writeback. */
++ RTX_FRAME_RELATED_P (insn) = callee_adjust == 0;
+ }
++ else
++ aarch64_add_sp (IP1_REGNUM, final_adjust, df_regs_ever_live_p (IP1_REGNUM));
+
+- if (frame_size > 0)
+- {
+- if (need_barrier_p)
+- emit_insn (gen_stack_tie (stack_pointer_rtx, stack_pointer_rtx));
++ aarch64_restore_callee_saves (DImode, callee_offset, R0_REGNUM, R30_REGNUM,
++ callee_adjust != 0, &cfi_ops);
++ aarch64_restore_callee_saves (DFmode, callee_offset, V0_REGNUM, V31_REGNUM,
++ callee_adjust != 0, &cfi_ops);
+
+- if (frame_size >= 0x1000000)
+- {
+- rtx op0 = gen_rtx_REG (Pmode, IP0_REGNUM);
+- emit_move_insn (op0, GEN_INT (frame_size));
+- insn = emit_insn (gen_add2_insn (stack_pointer_rtx, op0));
+- }
+- else
+- {
+- int hi_ofs = frame_size & 0xfff000;
+- int lo_ofs = frame_size & 0x000fff;
++ if (need_barrier_p)
++ emit_insn (gen_stack_tie (stack_pointer_rtx, stack_pointer_rtx));
+
+- if (hi_ofs && lo_ofs)
+- {
+- insn = emit_insn (gen_add2_insn
+- (stack_pointer_rtx, GEN_INT (hi_ofs)));
+- RTX_FRAME_RELATED_P (insn) = 1;
+- frame_size = lo_ofs;
+- }
+- insn = emit_insn (gen_add2_insn
+- (stack_pointer_rtx, GEN_INT (frame_size)));
+- }
++ if (callee_adjust != 0)
++ aarch64_pop_regs (reg1, reg2, callee_adjust, &cfi_ops);
++
++ if (callee_adjust != 0 || initial_adjust > 65536)
++ {
++ /* Emit delayed restores and set the CFA to be SP + initial_adjust. */
++ insn = get_last_insn ();
++ rtx new_cfa = plus_constant (Pmode, stack_pointer_rtx, initial_adjust);
++ REG_NOTES (insn) = alloc_reg_note (REG_CFA_DEF_CFA, new_cfa, cfi_ops);
++ RTX_FRAME_RELATED_P (insn) = 1;
++ cfi_ops = NULL;
++ }
++
++ aarch64_add_sp (IP0_REGNUM, initial_adjust, df_regs_ever_live_p (IP0_REGNUM));
+
+- /* Reset the CFA to be SP + 0. */
+- add_reg_note (insn, REG_CFA_DEF_CFA, stack_pointer_rtx);
++ if (cfi_ops)
++ {
++ /* Emit delayed restores and reset the CFA to be SP. */
++ insn = get_last_insn ();
++ cfi_ops = alloc_reg_note (REG_CFA_DEF_CFA, stack_pointer_rtx, cfi_ops);
++ REG_NOTES (insn) = cfi_ops;
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
+@@ -3230,122 +3483,6 @@ aarch64_eh_return_handler_rtx (void)
+ return tmp;
+ }
+
+-/* Possibly output code to build up a constant in a register. For
+- the benefit of the costs infrastructure, returns the number of
+- instructions which would be emitted. GENERATE inhibits or
+- enables code generation. */
+-
+-static int
+-aarch64_build_constant (int regnum, HOST_WIDE_INT val, bool generate)
+-{
+- int insns = 0;
+-
+- if (aarch64_bitmask_imm (val, DImode))
+- {
+- if (generate)
+- emit_move_insn (gen_rtx_REG (Pmode, regnum), GEN_INT (val));
+- insns = 1;
+- }
+- else
+- {
+- int i;
+- int ncount = 0;
+- int zcount = 0;
+- HOST_WIDE_INT valp = val >> 16;
+- HOST_WIDE_INT valm;
+- HOST_WIDE_INT tval;
+-
+- for (i = 16; i < 64; i += 16)
+- {
+- valm = (valp & 0xffff);
+-
+- if (valm != 0)
+- ++ zcount;
+-
+- if (valm != 0xffff)
+- ++ ncount;
+-
+- valp >>= 16;
+- }
+-
+- /* zcount contains the number of additional MOVK instructions
+- required if the constant is built up with an initial MOVZ instruction,
+- while ncount is the number of MOVK instructions required if starting
+- with a MOVN instruction. Choose the sequence that yields the fewest
+- number of instructions, preferring MOVZ instructions when they are both
+- the same. */
+- if (ncount < zcount)
+- {
+- if (generate)
+- emit_move_insn (gen_rtx_REG (Pmode, regnum),
+- GEN_INT (val | ~(HOST_WIDE_INT) 0xffff));
+- tval = 0xffff;
+- insns++;
+- }
+- else
+- {
+- if (generate)
+- emit_move_insn (gen_rtx_REG (Pmode, regnum),
+- GEN_INT (val & 0xffff));
+- tval = 0;
+- insns++;
+- }
+-
+- val >>= 16;
+-
+- for (i = 16; i < 64; i += 16)
+- {
+- if ((val & 0xffff) != tval)
+- {
+- if (generate)
+- emit_insn (gen_insv_immdi (gen_rtx_REG (Pmode, regnum),
+- GEN_INT (i),
+- GEN_INT (val & 0xffff)));
+- insns++;
+- }
+- val >>= 16;
+- }
+- }
+- return insns;
+-}
+-
+-static void
+-aarch64_add_constant (int regnum, int scratchreg, HOST_WIDE_INT delta)
+-{
+- HOST_WIDE_INT mdelta = delta;
+- rtx this_rtx = gen_rtx_REG (Pmode, regnum);
+- rtx scratch_rtx = gen_rtx_REG (Pmode, scratchreg);
+-
+- if (mdelta < 0)
+- mdelta = -mdelta;
+-
+- if (mdelta >= 4096 * 4096)
+- {
+- (void) aarch64_build_constant (scratchreg, delta, true);
+- emit_insn (gen_add3_insn (this_rtx, this_rtx, scratch_rtx));
+- }
+- else if (mdelta > 0)
+- {
+- if (mdelta >= 4096)
+- {
+- emit_insn (gen_rtx_SET (scratch_rtx, GEN_INT (mdelta / 4096)));
+- rtx shift = gen_rtx_ASHIFT (Pmode, scratch_rtx, GEN_INT (12));
+- if (delta < 0)
+- emit_insn (gen_rtx_SET (this_rtx,
+- gen_rtx_MINUS (Pmode, this_rtx, shift)));
+- else
+- emit_insn (gen_rtx_SET (this_rtx,
+- gen_rtx_PLUS (Pmode, this_rtx, shift)));
+- }
+- if (mdelta % 4096 != 0)
+- {
+- scratch_rtx = GEN_INT ((delta < 0 ? -1 : 1) * (mdelta % 4096));
+- emit_insn (gen_rtx_SET (this_rtx,
+- gen_rtx_PLUS (Pmode, this_rtx, scratch_rtx)));
+- }
+- }
+-}
+-
+ /* Output code to add DELTA to the first argument, and then jump
+ to FUNCTION. Used for C++ multiple inheritance. */
+ static void
+@@ -3366,7 +3503,7 @@ aarch64_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
+ emit_note (NOTE_INSN_PROLOGUE_END);
+
+ if (vcall_offset == 0)
+- aarch64_add_constant (this_regno, IP1_REGNUM, delta);
++ aarch64_add_constant (Pmode, this_regno, IP1_REGNUM, delta);
+ else
+ {
+ gcc_assert ((vcall_offset & (POINTER_BYTES - 1)) == 0);
+@@ -3382,7 +3519,7 @@ aarch64_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
+ addr = gen_rtx_PRE_MODIFY (Pmode, this_rtx,
+ plus_constant (Pmode, this_rtx, delta));
+ else
+- aarch64_add_constant (this_regno, IP1_REGNUM, delta);
++ aarch64_add_constant (Pmode, this_regno, IP1_REGNUM, delta);
+ }
+
+ if (Pmode == ptr_mode)
+@@ -3396,7 +3533,8 @@ aarch64_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
+ addr = plus_constant (Pmode, temp0, vcall_offset);
+ else
+ {
+- (void) aarch64_build_constant (IP1_REGNUM, vcall_offset, true);
++ aarch64_internal_mov_immediate (temp1, GEN_INT (vcall_offset), true,
++ Pmode);
+ addr = gen_rtx_PLUS (Pmode, temp0, temp1);
+ }
+
+@@ -3575,7 +3713,12 @@ aarch64_cannot_force_const_mem (machine_mode mode ATTRIBUTE_UNUSED, rtx x)
+ return aarch64_tls_referenced_p (x);
+ }
+
+-/* Implement TARGET_CASE_VALUES_THRESHOLD. */
++/* Implement TARGET_CASE_VALUES_THRESHOLD.
++ The expansion for a table switch is quite expensive due to the number
++ of instructions, the table lookup and hard to predict indirect jump.
++ When optimizing for speed, and -O3 enabled, use the per-core tuning if
++ set, otherwise use tables for > 16 cases as a tradeoff between size and
++ performance. When optimizing for size, use the default setting. */
+
+ static unsigned int
+ aarch64_case_values_threshold (void)
+@@ -3586,7 +3729,7 @@ aarch64_case_values_threshold (void)
+ && selected_cpu->tune->max_case_values != 0)
+ return selected_cpu->tune->max_case_values;
+ else
+- return default_case_values_threshold ();
++ return optimize_size ? default_case_values_threshold () : 17;
+ }
+
+ /* Return true if register REGNO is a valid index register.
+@@ -3921,9 +4064,11 @@ aarch64_classify_address (struct aarch64_address_info *info,
+ X,X: 7-bit signed scaled offset
+ Q: 9-bit signed offset
+ We conservatively require an offset representable in either mode.
+- */
++ When performing the check for pairs of X registers i.e. LDP/STP
++ pass down DImode since that is the natural size of the LDP/STP
++ instruction memory accesses. */
+ if (mode == TImode || mode == TFmode)
+- return (aarch64_offset_7bit_signed_scaled_p (mode, offset)
++ return (aarch64_offset_7bit_signed_scaled_p (DImode, offset)
+ && offset_9bit_signed_unscaled_p (mode, offset));
+
+ /* A 7bit offset check because OImode will emit a ldp/stp
+@@ -4031,7 +4176,7 @@ aarch64_classify_address (struct aarch64_address_info *info,
+ return ((GET_CODE (sym) == LABEL_REF
+ || (GET_CODE (sym) == SYMBOL_REF
+ && CONSTANT_POOL_ADDRESS_P (sym)
+- && !aarch64_nopcrelative_literal_loads)));
++ && aarch64_pcrelative_literal_loads)));
+ }
+ return false;
+
+@@ -4125,6 +4270,24 @@ aarch64_legitimate_address_p (machine_mode mode, rtx x,
+ return aarch64_classify_address (&addr, x, mode, outer_code, strict_p);
+ }
+
++/* Split an out-of-range address displacement into a base and offset.
++ Use 4KB range for 1- and 2-byte accesses and a 16KB range otherwise
++ to increase opportunities for sharing the base address of different sizes.
++ For TI/TFmode and unaligned accesses use a 256-byte range. */
++static bool
++aarch64_legitimize_address_displacement (rtx *disp, rtx *off, machine_mode mode)
++{
++ HOST_WIDE_INT mask = GET_MODE_SIZE (mode) < 4 ? 0xfff : 0x3fff;
++
++ if (mode == TImode || mode == TFmode ||
++ (INTVAL (*disp) & (GET_MODE_SIZE (mode) - 1)) != 0)
++ mask = 0xff;
++
++ *off = GEN_INT (INTVAL (*disp) & ~mask);
++ *disp = GEN_INT (INTVAL (*disp) & mask);
++ return true;
++}
++
+ /* Return TRUE if rtx X is immediate constant 0.0 */
+ bool
+ aarch64_float_const_zero_rtx_p (rtx x)
+@@ -4198,6 +4361,14 @@ aarch64_select_cc_mode (RTX_CODE code, rtx x, rtx y)
+ && (GET_MODE (x) == HImode || GET_MODE (x) == QImode))
+ return CC_NZmode;
+
++ /* Similarly, comparisons of zero_extends from shorter modes can
++ be performed using an ANDS with an immediate mask. */
++ if (y == const0_rtx && GET_CODE (x) == ZERO_EXTEND
++ && (GET_MODE (x) == SImode || GET_MODE (x) == DImode)
++ && (GET_MODE (XEXP (x, 0)) == HImode || GET_MODE (XEXP (x, 0)) == QImode)
++ && (code == EQ || code == NE))
++ return CC_NZmode;
++
+ if ((GET_MODE (x) == SImode || GET_MODE (x) == DImode)
+ && y == const0_rtx
+ && (code == EQ || code == NE || code == LT || code == GE)
+@@ -4225,14 +4396,6 @@ aarch64_select_cc_mode (RTX_CODE code, rtx x, rtx y)
+ && GET_CODE (x) == NEG)
+ return CC_Zmode;
+
+- /* A compare of a mode narrower than SI mode against zero can be done
+- by extending the value in the comparison. */
+- if ((GET_MODE (x) == QImode || GET_MODE (x) == HImode)
+- && y == const0_rtx)
+- /* Only use sign-extension if we really need it. */
+- return ((code == GT || code == GE || code == LE || code == LT)
+- ? CC_SESWPmode : CC_ZESWPmode);
+-
+ /* A test for unsigned overflow. */
+ if ((GET_MODE (x) == DImode || GET_MODE (x) == TImode)
+ && code == NE
+@@ -4301,8 +4464,6 @@ aarch64_get_condition_code_1 (enum machine_mode mode, enum rtx_code comp_code)
+ break;
+
+ case CC_SWPmode:
+- case CC_ZESWPmode:
+- case CC_SESWPmode:
+ switch (comp_code)
+ {
+ case NE: return AARCH64_NE;
+@@ -4957,7 +5118,7 @@ aarch64_legitimize_address (rtx x, rtx /* orig_x */, machine_mode mode)
+ if (GET_CODE (x) == PLUS && CONST_INT_P (XEXP (x, 1)))
+ {
+ rtx base = XEXP (x, 0);
+- rtx offset_rtx XEXP (x, 1);
++ rtx offset_rtx = XEXP (x, 1);
+ HOST_WIDE_INT offset = INTVAL (offset_rtx);
+
+ if (GET_CODE (base) == PLUS)
+@@ -5015,120 +5176,6 @@ aarch64_legitimize_address (rtx x, rtx /* orig_x */, machine_mode mode)
+ return x;
+ }
+
+-/* Try a machine-dependent way of reloading an illegitimate address
+- operand. If we find one, push the reload and return the new rtx. */
+-
+-rtx
+-aarch64_legitimize_reload_address (rtx *x_p,
+- machine_mode mode,
+- int opnum, int type,
+- int ind_levels ATTRIBUTE_UNUSED)
+-{
+- rtx x = *x_p;
+-
+- /* Do not allow mem (plus (reg, const)) if vector struct mode. */
+- if (aarch64_vect_struct_mode_p (mode)
+- && GET_CODE (x) == PLUS
+- && REG_P (XEXP (x, 0))
+- && CONST_INT_P (XEXP (x, 1)))
+- {
+- rtx orig_rtx = x;
+- x = copy_rtx (x);
+- push_reload (orig_rtx, NULL_RTX, x_p, NULL,
+- BASE_REG_CLASS, GET_MODE (x), VOIDmode, 0, 0,
+- opnum, (enum reload_type) type);
+- return x;
+- }
+-
+- /* We must recognize output that we have already generated ourselves. */
+- if (GET_CODE (x) == PLUS
+- && GET_CODE (XEXP (x, 0)) == PLUS
+- && REG_P (XEXP (XEXP (x, 0), 0))
+- && CONST_INT_P (XEXP (XEXP (x, 0), 1))
+- && CONST_INT_P (XEXP (x, 1)))
+- {
+- push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL,
+- BASE_REG_CLASS, GET_MODE (x), VOIDmode, 0, 0,
+- opnum, (enum reload_type) type);
+- return x;
+- }
+-
+- /* We wish to handle large displacements off a base register by splitting
+- the addend across an add and the mem insn. This can cut the number of
+- extra insns needed from 3 to 1. It is only useful for load/store of a
+- single register with 12 bit offset field. */
+- if (GET_CODE (x) == PLUS
+- && REG_P (XEXP (x, 0))
+- && CONST_INT_P (XEXP (x, 1))
+- && HARD_REGISTER_P (XEXP (x, 0))
+- && mode != TImode
+- && mode != TFmode
+- && aarch64_regno_ok_for_base_p (REGNO (XEXP (x, 0)), true))
+- {
+- HOST_WIDE_INT val = INTVAL (XEXP (x, 1));
+- HOST_WIDE_INT low = val & 0xfff;
+- HOST_WIDE_INT high = val - low;
+- HOST_WIDE_INT offs;
+- rtx cst;
+- machine_mode xmode = GET_MODE (x);
+-
+- /* In ILP32, xmode can be either DImode or SImode. */
+- gcc_assert (xmode == DImode || xmode == SImode);
+-
+- /* Reload non-zero BLKmode offsets. This is because we cannot ascertain
+- BLKmode alignment. */
+- if (GET_MODE_SIZE (mode) == 0)
+- return NULL_RTX;
+-
+- offs = low % GET_MODE_SIZE (mode);
+-
+- /* Align misaligned offset by adjusting high part to compensate. */
+- if (offs != 0)
+- {
+- if (aarch64_uimm12_shift (high + offs))
+- {
+- /* Align down. */
+- low = low - offs;
+- high = high + offs;
+- }
+- else
+- {
+- /* Align up. */
+- offs = GET_MODE_SIZE (mode) - offs;
+- low = low + offs;
+- high = high + (low & 0x1000) - offs;
+- low &= 0xfff;
+- }
+- }
+-
+- /* Check for overflow. */
+- if (high + low != val)
+- return NULL_RTX;
+-
+- cst = GEN_INT (high);
+- if (!aarch64_uimm12_shift (high))
+- cst = force_const_mem (xmode, cst);
+-
+- /* Reload high part into base reg, leaving the low part
+- in the mem instruction.
+- Note that replacing this gen_rtx_PLUS with plus_constant is
+- wrong in this case because we rely on the
+- (plus (plus reg c1) c2) structure being preserved so that
+- XEXP (*p, 0) in push_reload below uses the correct term. */
+- x = gen_rtx_PLUS (xmode,
+- gen_rtx_PLUS (xmode, XEXP (x, 0), cst),
+- GEN_INT (low));
+-
+- push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL,
+- BASE_REG_CLASS, xmode, VOIDmode, 0, 0,
+- opnum, (enum reload_type) type);
+- return x;
+- }
+-
+- return NULL_RTX;
+-}
+-
+-
+ /* Return the reload icode required for a constant pool in mode. */
+ static enum insn_code
+ aarch64_constant_pool_reload_icode (machine_mode mode)
+@@ -5186,7 +5233,7 @@ aarch64_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x,
+ if (MEM_P (x) && GET_CODE (x) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x)
+ && (SCALAR_FLOAT_MODE_P (GET_MODE (x))
+ || targetm.vector_mode_supported_p (GET_MODE (x)))
+- && aarch64_nopcrelative_literal_loads)
++ && !aarch64_pcrelative_literal_loads)
+ {
+ sri->icode = aarch64_constant_pool_reload_icode (mode);
+ return NO_REGS;
+@@ -5260,18 +5307,18 @@ aarch64_initial_elimination_offset (unsigned from, unsigned to)
+ if (to == HARD_FRAME_POINTER_REGNUM)
+ {
+ if (from == ARG_POINTER_REGNUM)
+- return cfun->machine->frame.frame_size - crtl->outgoing_args_size;
++ return cfun->machine->frame.hard_fp_offset;
+
+ if (from == FRAME_POINTER_REGNUM)
+- return (cfun->machine->frame.hard_fp_offset
+- - cfun->machine->frame.saved_varargs_size);
++ return cfun->machine->frame.hard_fp_offset
++ - cfun->machine->frame.locals_offset;
+ }
+
+ if (to == STACK_POINTER_REGNUM)
+ {
+ if (from == FRAME_POINTER_REGNUM)
+- return (cfun->machine->frame.frame_size
+- - cfun->machine->frame.saved_varargs_size);
++ return cfun->machine->frame.frame_size
++ - cfun->machine->frame.locals_offset;
+ }
+
+ return cfun->machine->frame.frame_size;
+@@ -5418,7 +5465,10 @@ aarch64_elf_asm_constructor (rtx symbol, int priority)
+ else
+ {
+ section *s;
+- char buf[18];
++ /* While priority is known to be in range [0, 65535], so 18 bytes
++ would be enough, the compiler might not know that. To avoid
++ -Wformat-truncation false positive, use a larger size. */
++ char buf[23];
+ snprintf (buf, sizeof (buf), ".init_array.%.5u", priority);
+ s = get_section (buf, SECTION_WRITE, NULL);
+ switch_to_section (s);
+@@ -5435,7 +5485,10 @@ aarch64_elf_asm_destructor (rtx symbol, int priority)
+ else
+ {
+ section *s;
+- char buf[18];
++ /* While priority is known to be in range [0, 65535], so 18 bytes
++ would be enough, the compiler might not know that. To avoid
++ -Wformat-truncation false positive, use a larger size. */
++ char buf[23];
+ snprintf (buf, sizeof (buf), ".fini_array.%.5u", priority);
+ s = get_section (buf, SECTION_WRITE, NULL);
+ switch_to_section (s);
+@@ -5520,7 +5573,7 @@ aarch64_uxt_size (int shift, HOST_WIDE_INT mask)
+ static inline bool
+ aarch64_can_use_per_function_literal_pools_p (void)
+ {
+- return (!aarch64_nopcrelative_literal_loads
++ return (aarch64_pcrelative_literal_loads
+ || aarch64_cmodel == AARCH64_CMODEL_LARGE);
+ }
+
+@@ -6139,6 +6192,19 @@ aarch64_extend_bitfield_pattern_p (rtx x)
+ return op;
+ }
+
++/* Return true if the mask and a shift amount from an RTX of the form
++ (x << SHFT_AMNT) & MASK are valid to combine into a UBFIZ instruction of
++ mode MODE. See the *andim_ashift<mode>_bfiz pattern. */
++
++bool
++aarch64_mask_and_shift_for_ubfiz_p (machine_mode mode, rtx mask, rtx shft_amnt)
++{
++ return CONST_INT_P (mask) && CONST_INT_P (shft_amnt)
++ && INTVAL (shft_amnt) < GET_MODE_BITSIZE (mode)
++ && exact_log2 ((INTVAL (mask) >> INTVAL (shft_amnt)) + 1) >= 0
++ && (INTVAL (mask) & ((1 << INTVAL (shft_amnt)) - 1)) == 0;
++}
++
+ /* Calculate the cost of calculating X, storing it in *COST. Result
+ is true if the total cost of the operation has now been calculated. */
+ static bool
+@@ -6404,10 +6470,6 @@ aarch64_rtx_costs (rtx x, machine_mode mode, int outer ATTRIBUTE_UNUSED,
+ /* TODO: A write to the CC flags possibly costs extra, this
+ needs encoding in the cost tables. */
+
+- /* CC_ZESWPmode supports zero extend for free. */
+- if (mode == CC_ZESWPmode && GET_CODE (op0) == ZERO_EXTEND)
+- op0 = XEXP (op0, 0);
+-
+ mode = GET_MODE (op0);
+ /* ANDS. */
+ if (GET_CODE (op0) == AND)
+@@ -6717,17 +6779,31 @@ cost_plus:
+
+ if (GET_MODE_CLASS (mode) == MODE_INT)
+ {
+- /* We possibly get the immediate for free, this is not
+- modelled. */
+- if (CONST_INT_P (op1)
+- && aarch64_bitmask_imm (INTVAL (op1), mode))
++ if (CONST_INT_P (op1))
+ {
+- *cost += rtx_cost (op0, mode, (enum rtx_code) code, 0, speed);
++ /* We have a mask + shift version of a UBFIZ
++ i.e. the *andim_ashift<mode>_bfiz pattern. */
++ if (GET_CODE (op0) == ASHIFT
++ && aarch64_mask_and_shift_for_ubfiz_p (mode, op1,
++ XEXP (op0, 1)))
++ {
++ *cost += rtx_cost (XEXP (op0, 0), mode,
++ (enum rtx_code) code, 0, speed);
++ if (speed)
++ *cost += extra_cost->alu.bfx;
+
+- if (speed)
+- *cost += extra_cost->alu.logical;
++ return true;
++ }
++ else if (aarch64_bitmask_imm (INTVAL (op1), mode))
++ {
++ /* We possibly get the immediate for free, this is not
++ modelled. */
++ *cost += rtx_cost (op0, mode, (enum rtx_code) code, 0, speed);
++ if (speed)
++ *cost += extra_cost->alu.logical;
+
+- return true;
++ return true;
++ }
+ }
+ else
+ {
+@@ -6831,11 +6907,12 @@ cost_plus:
+ {
+ int op_cost = rtx_cost (op0, VOIDmode, ZERO_EXTEND, 0, speed);
+
+- if (!op_cost && speed)
+- /* MOV. */
+- *cost += extra_cost->alu.extend;
+- else
+- /* Free, the cost is that of the SI mode operation. */
++ /* If OP_COST is non-zero, then the cost of the zero extend
++ is effectively the cost of the inner operation. Otherwise
++ we have a MOV instruction and we take the cost from the MOV
++ itself. This is true independently of whether we are
++ optimizing for space or time. */
++ if (op_cost)
+ *cost = op_cost;
+
+ return true;
+@@ -6865,8 +6942,8 @@ cost_plus:
+ }
+ else
+ {
+- /* UXTB/UXTH. */
+- *cost += extra_cost->alu.extend;
++ /* We generate an AND instead of UXTB/UXTH. */
++ *cost += extra_cost->alu.logical;
+ }
+ }
+ return false;
+@@ -7349,7 +7426,8 @@ cost_plus:
+ break;
+ }
+
+- if (dump_file && (dump_flags & TDF_DETAILS))
++ if (dump_file
++ && flag_aarch64_verbose_cost)
+ fprintf (dump_file,
+ "\nFailed to cost RTX. Assuming default cost.\n");
+
+@@ -7365,7 +7443,8 @@ aarch64_rtx_costs_wrapper (rtx x, machine_mode mode, int outer,
+ {
+ bool result = aarch64_rtx_costs (x, mode, outer, param, cost, speed);
+
+- if (dump_file && (dump_flags & TDF_DETAILS))
++ if (dump_file
++ && flag_aarch64_verbose_cost)
+ {
+ print_rtl_single (dump_file, x);
+ fprintf (dump_file, "\n%s cost: %d (%s)\n",
+@@ -7445,12 +7524,12 @@ aarch64_memory_move_cost (machine_mode mode ATTRIBUTE_UNUSED,
+ to optimize 1.0/sqrt. */
+
+ static bool
+-use_rsqrt_p (void)
++use_rsqrt_p (machine_mode mode)
+ {
+ return (!flag_trapping_math
+ && flag_unsafe_math_optimizations
+- && ((aarch64_tune_params.extra_tuning_flags
+- & AARCH64_EXTRA_TUNE_APPROX_RSQRT)
++ && ((aarch64_tune_params.approx_modes->recip_sqrt
++ & AARCH64_APPROX_MODE (mode))
+ || flag_mrecip_low_precision_sqrt));
+ }
+
+@@ -7460,89 +7539,225 @@ use_rsqrt_p (void)
+ static tree
+ aarch64_builtin_reciprocal (tree fndecl)
+ {
+- if (!use_rsqrt_p ())
++ machine_mode mode = TYPE_MODE (TREE_TYPE (fndecl));
++
++ if (!use_rsqrt_p (mode))
+ return NULL_TREE;
+ return aarch64_builtin_rsqrt (DECL_FUNCTION_CODE (fndecl));
+ }
+
+ typedef rtx (*rsqrte_type) (rtx, rtx);
+
+-/* Select reciprocal square root initial estimate
+- insn depending on machine mode. */
++/* Select reciprocal square root initial estimate insn depending on machine
++ mode. */
+
+-rsqrte_type
++static rsqrte_type
+ get_rsqrte_type (machine_mode mode)
+ {
+ switch (mode)
+ {
+- case DFmode: return gen_aarch64_rsqrte_df2;
+- case SFmode: return gen_aarch64_rsqrte_sf2;
+- case V2DFmode: return gen_aarch64_rsqrte_v2df2;
+- case V2SFmode: return gen_aarch64_rsqrte_v2sf2;
+- case V4SFmode: return gen_aarch64_rsqrte_v4sf2;
++ case DFmode: return gen_aarch64_rsqrtedf;
++ case SFmode: return gen_aarch64_rsqrtesf;
++ case V2DFmode: return gen_aarch64_rsqrtev2df;
++ case V2SFmode: return gen_aarch64_rsqrtev2sf;
++ case V4SFmode: return gen_aarch64_rsqrtev4sf;
+ default: gcc_unreachable ();
+ }
+ }
+
+ typedef rtx (*rsqrts_type) (rtx, rtx, rtx);
+
+-/* Select reciprocal square root Newton-Raphson step
+- insn depending on machine mode. */
++/* Select reciprocal square root series step insn depending on machine mode. */
+
+-rsqrts_type
++static rsqrts_type
+ get_rsqrts_type (machine_mode mode)
+ {
+ switch (mode)
+ {
+- case DFmode: return gen_aarch64_rsqrts_df3;
+- case SFmode: return gen_aarch64_rsqrts_sf3;
+- case V2DFmode: return gen_aarch64_rsqrts_v2df3;
+- case V2SFmode: return gen_aarch64_rsqrts_v2sf3;
+- case V4SFmode: return gen_aarch64_rsqrts_v4sf3;
++ case DFmode: return gen_aarch64_rsqrtsdf;
++ case SFmode: return gen_aarch64_rsqrtssf;
++ case V2DFmode: return gen_aarch64_rsqrtsv2df;
++ case V2SFmode: return gen_aarch64_rsqrtsv2sf;
++ case V4SFmode: return gen_aarch64_rsqrtsv4sf;
+ default: gcc_unreachable ();
+ }
+ }
+
+-/* Emit instruction sequence to compute the reciprocal square root using the
+- Newton-Raphson series. Iterate over the series twice for SF
+- and thrice for DF. */
++/* Emit instruction sequence to compute either the approximate square root
++ or its approximate reciprocal, depending on the flag RECP, and return
++ whether the sequence was emitted or not. */
+
+-void
+-aarch64_emit_approx_rsqrt (rtx dst, rtx src)
++bool
++aarch64_emit_approx_sqrt (rtx dst, rtx src, bool recp)
+ {
+- machine_mode mode = GET_MODE (src);
+- gcc_assert (
+- mode == SFmode || mode == V2SFmode || mode == V4SFmode
+- || mode == DFmode || mode == V2DFmode);
++ machine_mode mode = GET_MODE (dst);
++
++ if (GET_MODE_INNER (mode) == HFmode)
++ return false;
+
+- rtx xsrc = gen_reg_rtx (mode);
+- emit_move_insn (xsrc, src);
+- rtx x0 = gen_reg_rtx (mode);
++ machine_mode mmsk = mode_for_vector
++ (int_mode_for_mode (GET_MODE_INNER (mode)),
++ GET_MODE_NUNITS (mode));
++ bool use_approx_sqrt_p = (!recp
++ && (flag_mlow_precision_sqrt
++ || (aarch64_tune_params.approx_modes->sqrt
++ & AARCH64_APPROX_MODE (mode))));
++ bool use_approx_rsqrt_p = (recp
++ && (flag_mrecip_low_precision_sqrt
++ || (aarch64_tune_params.approx_modes->recip_sqrt
++ & AARCH64_APPROX_MODE (mode))));
++
++ if (!flag_finite_math_only
++ || flag_trapping_math
++ || !flag_unsafe_math_optimizations
++ || !(use_approx_sqrt_p || use_approx_rsqrt_p)
++ || optimize_function_for_size_p (cfun))
++ return false;
+
+- emit_insn ((*get_rsqrte_type (mode)) (x0, xsrc));
++ rtx xmsk = gen_reg_rtx (mmsk);
++ if (!recp)
++ /* When calculating the approximate square root, compare the argument with
++ 0.0 and create a mask. */
++ emit_insn (gen_rtx_SET (xmsk, gen_rtx_NEG (mmsk, gen_rtx_EQ (mmsk, src,
++ CONST0_RTX (mode)))));
+
+- bool double_mode = (mode == DFmode || mode == V2DFmode);
++ /* Estimate the approximate reciprocal square root. */
++ rtx xdst = gen_reg_rtx (mode);
++ emit_insn ((*get_rsqrte_type (mode)) (xdst, src));
+
+- int iterations = double_mode ? 3 : 2;
++ /* Iterate over the series twice for SF and thrice for DF. */
++ int iterations = (GET_MODE_INNER (mode) == DFmode) ? 3 : 2;
+
+- /* Optionally iterate over the series one less time than otherwise. */
+- if (flag_mrecip_low_precision_sqrt)
++ /* Optionally iterate over the series once less for faster performance
++ while sacrificing the accuracy. */
++ if ((recp && flag_mrecip_low_precision_sqrt)
++ || (!recp && flag_mlow_precision_sqrt))
+ iterations--;
+
+- for (int i = 0; i < iterations; ++i)
++ /* Iterate over the series to calculate the approximate reciprocal square
++ root. */
++ rtx x1 = gen_reg_rtx (mode);
++ while (iterations--)
+ {
+- rtx x1 = gen_reg_rtx (mode);
+ rtx x2 = gen_reg_rtx (mode);
+- rtx x3 = gen_reg_rtx (mode);
+- emit_set_insn (x2, gen_rtx_MULT (mode, x0, x0));
++ emit_set_insn (x2, gen_rtx_MULT (mode, xdst, xdst));
++
++ emit_insn ((*get_rsqrts_type (mode)) (x1, src, x2));
++
++ if (iterations > 0)
++ emit_set_insn (xdst, gen_rtx_MULT (mode, xdst, x1));
++ }
++
++ if (!recp)
++ {
++ /* Qualify the approximate reciprocal square root when the argument is
++ 0.0 by squashing the intermediary result to 0.0. */
++ rtx xtmp = gen_reg_rtx (mmsk);
++ emit_set_insn (xtmp, gen_rtx_AND (mmsk, gen_rtx_NOT (mmsk, xmsk),
++ gen_rtx_SUBREG (mmsk, xdst, 0)));
++ emit_move_insn (xdst, gen_rtx_SUBREG (mode, xtmp, 0));
++
++ /* Calculate the approximate square root. */
++ emit_set_insn (xdst, gen_rtx_MULT (mode, xdst, src));
++ }
++
++ /* Finalize the approximation. */
++ emit_set_insn (dst, gen_rtx_MULT (mode, xdst, x1));
++
++ return true;
++}
++
++typedef rtx (*recpe_type) (rtx, rtx);
++
++/* Select reciprocal initial estimate insn depending on machine mode. */
++
++static recpe_type
++get_recpe_type (machine_mode mode)
++{
++ switch (mode)
++ {
++ case SFmode: return (gen_aarch64_frecpesf);
++ case V2SFmode: return (gen_aarch64_frecpev2sf);
++ case V4SFmode: return (gen_aarch64_frecpev4sf);
++ case DFmode: return (gen_aarch64_frecpedf);
++ case V2DFmode: return (gen_aarch64_frecpev2df);
++ default: gcc_unreachable ();
++ }
++}
++
++typedef rtx (*recps_type) (rtx, rtx, rtx);
++
++/* Select reciprocal series step insn depending on machine mode. */
++
++static recps_type
++get_recps_type (machine_mode mode)
++{
++ switch (mode)
++ {
++ case SFmode: return (gen_aarch64_frecpssf);
++ case V2SFmode: return (gen_aarch64_frecpsv2sf);
++ case V4SFmode: return (gen_aarch64_frecpsv4sf);
++ case DFmode: return (gen_aarch64_frecpsdf);
++ case V2DFmode: return (gen_aarch64_frecpsv2df);
++ default: gcc_unreachable ();
++ }
++}
++
++/* Emit the instruction sequence to compute the approximation for the division
++ of NUM by DEN in QUO and return whether the sequence was emitted or not. */
++
++bool
++aarch64_emit_approx_div (rtx quo, rtx num, rtx den)
++{
++ machine_mode mode = GET_MODE (quo);
+
+- emit_insn ((*get_rsqrts_type (mode)) (x3, xsrc, x2));
++ if (GET_MODE_INNER (mode) == HFmode)
++ return false;
++
++ bool use_approx_division_p = (flag_mlow_precision_div
++ || (aarch64_tune_params.approx_modes->division
++ & AARCH64_APPROX_MODE (mode)));
++
++ if (!flag_finite_math_only
++ || flag_trapping_math
++ || !flag_unsafe_math_optimizations
++ || optimize_function_for_size_p (cfun)
++ || !use_approx_division_p)
++ return false;
++
++ /* Estimate the approximate reciprocal. */
++ rtx xrcp = gen_reg_rtx (mode);
++ emit_insn ((*get_recpe_type (mode)) (xrcp, den));
++
++ /* Iterate over the series twice for SF and thrice for DF. */
++ int iterations = (GET_MODE_INNER (mode) == DFmode) ? 3 : 2;
++
++ /* Optionally iterate over the series once less for faster performance,
++ while sacrificing the accuracy. */
++ if (flag_mlow_precision_div)
++ iterations--;
+
+- emit_set_insn (x1, gen_rtx_MULT (mode, x0, x3));
+- x0 = x1;
++ /* Iterate over the series to calculate the approximate reciprocal. */
++ rtx xtmp = gen_reg_rtx (mode);
++ while (iterations--)
++ {
++ emit_insn ((*get_recps_type (mode)) (xtmp, xrcp, den));
++
++ if (iterations > 0)
++ emit_set_insn (xrcp, gen_rtx_MULT (mode, xrcp, xtmp));
++ }
++
++ if (num != CONST1_RTX (mode))
++ {
++ /* As the approximate reciprocal of DEN is already calculated, only
++ calculate the approximate division when NUM is not 1.0. */
++ rtx xnum = force_reg (mode, num);
++ emit_set_insn (xrcp, gen_rtx_MULT (mode, xrcp, xnum));
+ }
+
+- emit_move_insn (dst, x0);
++ /* Finalize the approximation. */
++ emit_set_insn (quo, gen_rtx_MULT (mode, xrcp, xtmp));
++ return true;
+ }
+
+ /* Return the number of instructions that can be issued per cycle. */
+@@ -8046,32 +8261,37 @@ aarch64_override_options_after_change_1 (struct gcc_options *opts)
+ opts->x_align_functions = aarch64_tune_params.function_align;
+ }
+
+- /* If nopcrelative_literal_loads is set on the command line, this
++ /* We default to no pc-relative literal loads. */
++
++ aarch64_pcrelative_literal_loads = false;
++
++ /* If -mpc-relative-literal-loads is set on the command line, this
+ implies that the user asked for PC relative literal loads. */
+- if (opts->x_nopcrelative_literal_loads == 1)
+- aarch64_nopcrelative_literal_loads = false;
++ if (opts->x_pcrelative_literal_loads == 1)
++ aarch64_pcrelative_literal_loads = true;
+
+- /* If it is not set on the command line, we default to no pc
+- relative literal loads, unless the workaround for Cortex-A53
+- erratum 843419 is in effect. */
+ /* This is PR70113. When building the Linux kernel with
+ CONFIG_ARM64_ERRATUM_843419, support for relocations
+ R_AARCH64_ADR_PREL_PG_HI21 and R_AARCH64_ADR_PREL_PG_HI21_NC is
+ removed from the kernel to avoid loading objects with possibly
+- offending sequences. With nopcrelative_literal_loads, we would
++ offending sequences. Without -mpc-relative-literal-loads we would
+ generate such relocations, preventing the kernel build from
+ succeeding. */
+- if (opts->x_nopcrelative_literal_loads == 2
+- && !TARGET_FIX_ERR_A53_843419)
+- aarch64_nopcrelative_literal_loads = true;
++ if (opts->x_pcrelative_literal_loads == 2
++ && TARGET_FIX_ERR_A53_843419)
++ aarch64_pcrelative_literal_loads = true;
+
+- /* In the tiny memory model it makes no sense
+- to disallow non PC relative literal pool loads
+- as many other things will break anyway. */
+- if (opts->x_nopcrelative_literal_loads
+- && (aarch64_cmodel == AARCH64_CMODEL_TINY
+- || aarch64_cmodel == AARCH64_CMODEL_TINY_PIC))
+- aarch64_nopcrelative_literal_loads = false;
++ /* In the tiny memory model it makes no sense to disallow PC relative
++ literal pool loads. */
++ if (aarch64_cmodel == AARCH64_CMODEL_TINY
++ || aarch64_cmodel == AARCH64_CMODEL_TINY_PIC)
++ aarch64_pcrelative_literal_loads = true;
++
++ /* When enabling the lower precision Newton series for the square root, also
++ enable it for the reciprocal square root, since the latter is an
++ intermediary step for the former. */
++ if (flag_mlow_precision_sqrt)
++ flag_mrecip_low_precision_sqrt = true;
+ }
+
+ /* 'Unpack' up the internal tuning structs and update the options
+@@ -8374,9 +8594,6 @@ aarch64_override_options (void)
+ while processing functions with potential target attributes. */
+ target_option_default_node = target_option_current_node
+ = build_target_option_node (&global_options);
+-
+- aarch64_register_fma_steering ();
+-
+ }
+
+ /* Implement targetm.override_options_after_change. */
+@@ -9279,15 +9496,18 @@ aarch64_classify_symbol (rtx x, rtx offset)
+ switch (aarch64_cmodel)
+ {
+ case AARCH64_CMODEL_TINY:
+- /* When we retreive symbol + offset address, we have to make sure
++ /* When we retrieve symbol + offset address, we have to make sure
+ the offset does not cause overflow of the final address. But
+ we have no way of knowing the address of symbol at compile time
+ so we can't accurately say if the distance between the PC and
+ symbol + offset is outside the addressible range of +/-1M in the
+ TINY code model. So we rely on images not being greater than
+ 1M and cap the offset at 1M and anything beyond 1M will have to
+- be loaded using an alternative mechanism. */
+- if (SYMBOL_REF_WEAK (x)
++ be loaded using an alternative mechanism. Furthermore if the
++ symbol is a weak reference to something that isn't known to
++ resolve to a symbol in this module, then force to memory. */
++ if ((SYMBOL_REF_WEAK (x)
++ && !aarch64_symbol_binds_local_p (x))
+ || INTVAL (offset) < -1048575 || INTVAL (offset) > 1048575)
+ return SYMBOL_FORCE_TO_MEM;
+ return SYMBOL_TINY_ABSOLUTE;
+@@ -9295,7 +9515,8 @@ aarch64_classify_symbol (rtx x, rtx offset)
+ case AARCH64_CMODEL_SMALL:
+ /* Same reasoning as the tiny code model, but the offset cap here is
+ 4G. */
+- if (SYMBOL_REF_WEAK (x)
++ if ((SYMBOL_REF_WEAK (x)
++ && !aarch64_symbol_binds_local_p (x))
+ || !IN_RANGE (INTVAL (offset), HOST_WIDE_INT_C (-4294967263),
+ HOST_WIDE_INT_C (4294967264)))
+ return SYMBOL_FORCE_TO_MEM;
+@@ -9317,8 +9538,7 @@ aarch64_classify_symbol (rtx x, rtx offset)
+ /* This is alright even in PIC code as the constant
+ pool reference is always PC relative and within
+ the same translation unit. */
+- if (nopcrelative_literal_loads
+- && CONSTANT_POOL_ADDRESS_P (x))
++ if (CONSTANT_POOL_ADDRESS_P (x))
+ return SYMBOL_SMALL_ABSOLUTE;
+ else
+ return SYMBOL_FORCE_TO_MEM;
+@@ -9454,6 +9674,13 @@ aarch64_build_builtin_va_list (void)
+ FIELD_DECL, get_identifier ("__vr_offs"),
+ integer_type_node);
+
++ /* Tell tree-stdarg pass about our internal offset fields.
++ NOTE: va_list_gpr/fpr_counter_field are only used for tree comparision
++ purpose to identify whether the code is updating va_list internal
++ offset fields through irregular way. */
++ va_list_gpr_counter_field = f_groff;
++ va_list_fpr_counter_field = f_vroff;
++
+ DECL_ARTIFICIAL (f_stack) = 1;
+ DECL_ARTIFICIAL (f_grtop) = 1;
+ DECL_ARTIFICIAL (f_vrtop) = 1;
+@@ -9486,15 +9713,17 @@ aarch64_expand_builtin_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
+ tree f_stack, f_grtop, f_vrtop, f_groff, f_vroff;
+ tree stack, grtop, vrtop, groff, vroff;
+ tree t;
+- int gr_save_area_size;
+- int vr_save_area_size;
++ int gr_save_area_size = cfun->va_list_gpr_size;
++ int vr_save_area_size = cfun->va_list_fpr_size;
+ int vr_offset;
+
+ cum = &crtl->args.info;
+- gr_save_area_size
+- = (NUM_ARG_REGS - cum->aapcs_ncrn) * UNITS_PER_WORD;
+- vr_save_area_size
+- = (NUM_FP_ARG_REGS - cum->aapcs_nvrn) * UNITS_PER_VREG;
++ if (cfun->va_list_gpr_size)
++ gr_save_area_size = MIN ((NUM_ARG_REGS - cum->aapcs_ncrn) * UNITS_PER_WORD,
++ cfun->va_list_gpr_size);
++ if (cfun->va_list_fpr_size)
++ vr_save_area_size = MIN ((NUM_FP_ARG_REGS - cum->aapcs_nvrn)
++ * UNITS_PER_VREG, cfun->va_list_fpr_size);
+
+ if (!TARGET_FLOAT)
+ {
+@@ -9823,7 +10052,8 @@ aarch64_setup_incoming_varargs (cumulative_args_t cum_v, machine_mode mode,
+ {
+ CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
+ CUMULATIVE_ARGS local_cum;
+- int gr_saved, vr_saved;
++ int gr_saved = cfun->va_list_gpr_size;
++ int vr_saved = cfun->va_list_fpr_size;
+
+ /* The caller has advanced CUM up to, but not beyond, the last named
+ argument. Advance a local copy of CUM past the last "real" named
+@@ -9831,9 +10061,14 @@ aarch64_setup_incoming_varargs (cumulative_args_t cum_v, machine_mode mode,
+ local_cum = *cum;
+ aarch64_function_arg_advance (pack_cumulative_args(&local_cum), mode, type, true);
+
+- /* Found out how many registers we need to save. */
+- gr_saved = NUM_ARG_REGS - local_cum.aapcs_ncrn;
+- vr_saved = NUM_FP_ARG_REGS - local_cum.aapcs_nvrn;
++ /* Found out how many registers we need to save.
++ Honor tree-stdvar analysis results. */
++ if (cfun->va_list_gpr_size)
++ gr_saved = MIN (NUM_ARG_REGS - local_cum.aapcs_ncrn,
++ cfun->va_list_gpr_size / UNITS_PER_WORD);
++ if (cfun->va_list_fpr_size)
++ vr_saved = MIN (NUM_FP_ARG_REGS - local_cum.aapcs_nvrn,
++ cfun->va_list_fpr_size / UNITS_PER_VREG);
+
+ if (!TARGET_FLOAT)
+ {
+@@ -9861,7 +10096,7 @@ aarch64_setup_incoming_varargs (cumulative_args_t cum_v, machine_mode mode,
+ /* We can't use move_block_from_reg, because it will use
+ the wrong mode, storing D regs only. */
+ machine_mode mode = TImode;
+- int off, i;
++ int off, i, vr_start;
+
+ /* Set OFF to the offset from virtual_incoming_args_rtx of
+ the first vector register. The VR save area lies below
+@@ -9870,14 +10105,15 @@ aarch64_setup_incoming_varargs (cumulative_args_t cum_v, machine_mode mode,
+ STACK_BOUNDARY / BITS_PER_UNIT);
+ off -= vr_saved * UNITS_PER_VREG;
+
+- for (i = local_cum.aapcs_nvrn; i < NUM_FP_ARG_REGS; ++i)
++ vr_start = V0_REGNUM + local_cum.aapcs_nvrn;
++ for (i = 0; i < vr_saved; ++i)
+ {
+ rtx ptr, mem;
+
+ ptr = plus_constant (Pmode, virtual_incoming_args_rtx, off);
+ mem = gen_frame_mem (mode, ptr);
+ set_mem_alias_set (mem, get_varargs_alias_set ());
+- aarch64_emit_move (mem, gen_rtx_REG (mode, V0_REGNUM + i));
++ aarch64_emit_move (mem, gen_rtx_REG (mode, vr_start + i));
+ off += UNITS_PER_VREG;
+ }
+ }
+@@ -10839,33 +11075,6 @@ aarch64_simd_emit_reg_reg_move (rtx *operands, enum machine_mode mode,
+ gen_rtx_REG (mode, rsrc + count - i - 1));
+ }
+
+-/* Compute and return the length of aarch64_simd_mov<mode>, where <mode> is
+- one of VSTRUCT modes: OI, CI or XI. */
+-int
+-aarch64_simd_attr_length_move (rtx_insn *insn)
+-{
+- machine_mode mode;
+-
+- extract_insn_cached (insn);
+-
+- if (REG_P (recog_data.operand[0]) && REG_P (recog_data.operand[1]))
+- {
+- mode = GET_MODE (recog_data.operand[0]);
+- switch (mode)
+- {
+- case OImode:
+- return 8;
+- case CImode:
+- return 12;
+- case XImode:
+- return 16;
+- default:
+- gcc_unreachable ();
+- }
+- }
+- return 4;
+-}
+-
+ /* Compute and return the length of aarch64_simd_reglist<mode>, where <mode> is
+ one of VSTRUCT modes: OI, CI, or XI. */
+ int
+@@ -10899,6 +11108,37 @@ aarch64_simd_vector_alignment_reachable (const_tree type, bool is_packed)
+ return true;
+ }
+
++/* Return true if the vector misalignment factor is supported by the
++ target. */
++static bool
++aarch64_builtin_support_vector_misalignment (machine_mode mode,
++ const_tree type, int misalignment,
++ bool is_packed)
++{
++ if (TARGET_SIMD && STRICT_ALIGNMENT)
++ {
++ /* Return if movmisalign pattern is not supported for this mode. */
++ if (optab_handler (movmisalign_optab, mode) == CODE_FOR_nothing)
++ return false;
++
++ if (misalignment == -1)
++ {
++ /* Misalignment factor is unknown at compile time but we know
++ it's word aligned. */
++ if (aarch64_simd_vector_alignment_reachable (type, is_packed))
++ {
++ int element_size = TREE_INT_CST_LOW (TYPE_SIZE (type));
++
++ if (element_size != 64)
++ return true;
++ }
++ return false;
++ }
++ }
++ return default_builtin_support_vector_misalignment (mode, type, misalignment,
++ is_packed);
++}
++
+ /* If VALS is a vector constant that can be loaded into a register
+ using DUP, generate instructions to do so and return an RTX to
+ assign to the register. Otherwise return NULL_RTX. */
+@@ -11947,12 +12187,11 @@ aarch64_output_simd_mov_immediate (rtx const_vector,
+ info.value = GEN_INT (0);
+ else
+ {
+-#define buf_size 20
++ const unsigned int buf_size = 20;
+ char float_buf[buf_size] = {'\0'};
+ real_to_decimal_for_mode (float_buf,
+ CONST_DOUBLE_REAL_VALUE (info.value),
+ buf_size, buf_size, 1, mode);
+-#undef buf_size
+
+ if (lane_count == 1)
+ snprintf (templ, sizeof (templ), "fmov\t%%d0, %s", float_buf);
+@@ -12186,6 +12425,8 @@ aarch64_evpc_trn (struct expand_vec_perm_d *d)
+ case V4SImode: gen = gen_aarch64_trn2v4si; break;
+ case V2SImode: gen = gen_aarch64_trn2v2si; break;
+ case V2DImode: gen = gen_aarch64_trn2v2di; break;
++ case V4HFmode: gen = gen_aarch64_trn2v4hf; break;
++ case V8HFmode: gen = gen_aarch64_trn2v8hf; break;
+ case V4SFmode: gen = gen_aarch64_trn2v4sf; break;
+ case V2SFmode: gen = gen_aarch64_trn2v2sf; break;
+ case V2DFmode: gen = gen_aarch64_trn2v2df; break;
+@@ -12204,6 +12445,8 @@ aarch64_evpc_trn (struct expand_vec_perm_d *d)
+ case V4SImode: gen = gen_aarch64_trn1v4si; break;
+ case V2SImode: gen = gen_aarch64_trn1v2si; break;
+ case V2DImode: gen = gen_aarch64_trn1v2di; break;
++ case V4HFmode: gen = gen_aarch64_trn1v4hf; break;
++ case V8HFmode: gen = gen_aarch64_trn1v8hf; break;
+ case V4SFmode: gen = gen_aarch64_trn1v4sf; break;
+ case V2SFmode: gen = gen_aarch64_trn1v2sf; break;
+ case V2DFmode: gen = gen_aarch64_trn1v2df; break;
+@@ -12269,6 +12512,8 @@ aarch64_evpc_uzp (struct expand_vec_perm_d *d)
+ case V4SImode: gen = gen_aarch64_uzp2v4si; break;
+ case V2SImode: gen = gen_aarch64_uzp2v2si; break;
+ case V2DImode: gen = gen_aarch64_uzp2v2di; break;
++ case V4HFmode: gen = gen_aarch64_uzp2v4hf; break;
++ case V8HFmode: gen = gen_aarch64_uzp2v8hf; break;
+ case V4SFmode: gen = gen_aarch64_uzp2v4sf; break;
+ case V2SFmode: gen = gen_aarch64_uzp2v2sf; break;
+ case V2DFmode: gen = gen_aarch64_uzp2v2df; break;
+@@ -12287,6 +12532,8 @@ aarch64_evpc_uzp (struct expand_vec_perm_d *d)
+ case V4SImode: gen = gen_aarch64_uzp1v4si; break;
+ case V2SImode: gen = gen_aarch64_uzp1v2si; break;
+ case V2DImode: gen = gen_aarch64_uzp1v2di; break;
++ case V4HFmode: gen = gen_aarch64_uzp1v4hf; break;
++ case V8HFmode: gen = gen_aarch64_uzp1v8hf; break;
+ case V4SFmode: gen = gen_aarch64_uzp1v4sf; break;
+ case V2SFmode: gen = gen_aarch64_uzp1v2sf; break;
+ case V2DFmode: gen = gen_aarch64_uzp1v2df; break;
+@@ -12357,6 +12604,8 @@ aarch64_evpc_zip (struct expand_vec_perm_d *d)
+ case V4SImode: gen = gen_aarch64_zip2v4si; break;
+ case V2SImode: gen = gen_aarch64_zip2v2si; break;
+ case V2DImode: gen = gen_aarch64_zip2v2di; break;
++ case V4HFmode: gen = gen_aarch64_zip2v4hf; break;
++ case V8HFmode: gen = gen_aarch64_zip2v8hf; break;
+ case V4SFmode: gen = gen_aarch64_zip2v4sf; break;
+ case V2SFmode: gen = gen_aarch64_zip2v2sf; break;
+ case V2DFmode: gen = gen_aarch64_zip2v2df; break;
+@@ -12375,6 +12624,8 @@ aarch64_evpc_zip (struct expand_vec_perm_d *d)
+ case V4SImode: gen = gen_aarch64_zip1v4si; break;
+ case V2SImode: gen = gen_aarch64_zip1v2si; break;
+ case V2DImode: gen = gen_aarch64_zip1v2di; break;
++ case V4HFmode: gen = gen_aarch64_zip1v4hf; break;
++ case V8HFmode: gen = gen_aarch64_zip1v8hf; break;
+ case V4SFmode: gen = gen_aarch64_zip1v4sf; break;
+ case V2SFmode: gen = gen_aarch64_zip1v2sf; break;
+ case V2DFmode: gen = gen_aarch64_zip1v2df; break;
+@@ -12419,6 +12670,8 @@ aarch64_evpc_ext (struct expand_vec_perm_d *d)
+ case V8HImode: gen = gen_aarch64_extv8hi; break;
+ case V2SImode: gen = gen_aarch64_extv2si; break;
+ case V4SImode: gen = gen_aarch64_extv4si; break;
++ case V4HFmode: gen = gen_aarch64_extv4hf; break;
++ case V8HFmode: gen = gen_aarch64_extv8hf; break;
+ case V2SFmode: gen = gen_aarch64_extv2sf; break;
+ case V4SFmode: gen = gen_aarch64_extv4sf; break;
+ case V2DImode: gen = gen_aarch64_extv2di; break;
+@@ -12494,6 +12747,8 @@ aarch64_evpc_rev (struct expand_vec_perm_d *d)
+ case V2SImode: gen = gen_aarch64_rev64v2si; break;
+ case V4SFmode: gen = gen_aarch64_rev64v4sf; break;
+ case V2SFmode: gen = gen_aarch64_rev64v2sf; break;
++ case V8HFmode: gen = gen_aarch64_rev64v8hf; break;
++ case V4HFmode: gen = gen_aarch64_rev64v4hf; break;
+ default:
+ return false;
+ }
+@@ -12737,24 +12992,6 @@ aarch64_vectorize_vec_perm_const_ok (machine_mode vmode,
+ return ret;
+ }
+
+-/* Implement target hook CANNOT_CHANGE_MODE_CLASS. */
+-bool
+-aarch64_cannot_change_mode_class (machine_mode from,
+- machine_mode to,
+- enum reg_class rclass)
+-{
+- /* We cannot allow word_mode subregs of full vector modes.
+- Otherwise the middle-end will assume it's ok to store to
+- (subreg:DI (reg:TI 100) 0) in order to modify only the low 64 bits
+- of the 128-bit register. However, after reload the subreg will
+- be dropped leaving a plain DImode store. See PR67609 for a more
+- detailed dicussion. In all other cases, we want to be permissive
+- and return false. */
+- return (reg_classes_intersect_p (FP_REGS, rclass)
+- && GET_MODE_SIZE (to) == UNITS_PER_WORD
+- && GET_MODE_SIZE (from) > UNITS_PER_WORD);
+-}
+-
+ rtx
+ aarch64_reverse_mask (enum machine_mode mode)
+ {
+@@ -12776,7 +13013,14 @@ aarch64_reverse_mask (enum machine_mode mode)
+ return force_reg (V16QImode, mask);
+ }
+
+-/* Implement MODES_TIEABLE_P. */
++/* Implement MODES_TIEABLE_P. In principle we should always return true.
++ However due to issues with register allocation it is preferable to avoid
++ tieing integer scalar and FP scalar modes. Executing integer operations
++ in general registers is better than treating them as scalar vector
++ operations. This reduces latency and avoids redundant int<->FP moves.
++ So tie modes if they are either the same class, or vector modes with
++ other vector modes, vector structs or any scalar mode.
++*/
+
+ bool
+ aarch64_modes_tieable_p (machine_mode mode1, machine_mode mode2)
+@@ -12787,9 +13031,12 @@ aarch64_modes_tieable_p (machine_mode mode1, machine_mode mode2)
+ /* We specifically want to allow elements of "structure" modes to
+ be tieable to the structure. This more general condition allows
+ other rarer situations too. */
+- if (TARGET_SIMD
+- && aarch64_vector_mode_p (mode1)
+- && aarch64_vector_mode_p (mode2))
++ if (aarch64_vector_mode_p (mode1) && aarch64_vector_mode_p (mode2))
++ return true;
++
++ /* Also allow any scalar modes with vectors. */
++ if (aarch64_vector_mode_supported_p (mode1)
++ || aarch64_vector_mode_supported_p (mode2))
+ return true;
+
+ return false;
+@@ -12953,6 +13200,63 @@ aarch64_expand_movmem (rtx *operands)
+ return true;
+ }
+
++/* Split a DImode store of a CONST_INT SRC to MEM DST as two
++ SImode stores. Handle the case when the constant has identical
++ bottom and top halves. This is beneficial when the two stores can be
++ merged into an STP and we avoid synthesising potentially expensive
++ immediates twice. Return true if such a split is possible. */
++
++bool
++aarch64_split_dimode_const_store (rtx dst, rtx src)
++{
++ rtx lo = gen_lowpart (SImode, src);
++ rtx hi = gen_highpart_mode (SImode, DImode, src);
++
++ bool size_p = optimize_function_for_size_p (cfun);
++
++ if (!rtx_equal_p (lo, hi))
++ return false;
++
++ unsigned int orig_cost
++ = aarch64_internal_mov_immediate (NULL_RTX, src, false, DImode);
++ unsigned int lo_cost
++ = aarch64_internal_mov_immediate (NULL_RTX, lo, false, SImode);
++
++ /* We want to transform:
++ MOV x1, 49370
++ MOVK x1, 0x140, lsl 16
++ MOVK x1, 0xc0da, lsl 32
++ MOVK x1, 0x140, lsl 48
++ STR x1, [x0]
++ into:
++ MOV w1, 49370
++ MOVK w1, 0x140, lsl 16
++ STP w1, w1, [x0]
++ So we want to perform this only when we save two instructions
++ or more. When optimizing for size, however, accept any code size
++ savings we can. */
++ if (size_p && orig_cost <= lo_cost)
++ return false;
++
++ if (!size_p
++ && (orig_cost <= lo_cost + 1))
++ return false;
++
++ rtx mem_lo = adjust_address (dst, SImode, 0);
++ if (!aarch64_mem_pair_operand (mem_lo, SImode))
++ return false;
++
++ rtx tmp_reg = gen_reg_rtx (SImode);
++ aarch64_expand_mov_immediate (tmp_reg, lo);
++ rtx mem_hi = aarch64_move_pointer (mem_lo, GET_MODE_SIZE (SImode));
++ /* Don't emit an explicit store pair as this may not be always profitable.
++ Let the sched-fusion logic decide whether to merge them. */
++ emit_move_insn (mem_lo, tmp_reg);
++ emit_move_insn (mem_hi, tmp_reg);
++
++ return true;
++}
++
+ /* Implement the TARGET_ASAN_SHADOW_OFFSET hook. */
+
+ static unsigned HOST_WIDE_INT
+@@ -13305,6 +13609,14 @@ aarch_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr)
+ return false;
+ }
+
++/* Return true iff the instruction fusion described by OP is enabled. */
++
++bool
++aarch64_fusion_enabled_p (enum aarch64_fusion_pairs op)
++{
++ return (aarch64_tune_params.fusible_ops & op) != 0;
++}
++
+ /* If MEM is in the form of [base+offset], extract the two parts
+ of address and set to BASE and OFFSET, otherwise return false
+ after clearing BASE and OFFSET. */
+@@ -13449,6 +13761,26 @@ aarch64_sched_fusion_priority (rtx_insn *insn, int max_pri,
+ return;
+ }
+
++/* Implement the TARGET_SCHED_ADJUST_PRIORITY hook.
++ Adjust priority of sha1h instructions so they are scheduled before
++ other SHA1 instructions. */
++
++static int
++aarch64_sched_adjust_priority (rtx_insn *insn, int priority)
++{
++ rtx x = PATTERN (insn);
++
++ if (GET_CODE (x) == SET)
++ {
++ x = SET_SRC (x);
++
++ if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_SHA1H)
++ return priority + 10;
++ }
++
++ return priority;
++}
++
+ /* Given OPERANDS of consecutive load/store, check if we can merge
+ them into ldp/stp. LOAD is true if they are load instructions.
+ MODE is the mode of memory operands. */
+@@ -13483,6 +13815,15 @@ aarch64_operands_ok_for_ldpstp (rtx *operands, bool load,
+ if (MEM_VOLATILE_P (mem_1) || MEM_VOLATILE_P (mem_2))
+ return false;
+
++ /* If we have SImode and slow unaligned ldp,
++ check the alignment to be at least 8 byte. */
++ if (mode == SImode
++ && (aarch64_tune_params.extra_tuning_flags
++ & AARCH64_EXTRA_TUNE_SLOW_UNALIGNED_LDPW)
++ && !optimize_size
++ && MEM_ALIGN (mem_1) < 8 * BITS_PER_UNIT)
++ return false;
++
+ /* Check if the addresses are in the form of [base+offset]. */
+ extract_base_offset_in_addr (mem_1, &base_1, &offset_1);
+ if (base_1 == NULL_RTX || offset_1 == NULL_RTX)
+@@ -13642,6 +13983,15 @@ aarch64_operands_adjust_ok_for_ldpstp (rtx *operands, bool load,
+ return false;
+ }
+
++ /* If we have SImode and slow unaligned ldp,
++ check the alignment to be at least 8 byte. */
++ if (mode == SImode
++ && (aarch64_tune_params.extra_tuning_flags
++ & AARCH64_EXTRA_TUNE_SLOW_UNALIGNED_LDPW)
++ && !optimize_size
++ && MEM_ALIGN (mem_1) < 8 * BITS_PER_UNIT)
++ return false;
++
+ if (REG_P (reg_1) && FP_REGNUM_P (REGNO (reg_1)))
+ rclass_1 = FP_REGS;
+ else
+@@ -13877,13 +14227,13 @@ aarch64_promoted_type (const_tree t)
+ /* Implement the TARGET_OPTAB_SUPPORTED_P hook. */
+
+ static bool
+-aarch64_optab_supported_p (int op, machine_mode, machine_mode,
++aarch64_optab_supported_p (int op, machine_mode mode1, machine_mode,
+ optimization_type opt_type)
+ {
+ switch (op)
+ {
+ case rsqrt_optab:
+- return opt_type == OPTIMIZE_FOR_SPEED && use_rsqrt_p ();
++ return opt_type == OPTIMIZE_FOR_SPEED && use_rsqrt_p (mode1);
+
+ default:
+ return true;
+@@ -14017,6 +14367,10 @@ aarch64_optab_supported_p (int op, machine_mode, machine_mode,
+ #undef TARGET_LEGITIMATE_CONSTANT_P
+ #define TARGET_LEGITIMATE_CONSTANT_P aarch64_legitimate_constant_p
+
++#undef TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT
++#define TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT \
++ aarch64_legitimize_address_displacement
++
+ #undef TARGET_LIBGCC_CMP_RETURN_MODE
+ #define TARGET_LIBGCC_CMP_RETURN_MODE aarch64_libgcc_cmp_return_mode
+
+@@ -14119,6 +14473,10 @@ aarch64_optab_supported_p (int op, machine_mode, machine_mode,
+ #undef TARGET_VECTOR_MODE_SUPPORTED_P
+ #define TARGET_VECTOR_MODE_SUPPORTED_P aarch64_vector_mode_supported_p
+
++#undef TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT
++#define TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT \
++ aarch64_builtin_support_vector_misalignment
++
+ #undef TARGET_ARRAY_MODE_SUPPORTED_P
+ #define TARGET_ARRAY_MODE_SUPPORTED_P aarch64_array_mode_supported_p
+
+@@ -14196,6 +14554,9 @@ aarch64_optab_supported_p (int op, machine_mode, machine_mode,
+ #undef TARGET_CAN_USE_DOLOOP_P
+ #define TARGET_CAN_USE_DOLOOP_P can_use_doloop_if_innermost
+
++#undef TARGET_SCHED_ADJUST_PRIORITY
++#define TARGET_SCHED_ADJUST_PRIORITY aarch64_sched_adjust_priority
++
+ #undef TARGET_SCHED_MACRO_FUSION_P
+ #define TARGET_SCHED_MACRO_FUSION_P aarch64_macro_fusion_p
+
+@@ -14220,6 +14581,9 @@ aarch64_optab_supported_p (int op, machine_mode, machine_mode,
+ #undef TARGET_OPTAB_SUPPORTED_P
+ #define TARGET_OPTAB_SUPPORTED_P aarch64_optab_supported_p
+
++#undef TARGET_OMIT_STRUCT_RETURN_REG
++#define TARGET_OMIT_STRUCT_RETURN_REG true
++
+ struct gcc_target targetm = TARGET_INITIALIZER;
+
+ #include "gt-aarch64.h"
+--- a/src/gcc/config/aarch64/aarch64.h
++++ b/src/gcc/config/aarch64/aarch64.h
+@@ -132,9 +132,14 @@ extern unsigned aarch64_architecture_version;
+ #define AARCH64_FL_FP (1 << 1) /* Has FP. */
+ #define AARCH64_FL_CRYPTO (1 << 2) /* Has crypto. */
+ #define AARCH64_FL_CRC (1 << 3) /* Has CRC. */
+-/* ARMv8.1 architecture extensions. */
++/* ARMv8.1-A architecture extensions. */
+ #define AARCH64_FL_LSE (1 << 4) /* Has Large System Extensions. */
+-#define AARCH64_FL_V8_1 (1 << 5) /* Has ARMv8.1 extensions. */
++#define AARCH64_FL_V8_1 (1 << 5) /* Has ARMv8.1-A extensions. */
++/* ARMv8.2-A architecture extensions. */
++#define AARCH64_FL_V8_2 (1 << 8) /* Has ARMv8.2-A features. */
++#define AARCH64_FL_F16 (1 << 9) /* Has ARMv8.2-A FP16 extensions. */
++/* ARMv8.3-A architecture extensions. */
++#define AARCH64_FL_V8_3 (1 << 10) /* Has ARMv8.3-A features. */
+
+ /* Has FP and SIMD. */
+ #define AARCH64_FL_FPSIMD (AARCH64_FL_FP | AARCH64_FL_SIMD)
+@@ -146,6 +151,10 @@ extern unsigned aarch64_architecture_version;
+ #define AARCH64_FL_FOR_ARCH8 (AARCH64_FL_FPSIMD)
+ #define AARCH64_FL_FOR_ARCH8_1 \
+ (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC | AARCH64_FL_V8_1)
++#define AARCH64_FL_FOR_ARCH8_2 \
++ (AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_V8_2)
++#define AARCH64_FL_FOR_ARCH8_3 \
++ (AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_V8_3)
+
+ /* Macros to test ISA flags. */
+
+@@ -155,6 +164,9 @@ extern unsigned aarch64_architecture_version;
+ #define AARCH64_ISA_SIMD (aarch64_isa_flags & AARCH64_FL_SIMD)
+ #define AARCH64_ISA_LSE (aarch64_isa_flags & AARCH64_FL_LSE)
+ #define AARCH64_ISA_RDMA (aarch64_isa_flags & AARCH64_FL_V8_1)
++#define AARCH64_ISA_V8_2 (aarch64_isa_flags & AARCH64_FL_V8_2)
++#define AARCH64_ISA_F16 (aarch64_isa_flags & AARCH64_FL_F16)
++#define AARCH64_ISA_V8_3 (aarch64_isa_flags & AARCH64_FL_V8_3)
+
+ /* Crypto is an optional extension to AdvSIMD. */
+ #define TARGET_CRYPTO (TARGET_SIMD && AARCH64_ISA_CRYPTO)
+@@ -165,6 +177,13 @@ extern unsigned aarch64_architecture_version;
+ /* Atomic instructions that can be enabled through the +lse extension. */
+ #define TARGET_LSE (AARCH64_ISA_LSE)
+
++/* ARMv8.2-A FP16 support that can be enabled through the +fp16 extension. */
++#define TARGET_FP_F16INST (TARGET_FLOAT && AARCH64_ISA_F16)
++#define TARGET_SIMD_F16INST (TARGET_SIMD && AARCH64_ISA_F16)
++
++/* ARMv8.3-A features. */
++#define TARGET_ARMV8_3 (AARCH64_ISA_V8_3)
++
+ /* Make sure this is always defined so we don't have to check for ifdefs
+ but rather use normal ifs. */
+ #ifndef TARGET_FIX_ERR_A53_835769_DEFAULT
+@@ -193,7 +212,7 @@ extern unsigned aarch64_architecture_version;
+ ((aarch64_fix_a53_err843419 == 2) \
+ ? TARGET_FIX_ERR_A53_843419_DEFAULT : aarch64_fix_a53_err843419)
+
+-/* ARMv8.1 Adv.SIMD support. */
++/* ARMv8.1-A Adv.SIMD support. */
+ #define TARGET_SIMD_RDMA (TARGET_SIMD && AARCH64_ISA_RDMA)
+
+ /* Standard register usage. */
+@@ -539,11 +558,14 @@ struct GTY (()) aarch64_frame
+ STACK_BOUNDARY. */
+ HOST_WIDE_INT saved_varargs_size;
+
++ /* The size of the saved callee-save int/FP registers. */
++
+ HOST_WIDE_INT saved_regs_size;
+- /* Padding if needed after the all the callee save registers have
+- been saved. */
+- HOST_WIDE_INT padding0;
+- HOST_WIDE_INT hardfp_offset; /* HARD_FRAME_POINTER_REGNUM */
++
++ /* Offset from the base of the frame (incomming SP) to the
++ top of the locals area. This value is always a multiple of
++ STACK_BOUNDARY. */
++ HOST_WIDE_INT locals_offset;
+
+ /* Offset from the base of the frame (incomming SP) to the
+ hard_frame_pointer. This value is always a multiple of
+@@ -553,12 +575,25 @@ struct GTY (()) aarch64_frame
+ /* The size of the frame. This value is the offset from base of the
+ * frame (incomming SP) to the stack_pointer. This value is always
+ * a multiple of STACK_BOUNDARY. */
++ HOST_WIDE_INT frame_size;
++
++ /* The size of the initial stack adjustment before saving callee-saves. */
++ HOST_WIDE_INT initial_adjust;
++
++ /* The writeback value when pushing callee-save registers.
++ It is zero when no push is used. */
++ HOST_WIDE_INT callee_adjust;
++
++ /* The offset from SP to the callee-save registers after initial_adjust.
++ It may be non-zero if no push is used (ie. callee_adjust == 0). */
++ HOST_WIDE_INT callee_offset;
++
++ /* The size of the stack adjustment after saving callee-saves. */
++ HOST_WIDE_INT final_adjust;
+
+ unsigned wb_candidate1;
+ unsigned wb_candidate2;
+
+- HOST_WIDE_INT frame_size;
+-
+ bool laid_out;
+ };
+
+@@ -652,21 +687,6 @@ typedef struct
+
+ #define CONSTANT_ADDRESS_P(X) aarch64_constant_address_p(X)
+
+-/* Try a machine-dependent way of reloading an illegitimate address
+- operand. If we find one, push the reload and jump to WIN. This
+- macro is used in only one place: `find_reloads_address' in reload.c. */
+-
+-#define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, IND_L, WIN) \
+-do { \
+- rtx new_x = aarch64_legitimize_reload_address (&(X), MODE, OPNUM, TYPE, \
+- IND_L); \
+- if (new_x) \
+- { \
+- X = new_x; \
+- goto WIN; \
+- } \
+-} while (0)
+-
+ #define REGNO_OK_FOR_BASE_P(REGNO) \
+ aarch64_regno_ok_for_base_p (REGNO, true)
+
+@@ -722,7 +742,12 @@ do { \
+ #define USE_STORE_PRE_INCREMENT(MODE) 0
+ #define USE_STORE_PRE_DECREMENT(MODE) 0
+
+-/* ?? #define WORD_REGISTER_OPERATIONS */
++/* WORD_REGISTER_OPERATIONS does not hold for AArch64.
++ The assigned word_mode is DImode but operations narrower than SImode
++ behave as 32-bit operations if using the W-form of the registers rather
++ than as word_mode (64-bit) operations as WORD_REGISTER_OPERATIONS
++ expects. */
++#define WORD_REGISTER_OPERATIONS 0
+
+ /* Define if loading from memory in MODE, an integral mode narrower than
+ BITS_PER_WORD will either zero-extend or sign-extend. The value of this
+@@ -842,10 +867,7 @@ do { \
+ extern void __aarch64_sync_cache_range (void *, void *); \
+ __aarch64_sync_cache_range (beg, end)
+
+-#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
+- aarch64_cannot_change_mode_class (FROM, TO, CLASS)
+-
+-#define SHIFT_COUNT_TRUNCATED !TARGET_SIMD
++#define SHIFT_COUNT_TRUNCATED (!TARGET_SIMD)
+
+ /* Choose appropriate mode for caller saves, so we do the minimum
+ required size of load/store. */
+--- a/src/gcc/config/aarch64/aarch64.md
++++ b/src/gcc/config/aarch64/aarch64.md
+@@ -75,6 +75,8 @@
+ UNSPEC_CRC32H
+ UNSPEC_CRC32W
+ UNSPEC_CRC32X
++ UNSPEC_FCVTZS
++ UNSPEC_FCVTZU
+ UNSPEC_URECPE
+ UNSPEC_FRECPE
+ UNSPEC_FRECPS
+@@ -105,6 +107,7 @@
+ UNSPEC_NOP
+ UNSPEC_PRLG_STK
+ UNSPEC_RBIT
++ UNSPEC_SCVTF
+ UNSPEC_SISD_NEG
+ UNSPEC_SISD_SSHL
+ UNSPEC_SISD_USHL
+@@ -122,6 +125,7 @@
+ UNSPEC_TLSLE24
+ UNSPEC_TLSLE32
+ UNSPEC_TLSLE48
++ UNSPEC_UCVTF
+ UNSPEC_USHL_2S
+ UNSPEC_VSTRUCTDUMMY
+ UNSPEC_SP_SET
+@@ -837,13 +841,6 @@
+ || aarch64_is_noplt_call_p (callee)))
+ XEXP (operands[0], 0) = force_reg (Pmode, callee);
+
+- /* FIXME: This is a band-aid. Need to analyze why expand_expr_addr_expr
+- is generating an SImode symbol reference. See PR 64971. */
+- if (TARGET_ILP32
+- && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF
+- && GET_MODE (XEXP (operands[0], 0)) == SImode)
+- XEXP (operands[0], 0) = convert_memory_address (Pmode,
+- XEXP (operands[0], 0));
+ if (operands[2] == NULL_RTX)
+ operands[2] = const0_rtx;
+
+@@ -875,14 +872,6 @@
+ || aarch64_is_noplt_call_p (callee)))
+ XEXP (operands[1], 0) = force_reg (Pmode, callee);
+
+- /* FIXME: This is a band-aid. Need to analyze why expand_expr_addr_expr
+- is generating an SImode symbol reference. See PR 64971. */
+- if (TARGET_ILP32
+- && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
+- && GET_MODE (XEXP (operands[1], 0)) == SImode)
+- XEXP (operands[1], 0) = convert_memory_address (Pmode,
+- XEXP (operands[1], 0));
+-
+ if (operands[3] == NULL_RTX)
+ operands[3] = const0_rtx;
+
+@@ -1003,6 +992,11 @@
+ (match_operand:GPI 1 "general_operand" ""))]
+ ""
+ "
++ if (MEM_P (operands[0]) && CONST_INT_P (operands[1])
++ && <MODE>mode == DImode
++ && aarch64_split_dimode_const_store (operands[0], operands[1]))
++ DONE;
++
+ if (GET_CODE (operands[0]) == MEM && operands[1] != const0_rtx)
+ operands[1] = force_reg (<MODE>mode, operands[1]);
+
+@@ -1160,11 +1154,12 @@
+ )
+
+ (define_insn "*movhf_aarch64"
+- [(set (match_operand:HF 0 "nonimmediate_operand" "=w, ?r,w,w,m,r,m ,r")
+- (match_operand:HF 1 "general_operand" "?rY, w,w,m,w,m,rY,r"))]
++ [(set (match_operand:HF 0 "nonimmediate_operand" "=w,w ,?r,w,w,m,r,m ,r")
++ (match_operand:HF 1 "general_operand" "Y ,?rY, w,w,m,w,m,rY,r"))]
+ "TARGET_FLOAT && (register_operand (operands[0], HFmode)
+ || aarch64_reg_or_fp_zero (operands[1], HFmode))"
+ "@
++ movi\\t%0.4h, #0
+ mov\\t%0.h[0], %w1
+ umov\\t%w0, %1.h[0]
+ mov\\t%0.h[0], %1.h[0]
+@@ -1173,18 +1168,18 @@
+ ldrh\\t%w0, %1
+ strh\\t%w1, %0
+ mov\\t%w0, %w1"
+- [(set_attr "type" "neon_from_gp,neon_to_gp,neon_move,\
++ [(set_attr "type" "neon_move,neon_from_gp,neon_to_gp,neon_move,\
+ f_loads,f_stores,load1,store1,mov_reg")
+- (set_attr "simd" "yes,yes,yes,*,*,*,*,*")
+- (set_attr "fp" "*,*,*,yes,yes,*,*,*")]
++ (set_attr "simd" "yes,yes,yes,yes,*,*,*,*,*")]
+ )
+
+ (define_insn "*movsf_aarch64"
+- [(set (match_operand:SF 0 "nonimmediate_operand" "=w, ?r,w,w ,w,m,r,m ,r")
+- (match_operand:SF 1 "general_operand" "?rY, w,w,Ufc,m,w,m,rY,r"))]
++ [(set (match_operand:SF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w,m,r,m ,r")
++ (match_operand:SF 1 "general_operand" "Y ,?rY, w,w,Ufc,m,w,m,rY,r"))]
+ "TARGET_FLOAT && (register_operand (operands[0], SFmode)
+ || aarch64_reg_or_fp_zero (operands[1], SFmode))"
+ "@
++ movi\\t%0.2s, #0
+ fmov\\t%s0, %w1
+ fmov\\t%w0, %s1
+ fmov\\t%s0, %s1
+@@ -1194,16 +1189,18 @@
+ ldr\\t%w0, %1
+ str\\t%w1, %0
+ mov\\t%w0, %w1"
+- [(set_attr "type" "f_mcr,f_mrc,fmov,fconsts,\
+- f_loads,f_stores,load1,store1,mov_reg")]
++ [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconsts,\
++ f_loads,f_stores,load1,store1,mov_reg")
++ (set_attr "simd" "yes,*,*,*,*,*,*,*,*,*")]
+ )
+
+ (define_insn "*movdf_aarch64"
+- [(set (match_operand:DF 0 "nonimmediate_operand" "=w, ?r,w,w ,w,m,r,m ,r")
+- (match_operand:DF 1 "general_operand" "?rY, w,w,Ufc,m,w,m,rY,r"))]
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w,m,r,m ,r")
++ (match_operand:DF 1 "general_operand" "Y ,?rY, w,w,Ufc,m,w,m,rY,r"))]
+ "TARGET_FLOAT && (register_operand (operands[0], DFmode)
+ || aarch64_reg_or_fp_zero (operands[1], DFmode))"
+ "@
++ movi\\t%d0, #0
+ fmov\\t%d0, %x1
+ fmov\\t%x0, %d1
+ fmov\\t%d0, %d1
+@@ -1213,8 +1210,9 @@
+ ldr\\t%x0, %1
+ str\\t%x1, %0
+ mov\\t%x0, %x1"
+- [(set_attr "type" "f_mcr,f_mrc,fmov,fconstd,\
+- f_loadd,f_stored,load1,store1,mov_reg")]
++ [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconstd,\
++ f_loadd,f_stored,load1,store1,mov_reg")
++ (set_attr "simd" "yes,*,*,*,*,*,*,*,*,*")]
+ )
+
+ (define_insn "*movtf_aarch64"
+@@ -1239,7 +1237,6 @@
+ [(set_attr "type" "logic_reg,multiple,f_mcr,f_mrc,neon_move_q,f_mcr,\
+ f_loadd,f_stored,load2,store2,store2")
+ (set_attr "length" "4,8,8,8,4,4,4,4,4,4,4")
+- (set_attr "fp" "*,*,yes,yes,*,yes,yes,yes,*,*,*")
+ (set_attr "simd" "yes,*,*,*,yes,*,*,*,*,*,*")]
+ )
+
+@@ -1552,10 +1549,10 @@
+ (zero_extend:GPI (match_operand:SHORT 1 "nonimmediate_operand" "r,m,m")))]
+ ""
+ "@
+- uxt<SHORT:size>\t%<GPI:w>0, %w1
++ and\t%<GPI:w>0, %<GPI:w>1, <SHORT:short_mask>
+ ldr<SHORT:size>\t%w0, %1
+ ldr\t%<SHORT:size>0, %1"
+- [(set_attr "type" "extend,load1,load1")]
++ [(set_attr "type" "logic_imm,load1,load1")]
+ )
+
+ (define_expand "<optab>qihi2"
+@@ -1564,16 +1561,26 @@
+ ""
+ )
+
+-(define_insn "*<optab>qihi2_aarch64"
++(define_insn "*extendqihi2_aarch64"
+ [(set (match_operand:HI 0 "register_operand" "=r,r")
+- (ANY_EXTEND:HI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
++ (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
+ ""
+ "@
+- <su>xtb\t%w0, %w1
+- <ldrxt>b\t%w0, %1"
++ sxtb\t%w0, %w1
++ ldrsb\t%w0, %1"
+ [(set_attr "type" "extend,load1")]
+ )
+
++(define_insn "*zero_extendqihi2_aarch64"
++ [(set (match_operand:HI 0 "register_operand" "=r,r")
++ (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
++ ""
++ "@
++ and\t%w0, %w1, 255
++ ldrb\t%w0, %1"
++ [(set_attr "type" "logic_imm,load1")]
++)
++
+ ;; -------------------------------------------------------------------
+ ;; Simple arithmetic
+ ;; -------------------------------------------------------------------
+@@ -1585,25 +1592,16 @@
+ (match_operand:GPI 2 "aarch64_pluslong_operand" "")))]
+ ""
+ {
+- if (aarch64_pluslong_strict_immedate (operands[2], <MODE>mode))
+- {
+- /* Give CSE the opportunity to share this constant across additions. */
+- if (!cse_not_expected && can_create_pseudo_p ())
+- operands[2] = force_reg (<MODE>mode, operands[2]);
+-
+- /* Split will refuse to operate on a modification to the stack pointer.
+- Aid the prologue and epilogue expanders by splitting this now. */
+- else if (reload_completed && operands[0] == stack_pointer_rtx)
+- {
+- HOST_WIDE_INT i = INTVAL (operands[2]);
+- HOST_WIDE_INT s = (i >= 0 ? i & 0xfff : -(-i & 0xfff));
+- emit_insn (gen_rtx_SET (operands[0],
+- gen_rtx_PLUS (<MODE>mode, operands[1],
+- GEN_INT (i - s))));
+- operands[1] = operands[0];
+- operands[2] = GEN_INT (s);
+- }
+- }
++ /* If operands[1] is a subreg extract the inner RTX. */
++ rtx op1 = REG_P (operands[1]) ? operands[1] : SUBREG_REG (operands[1]);
++
++ /* If the constant is too large for a single instruction and isn't frame
++ based, split off the immediate so it is available for CSE. */
++ if (!aarch64_plus_immediate (operands[2], <MODE>mode)
++ && can_create_pseudo_p ()
++ && (!REG_P (op1)
++ || !REGNO_PTR_FRAME_P (REGNO (op1))))
++ operands[2] = force_reg (<MODE>mode, operands[2]);
+ })
+
+ (define_insn "*add<mode>3_aarch64"
+@@ -1765,7 +1763,7 @@
+ "aarch64_zero_extend_const_eq (<DWI>mode, operands[2],
+ <MODE>mode, operands[1])"
+ "@
+- cmn\\t%<w>0, %<w>1
++ cmn\\t%<w>0, %1
+ cmp\\t%<w>0, #%n1"
+ [(set_attr "type" "alus_imm")]
+ )
+@@ -1797,11 +1795,11 @@
+ "aarch64_zero_extend_const_eq (<DWI>mode, operands[3],
+ <MODE>mode, operands[2])"
+ "@
+- adds\\t%<w>0, %<w>1, %<w>2
++ adds\\t%<w>0, %<w>1, %2
+ subs\\t%<w>0, %<w>1, #%n2"
+ [(set_attr "type" "alus_imm")]
+ )
+-
++
+ (define_insn "add<mode>3_compareC"
+ [(set (reg:CC_C CC_REGNUM)
+ (ne:CC_C
+@@ -3404,7 +3402,9 @@
+ (LOGICAL:SI (match_operand:SI 1 "register_operand" "%r,r")
+ (match_operand:SI 2 "aarch64_logical_operand" "r,K"))))]
+ ""
+- "<logical>\\t%w0, %w1, %w2"
++ "@
++ <logical>\\t%w0, %w1, %w2
++ <logical>\\t%w0, %w1, %2"
+ [(set_attr "type" "logic_reg,logic_imm")]
+ )
+
+@@ -3417,7 +3417,9 @@
+ (set (match_operand:GPI 0 "register_operand" "=r,r")
+ (and:GPI (match_dup 1) (match_dup 2)))]
+ ""
+- "ands\\t%<w>0, %<w>1, %<w>2"
++ "@
++ ands\\t%<w>0, %<w>1, %<w>2
++ ands\\t%<w>0, %<w>1, %2"
+ [(set_attr "type" "logics_reg,logics_imm")]
+ )
+
+@@ -3431,7 +3433,9 @@
+ (set (match_operand:DI 0 "register_operand" "=r,r")
+ (zero_extend:DI (and:SI (match_dup 1) (match_dup 2))))]
+ ""
+- "ands\\t%w0, %w1, %w2"
++ "@
++ ands\\t%w0, %w1, %w2
++ ands\\t%w0, %w1, %2"
+ [(set_attr "type" "logics_reg,logics_imm")]
+ )
+
+@@ -3741,6 +3745,39 @@
+ }
+ )
+
++;; Pop count be done via the "CNT" instruction in AdvSIMD.
++;;
++;; MOV v.1d, x0
++;; CNT v1.8b, v.8b
++;; ADDV b2, v1.8b
++;; MOV w0, v2.b[0]
++
++(define_expand "popcount<mode>2"
++ [(match_operand:GPI 0 "register_operand")
++ (match_operand:GPI 1 "register_operand")]
++ "TARGET_SIMD"
++{
++ rtx v = gen_reg_rtx (V8QImode);
++ rtx v1 = gen_reg_rtx (V8QImode);
++ rtx r = gen_reg_rtx (QImode);
++ rtx in = operands[1];
++ rtx out = operands[0];
++ if(<MODE>mode == SImode)
++ {
++ rtx tmp;
++ tmp = gen_reg_rtx (DImode);
++ /* If we have SImode, zero extend to DImode, pop count does
++ not change if we have extra zeros. */
++ emit_insn (gen_zero_extendsidi2 (tmp, in));
++ in = tmp;
++ }
++ emit_move_insn (v, gen_lowpart (V8QImode, in));
++ emit_insn (gen_popcountv8qi2 (v1, v));
++ emit_insn (gen_reduc_plus_scal_v8qi (r, v1));
++ emit_insn (gen_zero_extendqi<mode>2 (out, r));
++ DONE;
++})
++
+ (define_insn "clrsb<mode>2"
+ [(set (match_operand:GPI 0 "register_operand" "=r")
+ (clrsb:GPI (match_operand:GPI 1 "register_operand" "r")))]
+@@ -3757,16 +3794,23 @@
+ [(set_attr "type" "rbit")]
+ )
+
+-(define_expand "ctz<mode>2"
+- [(match_operand:GPI 0 "register_operand")
+- (match_operand:GPI 1 "register_operand")]
++;; Split after reload into RBIT + CLZ. Since RBIT is represented as an UNSPEC
++;; it is unlikely to fold with any other operation, so keep this as a CTZ
++;; expression and split after reload to enable scheduling them apart if
++;; needed.
++
++(define_insn_and_split "ctz<mode>2"
++ [(set (match_operand:GPI 0 "register_operand" "=r")
++ (ctz:GPI (match_operand:GPI 1 "register_operand" "r")))]
+ ""
+- {
+- emit_insn (gen_rbit<mode>2 (operands[0], operands[1]));
+- emit_insn (gen_clz<mode>2 (operands[0], operands[0]));
+- DONE;
+- }
+-)
++ "#"
++ "reload_completed"
++ [(const_int 0)]
++ "
++ emit_insn (gen_rbit<mode>2 (operands[0], operands[1]));
++ emit_insn (gen_clz<mode>2 (operands[0], operands[0]));
++ DONE;
++")
+
+ (define_insn "*and<mode>_compare0"
+ [(set (reg:CC_NZ CC_REGNUM)
+@@ -3778,6 +3822,18 @@
+ [(set_attr "type" "alus_imm")]
+ )
+
++(define_insn "*ands<mode>_compare0"
++ [(set (reg:CC_NZ CC_REGNUM)
++ (compare:CC_NZ
++ (zero_extend:GPI (match_operand:SHORT 1 "register_operand" "r"))
++ (const_int 0)))
++ (set (match_operand:GPI 0 "register_operand" "=r")
++ (zero_extend:GPI (match_dup 1)))]
++ ""
++ "ands\\t%<GPI:w>0, %<GPI:w>1, <short_mask>"
++ [(set_attr "type" "alus_imm")]
++)
++
+ (define_insn "*and<mode>3nr_compare0"
+ [(set (reg:CC_NZ CC_REGNUM)
+ (compare:CC_NZ
+@@ -3785,7 +3841,9 @@
+ (match_operand:GPI 1 "aarch64_logical_operand" "r,<lconst>"))
+ (const_int 0)))]
+ ""
+- "tst\\t%<w>0, %<w>1"
++ "@
++ tst\\t%<w>0, %<w>1
++ tst\\t%<w>0, %1"
+ [(set_attr "type" "logics_reg,logics_imm")]
+ )
+
+@@ -3851,22 +3909,16 @@
+ (define_expand "ashl<mode>3"
+ [(set (match_operand:SHORT 0 "register_operand")
+ (ashift:SHORT (match_operand:SHORT 1 "register_operand")
+- (match_operand:QI 2 "nonmemory_operand")))]
++ (match_operand:QI 2 "const_int_operand")))]
+ ""
+ {
+- if (CONST_INT_P (operands[2]))
+- {
+- operands[2] = GEN_INT (INTVAL (operands[2])
+- & (GET_MODE_BITSIZE (<MODE>mode) - 1));
++ operands[2] = GEN_INT (INTVAL (operands[2]) & GET_MODE_MASK (<MODE>mode));
+
+- if (operands[2] == const0_rtx)
+- {
+- emit_insn (gen_mov<mode> (operands[0], operands[1]));
+- DONE;
+- }
++ if (operands[2] == const0_rtx)
++ {
++ emit_insn (gen_mov<mode> (operands[0], operands[1]));
++ DONE;
+ }
+- else
+- FAIL;
+ }
+ )
+
+@@ -3915,33 +3967,35 @@
+
+ ;; Logical left shift using SISD or Integer instruction
+ (define_insn "*aarch64_ashl_sisd_or_int_<mode>3"
+- [(set (match_operand:GPI 0 "register_operand" "=r,w,w")
+- (ashift:GPI
+- (match_operand:GPI 1 "register_operand" "r,w,w")
+- (match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>" "rUs<cmode>,Us<cmode>,w")))]
++ [(set (match_operand:GPI 0 "register_operand" "=r,r,w,w")
++ (ashift:GPI
++ (match_operand:GPI 1 "register_operand" "r,r,w,w")
++ (match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>" "Us<cmode>,r,Us<cmode>,w")))]
+ ""
+ "@
++ lsl\t%<w>0, %<w>1, %2
+ lsl\t%<w>0, %<w>1, %<w>2
+ shl\t%<rtn>0<vas>, %<rtn>1<vas>, %2
+ ushl\t%<rtn>0<vas>, %<rtn>1<vas>, %<rtn>2<vas>"
+- [(set_attr "simd" "no,yes,yes")
+- (set_attr "type" "shift_reg,neon_shift_imm<q>, neon_shift_reg<q>")]
++ [(set_attr "simd" "no,no,yes,yes")
++ (set_attr "type" "bfx,shift_reg,neon_shift_imm<q>, neon_shift_reg<q>")]
+ )
+
+ ;; Logical right shift using SISD or Integer instruction
+ (define_insn "*aarch64_lshr_sisd_or_int_<mode>3"
+- [(set (match_operand:GPI 0 "register_operand" "=r,w,&w,&w")
+- (lshiftrt:GPI
+- (match_operand:GPI 1 "register_operand" "r,w,w,w")
+- (match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>" "rUs<cmode>,Us<cmode>,w,0")))]
++ [(set (match_operand:GPI 0 "register_operand" "=r,r,w,&w,&w")
++ (lshiftrt:GPI
++ (match_operand:GPI 1 "register_operand" "r,r,w,w,w")
++ (match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>" "Us<cmode>,r,Us<cmode>,w,0")))]
+ ""
+ "@
++ lsr\t%<w>0, %<w>1, %2
+ lsr\t%<w>0, %<w>1, %<w>2
+ ushr\t%<rtn>0<vas>, %<rtn>1<vas>, %2
+ #
+ #"
+- [(set_attr "simd" "no,yes,yes,yes")
+- (set_attr "type" "shift_reg,neon_shift_imm<q>,neon_shift_reg<q>,neon_shift_reg<q>")]
++ [(set_attr "simd" "no,no,yes,yes,yes")
++ (set_attr "type" "bfx,shift_reg,neon_shift_imm<q>,neon_shift_reg<q>,neon_shift_reg<q>")]
+ )
+
+ (define_split
+@@ -3976,18 +4030,19 @@
+
+ ;; Arithmetic right shift using SISD or Integer instruction
+ (define_insn "*aarch64_ashr_sisd_or_int_<mode>3"
+- [(set (match_operand:GPI 0 "register_operand" "=r,w,&w,&w")
++ [(set (match_operand:GPI 0 "register_operand" "=r,r,w,&w,&w")
+ (ashiftrt:GPI
+- (match_operand:GPI 1 "register_operand" "r,w,w,w")
+- (match_operand:QI 2 "aarch64_reg_or_shift_imm_di" "rUs<cmode>,Us<cmode>,w,0")))]
++ (match_operand:GPI 1 "register_operand" "r,r,w,w,w")
++ (match_operand:QI 2 "aarch64_reg_or_shift_imm_di" "Us<cmode>,r,Us<cmode>,w,0")))]
+ ""
+ "@
++ asr\t%<w>0, %<w>1, %2
+ asr\t%<w>0, %<w>1, %<w>2
+ sshr\t%<rtn>0<vas>, %<rtn>1<vas>, %2
+ #
+ #"
+- [(set_attr "simd" "no,yes,yes,yes")
+- (set_attr "type" "shift_reg,neon_shift_imm<q>,neon_shift_reg<q>,neon_shift_reg<q>")]
++ [(set_attr "simd" "no,no,yes,yes,yes")
++ (set_attr "type" "bfx,shift_reg,neon_shift_imm<q>,neon_shift_reg<q>,neon_shift_reg<q>")]
+ )
+
+ (define_split
+@@ -4079,21 +4134,25 @@
+ [(set (match_operand:GPI 0 "register_operand" "=r,r")
+ (rotatert:GPI
+ (match_operand:GPI 1 "register_operand" "r,r")
+- (match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>" "r,Us<cmode>")))]
++ (match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>" "Us<cmode>,r")))]
+ ""
+- "ror\\t%<w>0, %<w>1, %<w>2"
+- [(set_attr "type" "shift_reg, rotate_imm")]
++ "@
++ ror\\t%<w>0, %<w>1, %2
++ ror\\t%<w>0, %<w>1, %<w>2"
++ [(set_attr "type" "rotate_imm,shift_reg")]
+ )
+
+ ;; zero_extend version of above
+ (define_insn "*<optab>si3_insn_uxtw"
+- [(set (match_operand:DI 0 "register_operand" "=r")
++ [(set (match_operand:DI 0 "register_operand" "=r,r")
+ (zero_extend:DI (SHIFT:SI
+- (match_operand:SI 1 "register_operand" "r")
+- (match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "rUss"))))]
++ (match_operand:SI 1 "register_operand" "r,r")
++ (match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "Uss,r"))))]
+ ""
+- "<shift>\\t%w0, %w1, %w2"
+- [(set_attr "type" "shift_reg")]
++ "@
++ <shift>\\t%w0, %w1, %2
++ <shift>\\t%w0, %w1, %w2"
++ [(set_attr "type" "bfx,shift_reg")]
+ )
+
+ (define_insn "*<optab><mode>3_insn"
+@@ -4105,7 +4164,7 @@
+ operands[3] = GEN_INT (<sizen> - UINTVAL (operands[2]));
+ return "<bfshift>\t%w0, %w1, %2, %3";
+ }
+- [(set_attr "type" "bfm")]
++ [(set_attr "type" "bfx")]
+ )
+
+ (define_insn "*extr<mode>5_insn"
+@@ -4117,7 +4176,7 @@
+ "UINTVAL (operands[3]) < GET_MODE_BITSIZE (<MODE>mode) &&
+ (UINTVAL (operands[3]) + UINTVAL (operands[4]) == GET_MODE_BITSIZE (<MODE>mode))"
+ "extr\\t%<w>0, %<w>1, %<w>2, %4"
+- [(set_attr "type" "shift_imm")]
++ [(set_attr "type" "rotate_imm")]
+ )
+
+ ;; There are no canonicalisation rules for ashift and lshiftrt inside an ior
+@@ -4132,7 +4191,7 @@
+ && (UINTVAL (operands[3]) + UINTVAL (operands[4])
+ == GET_MODE_BITSIZE (<MODE>mode))"
+ "extr\\t%<w>0, %<w>1, %<w>2, %4"
+- [(set_attr "type" "shift_imm")]
++ [(set_attr "type" "rotate_imm")]
+ )
+
+ ;; zero_extend version of the above
+@@ -4146,7 +4205,7 @@
+ "UINTVAL (operands[3]) < 32 &&
+ (UINTVAL (operands[3]) + UINTVAL (operands[4]) == 32)"
+ "extr\\t%w0, %w1, %w2, %4"
+- [(set_attr "type" "shift_imm")]
++ [(set_attr "type" "rotate_imm")]
+ )
+
+ (define_insn "*extrsi5_insn_uxtw_alt"
+@@ -4159,7 +4218,7 @@
+ "UINTVAL (operands[3]) < 32 &&
+ (UINTVAL (operands[3]) + UINTVAL (operands[4]) == 32)"
+ "extr\\t%w0, %w1, %w2, %4"
+- [(set_attr "type" "shift_imm")]
++ [(set_attr "type" "rotate_imm")]
+ )
+
+ (define_insn "*ror<mode>3_insn"
+@@ -4198,7 +4257,7 @@
+ operands[3] = GEN_INT (<SHORT:sizen> - UINTVAL (operands[2]));
+ return "<su>bfiz\t%<GPI:w>0, %<GPI:w>1, %2, %3";
+ }
+- [(set_attr "type" "bfm")]
++ [(set_attr "type" "bfx")]
+ )
+
+ (define_insn "*zero_extend<GPI:mode>_lshr<SHORT:mode>"
+@@ -4211,7 +4270,7 @@
+ operands[3] = GEN_INT (<SHORT:sizen> - UINTVAL (operands[2]));
+ return "ubfx\t%<GPI:w>0, %<GPI:w>1, %2, %3";
+ }
+- [(set_attr "type" "bfm")]
++ [(set_attr "type" "bfx")]
+ )
+
+ (define_insn "*extend<GPI:mode>_ashr<SHORT:mode>"
+@@ -4224,7 +4283,7 @@
+ operands[3] = GEN_INT (<SHORT:sizen> - UINTVAL (operands[2]));
+ return "sbfx\\t%<GPI:w>0, %<GPI:w>1, %2, %3";
+ }
+- [(set_attr "type" "bfm")]
++ [(set_attr "type" "bfx")]
+ )
+
+ ;; -------------------------------------------------------------------
+@@ -4256,7 +4315,27 @@
+ "IN_RANGE (INTVAL (operands[2]) + INTVAL (operands[3]),
+ 1, GET_MODE_BITSIZE (<MODE>mode) - 1)"
+ "<su>bfx\\t%<w>0, %<w>1, %3, %2"
+- [(set_attr "type" "bfm")]
++ [(set_attr "type" "bfx")]
++)
++
++;; When the bit position and width add up to 32 we can use a W-reg LSR
++;; instruction taking advantage of the implicit zero-extension of the X-reg.
++(define_split
++ [(set (match_operand:DI 0 "register_operand")
++ (zero_extract:DI (match_operand:DI 1 "register_operand")
++ (match_operand 2
++ "aarch64_simd_shift_imm_offset_di")
++ (match_operand 3
++ "aarch64_simd_shift_imm_di")))]
++ "IN_RANGE (INTVAL (operands[2]) + INTVAL (operands[3]), 1,
++ GET_MODE_BITSIZE (DImode) - 1)
++ && (INTVAL (operands[2]) + INTVAL (operands[3]))
++ == GET_MODE_BITSIZE (SImode)"
++ [(set (match_dup 0)
++ (zero_extend:DI (lshiftrt:SI (match_dup 4) (match_dup 3))))]
++ {
++ operands[4] = gen_lowpart (SImode, operands[1]);
++ }
+ )
+
+ ;; Bitfield Insert (insv)
+@@ -4338,7 +4417,7 @@
+ : GEN_INT (<GPI:sizen> - UINTVAL (operands[2]));
+ return "<su>bfiz\t%<GPI:w>0, %<GPI:w>1, %2, %3";
+ }
+- [(set_attr "type" "bfm")]
++ [(set_attr "type" "bfx")]
+ )
+
+ ;; XXX We should match (any_extend (ashift)) here, like (and (ashift)) below
+@@ -4348,11 +4427,27 @@
+ (and:GPI (ashift:GPI (match_operand:GPI 1 "register_operand" "r")
+ (match_operand 2 "const_int_operand" "n"))
+ (match_operand 3 "const_int_operand" "n")))]
+- "(INTVAL (operands[2]) < (<GPI:sizen>))
+- && exact_log2 ((INTVAL (operands[3]) >> INTVAL (operands[2])) + 1) >= 0
+- && (INTVAL (operands[3]) & ((1 << INTVAL (operands[2])) - 1)) == 0"
++ "aarch64_mask_and_shift_for_ubfiz_p (<MODE>mode, operands[3], operands[2])"
+ "ubfiz\\t%<w>0, %<w>1, %2, %P3"
+- [(set_attr "type" "bfm")]
++ [(set_attr "type" "bfx")]
++)
++
++;; When the bit position and width of the equivalent extraction add up to 32
++;; we can use a W-reg LSL instruction taking advantage of the implicit
++;; zero-extension of the X-reg.
++(define_split
++ [(set (match_operand:DI 0 "register_operand")
++ (and:DI (ashift:DI (match_operand:DI 1 "register_operand")
++ (match_operand 2 "const_int_operand"))
++ (match_operand 3 "const_int_operand")))]
++ "aarch64_mask_and_shift_for_ubfiz_p (DImode, operands[3], operands[2])
++ && (INTVAL (operands[2]) + popcount_hwi (INTVAL (operands[3])))
++ == GET_MODE_BITSIZE (SImode)"
++ [(set (match_dup 0)
++ (zero_extend:DI (ashift:SI (match_dup 4) (match_dup 2))))]
++ {
++ operands[4] = gen_lowpart (SImode, operands[1]);
++ }
+ )
+
+ (define_insn "bswap<mode>2"
+@@ -4420,22 +4515,23 @@
+ ;; Expands to btrunc, ceil, floor, nearbyint, rint, round, frintn.
+
+ (define_insn "<frint_pattern><mode>2"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (unspec:GPF [(match_operand:GPF 1 "register_operand" "w")]
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (unspec:GPF_F16 [(match_operand:GPF_F16 1 "register_operand" "w")]
+ FRINT))]
+ "TARGET_FLOAT"
+ "frint<frint_suffix>\\t%<s>0, %<s>1"
+- [(set_attr "type" "f_rint<s>")]
++ [(set_attr "type" "f_rint<stype>")]
+ )
+
+ ;; frcvt floating-point round to integer and convert standard patterns.
+ ;; Expands to lbtrunc, lceil, lfloor, lround.
+-(define_insn "l<fcvt_pattern><su_optab><GPF:mode><GPI:mode>2"
++(define_insn "l<fcvt_pattern><su_optab><GPF_F16:mode><GPI:mode>2"
+ [(set (match_operand:GPI 0 "register_operand" "=r")
+- (FIXUORS:GPI (unspec:GPF [(match_operand:GPF 1 "register_operand" "w")]
+- FCVT)))]
++ (FIXUORS:GPI
++ (unspec:GPF_F16 [(match_operand:GPF_F16 1 "register_operand" "w")]
++ FCVT)))]
+ "TARGET_FLOAT"
+- "fcvt<frint_suffix><su>\\t%<GPI:w>0, %<GPF:s>1"
++ "fcvt<frint_suffix><su>\\t%<GPI:w>0, %<GPF_F16:s>1"
+ [(set_attr "type" "f_cvtf2i")]
+ )
+
+@@ -4461,23 +4557,24 @@
+ ;; fma - no throw
+
+ (define_insn "fma<mode>4"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (fma:GPF (match_operand:GPF 1 "register_operand" "w")
+- (match_operand:GPF 2 "register_operand" "w")
+- (match_operand:GPF 3 "register_operand" "w")))]
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (fma:GPF_F16 (match_operand:GPF_F16 1 "register_operand" "w")
++ (match_operand:GPF_F16 2 "register_operand" "w")
++ (match_operand:GPF_F16 3 "register_operand" "w")))]
+ "TARGET_FLOAT"
+ "fmadd\\t%<s>0, %<s>1, %<s>2, %<s>3"
+- [(set_attr "type" "fmac<s>")]
++ [(set_attr "type" "fmac<stype>")]
+ )
+
+ (define_insn "fnma<mode>4"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (fma:GPF (neg:GPF (match_operand:GPF 1 "register_operand" "w"))
+- (match_operand:GPF 2 "register_operand" "w")
+- (match_operand:GPF 3 "register_operand" "w")))]
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (fma:GPF_F16
++ (neg:GPF_F16 (match_operand:GPF_F16 1 "register_operand" "w"))
++ (match_operand:GPF_F16 2 "register_operand" "w")
++ (match_operand:GPF_F16 3 "register_operand" "w")))]
+ "TARGET_FLOAT"
+ "fmsub\\t%<s>0, %<s>1, %<s>2, %<s>3"
+- [(set_attr "type" "fmac<s>")]
++ [(set_attr "type" "fmac<stype>")]
+ )
+
+ (define_insn "fms<mode>4"
+@@ -4563,19 +4660,11 @@
+ [(set_attr "type" "f_cvt")]
+ )
+
+-(define_insn "fix_trunc<GPF:mode><GPI:mode>2"
+- [(set (match_operand:GPI 0 "register_operand" "=r")
+- (fix:GPI (match_operand:GPF 1 "register_operand" "w")))]
+- "TARGET_FLOAT"
+- "fcvtzs\\t%<GPI:w>0, %<GPF:s>1"
+- [(set_attr "type" "f_cvtf2i")]
+-)
+-
+-(define_insn "fixuns_trunc<GPF:mode><GPI:mode>2"
++(define_insn "<optab>_trunc<GPF_F16:mode><GPI:mode>2"
+ [(set (match_operand:GPI 0 "register_operand" "=r")
+- (unsigned_fix:GPI (match_operand:GPF 1 "register_operand" "w")))]
++ (FIXUORS:GPI (match_operand:GPF_F16 1 "register_operand" "w")))]
+ "TARGET_FLOAT"
+- "fcvtzu\\t%<GPI:w>0, %<GPF:s>1"
++ "fcvtz<su>\t%<GPI:w>0, %<GPF_F16:s>1"
+ [(set_attr "type" "f_cvtf2i")]
+ )
+
+@@ -4599,38 +4688,116 @@
+ [(set_attr "type" "f_cvti2f")]
+ )
+
++(define_insn "<optab><mode>hf2"
++ [(set (match_operand:HF 0 "register_operand" "=w")
++ (FLOATUORS:HF (match_operand:GPI 1 "register_operand" "r")))]
++ "TARGET_FP_F16INST"
++ "<su_optab>cvtf\t%h0, %<w>1"
++ [(set_attr "type" "f_cvti2f")]
++)
++
++;; Convert between fixed-point and floating-point (scalar modes)
++
++(define_insn "<FCVT_F2FIXED:fcvt_fixed_insn><GPF:mode>3"
++ [(set (match_operand:<GPF:FCVT_TARGET> 0 "register_operand" "=r, w")
++ (unspec:<GPF:FCVT_TARGET> [(match_operand:GPF 1 "register_operand" "w, w")
++ (match_operand:SI 2 "immediate_operand" "i, i")]
++ FCVT_F2FIXED))]
++ ""
++ "@
++ <FCVT_F2FIXED:fcvt_fixed_insn>\t%<GPF:w1>0, %<GPF:s>1, #%2
++ <FCVT_F2FIXED:fcvt_fixed_insn>\t%<GPF:s>0, %<GPF:s>1, #%2"
++ [(set_attr "type" "f_cvtf2i, neon_fp_to_int_<GPF:Vetype>")
++ (set_attr "fp" "yes, *")
++ (set_attr "simd" "*, yes")]
++)
++
++(define_insn "<FCVT_FIXED2F:fcvt_fixed_insn><GPI:mode>3"
++ [(set (match_operand:<GPI:FCVT_TARGET> 0 "register_operand" "=w, w")
++ (unspec:<GPI:FCVT_TARGET> [(match_operand:GPI 1 "register_operand" "r, w")
++ (match_operand:SI 2 "immediate_operand" "i, i")]
++ FCVT_FIXED2F))]
++ ""
++ "@
++ <FCVT_FIXED2F:fcvt_fixed_insn>\t%<GPI:v>0, %<GPI:w>1, #%2
++ <FCVT_FIXED2F:fcvt_fixed_insn>\t%<GPI:v>0, %<GPI:v>1, #%2"
++ [(set_attr "type" "f_cvti2f, neon_int_to_fp_<GPI:Vetype>")
++ (set_attr "fp" "yes, *")
++ (set_attr "simd" "*, yes")]
++)
++
++(define_insn "<FCVT_F2FIXED:fcvt_fixed_insn>hf<mode>3"
++ [(set (match_operand:GPI 0 "register_operand" "=r")
++ (unspec:GPI [(match_operand:HF 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ FCVT_F2FIXED))]
++ "TARGET_FP_F16INST"
++ "<FCVT_F2FIXED:fcvt_fixed_insn>\t%<GPI:w>0, %h1, #%2"
++ [(set_attr "type" "f_cvtf2i")]
++)
++
++(define_insn "<FCVT_FIXED2F:fcvt_fixed_insn><mode>hf3"
++ [(set (match_operand:HF 0 "register_operand" "=w")
++ (unspec:HF [(match_operand:GPI 1 "register_operand" "r")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ FCVT_FIXED2F))]
++ "TARGET_FP_F16INST"
++ "<FCVT_FIXED2F:fcvt_fixed_insn>\t%h0, %<GPI:w>1, #%2"
++ [(set_attr "type" "f_cvti2f")]
++)
++
++(define_insn "<FCVT_F2FIXED:fcvt_fixed_insn>hf3"
++ [(set (match_operand:HI 0 "register_operand" "=w")
++ (unspec:HI [(match_operand:HF 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ FCVT_F2FIXED))]
++ "TARGET_SIMD"
++ "<FCVT_F2FIXED:fcvt_fixed_insn>\t%h0, %h1, #%2"
++ [(set_attr "type" "neon_fp_to_int_s")]
++)
++
++(define_insn "<FCVT_FIXED2F:fcvt_fixed_insn>hi3"
++ [(set (match_operand:HF 0 "register_operand" "=w")
++ (unspec:HF [(match_operand:HI 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ FCVT_FIXED2F))]
++ "TARGET_SIMD"
++ "<FCVT_FIXED2F:fcvt_fixed_insn>\t%h0, %h1, #%2"
++ [(set_attr "type" "neon_int_to_fp_s")]
++)
++
+ ;; -------------------------------------------------------------------
+ ;; Floating-point arithmetic
+ ;; -------------------------------------------------------------------
+
+ (define_insn "add<mode>3"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (plus:GPF
+- (match_operand:GPF 1 "register_operand" "w")
+- (match_operand:GPF 2 "register_operand" "w")))]
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (plus:GPF_F16
++ (match_operand:GPF_F16 1 "register_operand" "w")
++ (match_operand:GPF_F16 2 "register_operand" "w")))]
+ "TARGET_FLOAT"
+ "fadd\\t%<s>0, %<s>1, %<s>2"
+- [(set_attr "type" "fadd<s>")]
++ [(set_attr "type" "fadd<stype>")]
+ )
+
+ (define_insn "sub<mode>3"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (minus:GPF
+- (match_operand:GPF 1 "register_operand" "w")
+- (match_operand:GPF 2 "register_operand" "w")))]
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (minus:GPF_F16
++ (match_operand:GPF_F16 1 "register_operand" "w")
++ (match_operand:GPF_F16 2 "register_operand" "w")))]
+ "TARGET_FLOAT"
+ "fsub\\t%<s>0, %<s>1, %<s>2"
+- [(set_attr "type" "fadd<s>")]
++ [(set_attr "type" "fadd<stype>")]
+ )
+
+ (define_insn "mul<mode>3"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (mult:GPF
+- (match_operand:GPF 1 "register_operand" "w")
+- (match_operand:GPF 2 "register_operand" "w")))]
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (mult:GPF_F16
++ (match_operand:GPF_F16 1 "register_operand" "w")
++ (match_operand:GPF_F16 2 "register_operand" "w")))]
+ "TARGET_FLOAT"
+ "fmul\\t%<s>0, %<s>1, %<s>2"
+- [(set_attr "type" "fmul<s>")]
++ [(set_attr "type" "fmul<stype>")]
+ )
+
+ (define_insn "*fnmul<mode>3"
+@@ -4653,38 +4820,58 @@
+ [(set_attr "type" "fmul<s>")]
+ )
+
+-(define_insn "div<mode>3"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (div:GPF
+- (match_operand:GPF 1 "register_operand" "w")
+- (match_operand:GPF 2 "register_operand" "w")))]
++(define_expand "div<mode>3"
++ [(set (match_operand:GPF_F16 0 "register_operand")
++ (div:GPF_F16 (match_operand:GPF_F16 1 "general_operand")
++ (match_operand:GPF_F16 2 "register_operand")))]
++ "TARGET_SIMD"
++{
++ if (aarch64_emit_approx_div (operands[0], operands[1], operands[2]))
++ DONE;
++
++ operands[1] = force_reg (<MODE>mode, operands[1]);
++})
++
++(define_insn "*div<mode>3"
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (div:GPF_F16 (match_operand:GPF_F16 1 "register_operand" "w")
++ (match_operand:GPF_F16 2 "register_operand" "w")))]
+ "TARGET_FLOAT"
+ "fdiv\\t%<s>0, %<s>1, %<s>2"
+- [(set_attr "type" "fdiv<s>")]
++ [(set_attr "type" "fdiv<stype>")]
+ )
+
+ (define_insn "neg<mode>2"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (neg:GPF (match_operand:GPF 1 "register_operand" "w")))]
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (neg:GPF_F16 (match_operand:GPF_F16 1 "register_operand" "w")))]
+ "TARGET_FLOAT"
+ "fneg\\t%<s>0, %<s>1"
+- [(set_attr "type" "ffarith<s>")]
++ [(set_attr "type" "ffarith<stype>")]
+ )
+
+-(define_insn "sqrt<mode>2"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (sqrt:GPF (match_operand:GPF 1 "register_operand" "w")))]
++(define_expand "sqrt<mode>2"
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (sqrt:GPF_F16 (match_operand:GPF_F16 1 "register_operand" "w")))]
++ "TARGET_FLOAT"
++{
++ if (aarch64_emit_approx_sqrt (operands[0], operands[1], false))
++ DONE;
++})
++
++(define_insn "*sqrt<mode>2"
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (sqrt:GPF_F16 (match_operand:GPF_F16 1 "register_operand" "w")))]
+ "TARGET_FLOAT"
+ "fsqrt\\t%<s>0, %<s>1"
+- [(set_attr "type" "fsqrt<s>")]
++ [(set_attr "type" "fsqrt<stype>")]
+ )
+
+ (define_insn "abs<mode>2"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (abs:GPF (match_operand:GPF 1 "register_operand" "w")))]
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (abs:GPF_F16 (match_operand:GPF_F16 1 "register_operand" "w")))]
+ "TARGET_FLOAT"
+ "fabs\\t%<s>0, %<s>1"
+- [(set_attr "type" "ffarith<s>")]
++ [(set_attr "type" "ffarith<stype>")]
+ )
+
+ ;; Given that smax/smin do not specify the result when either input is NaN,
+@@ -4709,15 +4896,17 @@
+ [(set_attr "type" "f_minmax<s>")]
+ )
+
+-;; Scalar forms for the IEEE-754 fmax()/fmin() functions
+-(define_insn "<fmaxmin><mode>3"
+- [(set (match_operand:GPF 0 "register_operand" "=w")
+- (unspec:GPF [(match_operand:GPF 1 "register_operand" "w")
+- (match_operand:GPF 2 "register_operand" "w")]
+- FMAXMIN))]
++;; Scalar forms for fmax, fmin, fmaxnm, fminnm.
++;; fmaxnm and fminnm are used for the fmax<mode>3 standard pattern names,
++;; which implement the IEEE fmax ()/fmin () functions.
++(define_insn "<maxmin_uns><mode>3"
++ [(set (match_operand:GPF_F16 0 "register_operand" "=w")
++ (unspec:GPF_F16 [(match_operand:GPF_F16 1 "register_operand" "w")
++ (match_operand:GPF_F16 2 "register_operand" "w")]
++ FMAXMIN_UNS))]
+ "TARGET_FLOAT"
+- "<fmaxmin_op>\\t%<s>0, %<s>1, %<s>2"
+- [(set_attr "type" "f_minmax<s>")]
++ "<maxmin_uns_op>\\t%<s>0, %<s>1, %<s>2"
++ [(set_attr "type" "f_minmax<stype>")]
+ )
+
+ ;; For copysign (x, y), we want to generate:
+@@ -4775,7 +4964,7 @@
+ [(set (match_operand:GPF_TF 0 "register_operand" "=w")
+ (mem:GPF_TF (match_operand 1 "aarch64_constant_pool_symref" "S")))
+ (clobber (match_operand:P 2 "register_operand" "=&r"))]
+- "TARGET_FLOAT && aarch64_nopcrelative_literal_loads"
++ "TARGET_FLOAT"
+ {
+ aarch64_expand_mov_immediate (operands[2], XEXP (operands[1], 0));
+ emit_move_insn (operands[0], gen_rtx_MEM (<GPF_TF:MODE>mode, operands[2]));
+@@ -4788,7 +4977,7 @@
+ [(set (match_operand:VALL 0 "register_operand" "=w")
+ (mem:VALL (match_operand 1 "aarch64_constant_pool_symref" "S")))
+ (clobber (match_operand:P 2 "register_operand" "=&r"))]
+- "TARGET_FLOAT && aarch64_nopcrelative_literal_loads"
++ "TARGET_FLOAT"
+ {
+ aarch64_expand_mov_immediate (operands[2], XEXP (operands[1], 0));
+ emit_move_insn (operands[0], gen_rtx_MEM (<VALL:MODE>mode, operands[2]));
+@@ -4961,20 +5150,20 @@
+ ;; The TLS ABI specifically requires that the compiler does not schedule
+ ;; instructions in the TLS stubs, in order to enable linker relaxation.
+ ;; Therefore we treat the stubs as an atomic sequence.
+-(define_expand "tlsgd_small"
++(define_expand "tlsgd_small_<mode>"
+ [(parallel [(set (match_operand 0 "register_operand" "")
+ (call (mem:DI (match_dup 2)) (const_int 1)))
+- (unspec:DI [(match_operand:DI 1 "aarch64_valid_symref" "")] UNSPEC_GOTSMALLTLS)
++ (unspec:DI [(match_operand:PTR 1 "aarch64_valid_symref" "")] UNSPEC_GOTSMALLTLS)
+ (clobber (reg:DI LR_REGNUM))])]
+ ""
+ {
+ operands[2] = aarch64_tls_get_addr ();
+ })
+
+-(define_insn "*tlsgd_small"
++(define_insn "*tlsgd_small_<mode>"
+ [(set (match_operand 0 "register_operand" "")
+ (call (mem:DI (match_operand:DI 2 "" "")) (const_int 1)))
+- (unspec:DI [(match_operand:DI 1 "aarch64_valid_symref" "S")] UNSPEC_GOTSMALLTLS)
++ (unspec:DI [(match_operand:PTR 1 "aarch64_valid_symref" "S")] UNSPEC_GOTSMALLTLS)
+ (clobber (reg:DI LR_REGNUM))
+ ]
+ ""
+@@ -5182,7 +5371,7 @@
+ UNSPEC_SP_TEST))
+ (clobber (match_scratch:PTR 3 "=&r"))]
+ ""
+- "ldr\t%<w>3, %x1\;ldr\t%<w>0, %x2\;eor\t%<w>0, %<w>3, %<w>0"
++ "ldr\t%<w>3, %1\;ldr\t%<w>0, %2\;eor\t%<w>0, %<w>3, %<w>0"
+ [(set_attr "length" "12")
+ (set_attr "type" "multiple")])
+
+--- a/src/gcc/config/aarch64/aarch64.opt
++++ b/src/gcc/config/aarch64/aarch64.opt
+@@ -146,10 +146,28 @@ EnumValue
+ Enum(aarch64_abi) String(lp64) Value(AARCH64_ABI_LP64)
+
+ mpc-relative-literal-loads
+-Target Report Save Var(nopcrelative_literal_loads) Init(2) Save
++Target Report Save Var(pcrelative_literal_loads) Init(2) Save
+ PC relative literal loads.
+
+ mlow-precision-recip-sqrt
+ Common Var(flag_mrecip_low_precision_sqrt) Optimization
+-When calculating the reciprocal square root approximation,
+-uses one less step than otherwise, thus reducing latency and precision.
++Enable the reciprocal square root approximation. Enabling this reduces
++precision of reciprocal square root results to about 16 bits for
++single precision and to 32 bits for double precision.
++
++mlow-precision-sqrt
++Common Var(flag_mlow_precision_sqrt) Optimization
++Enable the square root approximation. Enabling this reduces
++precision of square root results to about 16 bits for
++single precision and to 32 bits for double precision.
++If enabled, it implies -mlow-precision-recip-sqrt.
++
++mlow-precision-div
++Common Var(flag_mlow_precision_div) Optimization
++Enable the division approximation. Enabling this reduces
++precision of division results to about 16 bits for
++single precision and to 32 bits for double precision.
++
++mverbose-cost-dump
++Common Undocumented Var(flag_aarch64_verbose_cost)
++Enables verbose cost model dummping in the debug dump files.
+--- /dev/null
++++ b/src/gcc/config/aarch64/arm_fp16.h
+@@ -0,0 +1,579 @@
++/* ARM FP16 scalar intrinsics include file.
++
++ Copyright (C) 2016 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published
++ by the Free Software Foundation; either version 3, or (at your
++ option) any later version.
++
++ GCC is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
++ License for more details.
++
++ Under Section 7 of GPL version 3, you are granted additional
++ permissions described in the GCC Runtime Library Exception, version
++ 3.1, as published by the Free Software Foundation.
++
++ You should have received a copy of the GNU General Public License and
++ a copy of the GCC Runtime Library Exception along with this program;
++ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _AARCH64_FP16_H_
++#define _AARCH64_FP16_H_
++
++#include <stdint.h>
++
++#pragma GCC push_options
++#pragma GCC target ("arch=armv8.2-a+fp16")
++
++typedef __fp16 float16_t;
++
++/* ARMv8.2-A FP16 one operand scalar intrinsics. */
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vabsh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_abshf (__a);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vceqzh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_cmeqhf_uss (__a, 0.0f);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcgezh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_cmgehf_uss (__a, 0.0f);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcgtzh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_cmgthf_uss (__a, 0.0f);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vclezh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_cmlehf_uss (__a, 0.0f);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcltzh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_cmlthf_uss (__a, 0.0f);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_f16_s16 (int16_t __a)
++{
++ return __builtin_aarch64_floathihf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_f16_s32 (int32_t __a)
++{
++ return __builtin_aarch64_floatsihf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_f16_s64 (int64_t __a)
++{
++ return __builtin_aarch64_floatdihf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_f16_u16 (uint16_t __a)
++{
++ return __builtin_aarch64_floatunshihf_us (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_f16_u32 (uint32_t __a)
++{
++ return __builtin_aarch64_floatunssihf_us (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_f16_u64 (uint64_t __a)
++{
++ return __builtin_aarch64_floatunsdihf_us (__a);
++}
++
++__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++vcvth_s16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_fix_trunchfhi (__a);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvth_s32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_fix_trunchfsi (__a);
++}
++
++__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++vcvth_s64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_fix_trunchfdi (__a);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcvth_u16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_fixuns_trunchfhi_us (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvth_u32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_fixuns_trunchfsi_us (__a);
++}
++
++__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++vcvth_u64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_fixuns_trunchfdi_us (__a);
++}
++
++__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++vcvtah_s16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lroundhfhi (__a);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvtah_s32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lroundhfsi (__a);
++}
++
++__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++vcvtah_s64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lroundhfdi (__a);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcvtah_u16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lrounduhfhi_us (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvtah_u32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lrounduhfsi_us (__a);
++}
++
++__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++vcvtah_u64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lrounduhfdi_us (__a);
++}
++
++__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++vcvtmh_s16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lfloorhfhi (__a);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvtmh_s32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lfloorhfsi (__a);
++}
++
++__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++vcvtmh_s64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lfloorhfdi (__a);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcvtmh_u16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lflooruhfhi_us (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvtmh_u32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lflooruhfsi_us (__a);
++}
++
++__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++vcvtmh_u64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lflooruhfdi_us (__a);
++}
++
++__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++vcvtnh_s16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lfrintnhfhi (__a);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvtnh_s32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lfrintnhfsi (__a);
++}
++
++__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++vcvtnh_s64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lfrintnhfdi (__a);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcvtnh_u16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lfrintnuhfhi_us (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvtnh_u32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lfrintnuhfsi_us (__a);
++}
++
++__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++vcvtnh_u64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lfrintnuhfdi_us (__a);
++}
++
++__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++vcvtph_s16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lceilhfhi (__a);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvtph_s32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lceilhfsi (__a);
++}
++
++__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++vcvtph_s64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lceilhfdi (__a);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcvtph_u16_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lceiluhfhi_us (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvtph_u32_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lceiluhfsi_us (__a);
++}
++
++__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++vcvtph_u64_f16 (float16_t __a)
++{
++ return __builtin_aarch64_lceiluhfdi_us (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vnegh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_neghf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrecpeh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_frecpehf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrecpxh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_frecpxhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_btrunchf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndah_f16 (float16_t __a)
++{
++ return __builtin_aarch64_roundhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndih_f16 (float16_t __a)
++{
++ return __builtin_aarch64_nearbyinthf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndmh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_floorhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndnh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_frintnhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndph_f16 (float16_t __a)
++{
++ return __builtin_aarch64_ceilhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndxh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_rinthf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrsqrteh_f16 (float16_t __a)
++{
++ return __builtin_aarch64_rsqrtehf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vsqrth_f16 (float16_t __a)
++{
++ return __builtin_aarch64_sqrthf (__a);
++}
++
++/* ARMv8.2-A FP16 two operands scalar intrinsics. */
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vaddh_f16 (float16_t __a, float16_t __b)
++{
++ return __a + __b;
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vabdh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_fabdhf (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcageh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_facgehf_uss (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcagth_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_facgthf_uss (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcaleh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_faclehf_uss (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcalth_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_faclthf_uss (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vceqh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_cmeqhf_uss (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcgeh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_cmgehf_uss (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcgth_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_cmgthf_uss (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcleh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_cmlehf_uss (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vclth_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_cmlthf_uss (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_n_f16_s16 (int16_t __a, const int __b)
++{
++ return __builtin_aarch64_scvtfhi (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_n_f16_s32 (int32_t __a, const int __b)
++{
++ return __builtin_aarch64_scvtfsihf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_n_f16_s64 (int64_t __a, const int __b)
++{
++ return __builtin_aarch64_scvtfdihf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_n_f16_u16 (uint16_t __a, const int __b)
++{
++ return __builtin_aarch64_ucvtfhi_sus (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_n_f16_u32 (uint32_t __a, const int __b)
++{
++ return __builtin_aarch64_ucvtfsihf_sus (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_n_f16_u64 (uint64_t __a, const int __b)
++{
++ return __builtin_aarch64_ucvtfdihf_sus (__a, __b);
++}
++
++__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++vcvth_n_s16_f16 (float16_t __a, const int __b)
++{
++ return __builtin_aarch64_fcvtzshf (__a, __b);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvth_n_s32_f16 (float16_t __a, const int __b)
++{
++ return __builtin_aarch64_fcvtzshfsi (__a, __b);
++}
++
++__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++vcvth_n_s64_f16 (float16_t __a, const int __b)
++{
++ return __builtin_aarch64_fcvtzshfdi (__a, __b);
++}
++
++__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++vcvth_n_u16_f16 (float16_t __a, const int __b)
++{
++ return __builtin_aarch64_fcvtzuhf_uss (__a, __b);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvth_n_u32_f16 (float16_t __a, const int __b)
++{
++ return __builtin_aarch64_fcvtzuhfsi_uss (__a, __b);
++}
++
++__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++vcvth_n_u64_f16 (float16_t __a, const int __b)
++{
++ return __builtin_aarch64_fcvtzuhfdi_uss (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vdivh_f16 (float16_t __a, float16_t __b)
++{
++ return __a / __b;
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vmaxh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_fmaxhf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vmaxnmh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_fmaxhf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vminh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_fminhf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vminnmh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_fminhf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vmulh_f16 (float16_t __a, float16_t __b)
++{
++ return __a * __b;
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vmulxh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_fmulxhf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrecpsh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_frecpshf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrsqrtsh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_aarch64_rsqrtshf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vsubh_f16 (float16_t __a, float16_t __b)
++{
++ return __a - __b;
++}
++
++/* ARMv8.2-A FP16 three operands scalar intrinsics. */
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vfmah_f16 (float16_t __a, float16_t __b, float16_t __c)
++{
++ return __builtin_aarch64_fmahf (__b, __c, __a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vfmsh_f16 (float16_t __a, float16_t __b, float16_t __c)
++{
++ return __builtin_aarch64_fnmahf (__b, __c, __a);
++}
++
++#pragma GCC pop_options
++
++#endif
+--- a/src/gcc/config/aarch64/arm_neon.h
++++ b/src/gcc/config/aarch64/arm_neon.h
+@@ -58,6 +58,7 @@ typedef __Float64x2_t float64x2_t;
+ typedef __Poly8x16_t poly8x16_t;
+ typedef __Poly16x8_t poly16x8_t;
+ typedef __Poly64x2_t poly64x2_t;
++typedef __Poly64x1_t poly64x1_t;
+ typedef __Uint8x16_t uint8x16_t;
+ typedef __Uint16x8_t uint16x8_t;
+ typedef __Uint32x4_t uint32x4_t;
+@@ -202,6 +203,36 @@ typedef struct poly16x8x2_t
+ poly16x8_t val[2];
+ } poly16x8x2_t;
+
++typedef struct poly64x1x2_t
++{
++ poly64x1_t val[2];
++} poly64x1x2_t;
++
++typedef struct poly64x1x3_t
++{
++ poly64x1_t val[3];
++} poly64x1x3_t;
++
++typedef struct poly64x1x4_t
++{
++ poly64x1_t val[4];
++} poly64x1x4_t;
++
++typedef struct poly64x2x2_t
++{
++ poly64x2_t val[2];
++} poly64x2x2_t;
++
++typedef struct poly64x2x3_t
++{
++ poly64x2_t val[3];
++} poly64x2x3_t;
++
++typedef struct poly64x2x4_t
++{
++ poly64x2_t val[4];
++} poly64x2x4_t;
++
+ typedef struct int8x8x3_t
+ {
+ int8x8_t val[3];
+@@ -466,6 +497,8 @@ typedef struct poly16x8x4_t
+ #define __aarch64_vdup_lane_any(__size, __q, __a, __b) \
+ vdup##__q##_n_##__size (__aarch64_vget_lane_any (__a, __b))
+
++#define __aarch64_vdup_lane_f16(__a, __b) \
++ __aarch64_vdup_lane_any (f16, , __a, __b)
+ #define __aarch64_vdup_lane_f32(__a, __b) \
+ __aarch64_vdup_lane_any (f32, , __a, __b)
+ #define __aarch64_vdup_lane_f64(__a, __b) \
+@@ -474,6 +507,8 @@ typedef struct poly16x8x4_t
+ __aarch64_vdup_lane_any (p8, , __a, __b)
+ #define __aarch64_vdup_lane_p16(__a, __b) \
+ __aarch64_vdup_lane_any (p16, , __a, __b)
++#define __aarch64_vdup_lane_p64(__a, __b) \
++ __aarch64_vdup_lane_any (p64, , __a, __b)
+ #define __aarch64_vdup_lane_s8(__a, __b) \
+ __aarch64_vdup_lane_any (s8, , __a, __b)
+ #define __aarch64_vdup_lane_s16(__a, __b) \
+@@ -492,6 +527,8 @@ typedef struct poly16x8x4_t
+ __aarch64_vdup_lane_any (u64, , __a, __b)
+
+ /* __aarch64_vdup_laneq internal macros. */
++#define __aarch64_vdup_laneq_f16(__a, __b) \
++ __aarch64_vdup_lane_any (f16, , __a, __b)
+ #define __aarch64_vdup_laneq_f32(__a, __b) \
+ __aarch64_vdup_lane_any (f32, , __a, __b)
+ #define __aarch64_vdup_laneq_f64(__a, __b) \
+@@ -500,6 +537,8 @@ typedef struct poly16x8x4_t
+ __aarch64_vdup_lane_any (p8, , __a, __b)
+ #define __aarch64_vdup_laneq_p16(__a, __b) \
+ __aarch64_vdup_lane_any (p16, , __a, __b)
++#define __aarch64_vdup_laneq_p64(__a, __b) \
++ __aarch64_vdup_lane_any (p64, , __a, __b)
+ #define __aarch64_vdup_laneq_s8(__a, __b) \
+ __aarch64_vdup_lane_any (s8, , __a, __b)
+ #define __aarch64_vdup_laneq_s16(__a, __b) \
+@@ -518,6 +557,8 @@ typedef struct poly16x8x4_t
+ __aarch64_vdup_lane_any (u64, , __a, __b)
+
+ /* __aarch64_vdupq_lane internal macros. */
++#define __aarch64_vdupq_lane_f16(__a, __b) \
++ __aarch64_vdup_lane_any (f16, q, __a, __b)
+ #define __aarch64_vdupq_lane_f32(__a, __b) \
+ __aarch64_vdup_lane_any (f32, q, __a, __b)
+ #define __aarch64_vdupq_lane_f64(__a, __b) \
+@@ -526,6 +567,8 @@ typedef struct poly16x8x4_t
+ __aarch64_vdup_lane_any (p8, q, __a, __b)
+ #define __aarch64_vdupq_lane_p16(__a, __b) \
+ __aarch64_vdup_lane_any (p16, q, __a, __b)
++#define __aarch64_vdupq_lane_p64(__a, __b) \
++ __aarch64_vdup_lane_any (p64, q, __a, __b)
+ #define __aarch64_vdupq_lane_s8(__a, __b) \
+ __aarch64_vdup_lane_any (s8, q, __a, __b)
+ #define __aarch64_vdupq_lane_s16(__a, __b) \
+@@ -544,6 +587,8 @@ typedef struct poly16x8x4_t
+ __aarch64_vdup_lane_any (u64, q, __a, __b)
+
+ /* __aarch64_vdupq_laneq internal macros. */
++#define __aarch64_vdupq_laneq_f16(__a, __b) \
++ __aarch64_vdup_lane_any (f16, q, __a, __b)
+ #define __aarch64_vdupq_laneq_f32(__a, __b) \
+ __aarch64_vdup_lane_any (f32, q, __a, __b)
+ #define __aarch64_vdupq_laneq_f64(__a, __b) \
+@@ -552,6 +597,8 @@ typedef struct poly16x8x4_t
+ __aarch64_vdup_lane_any (p8, q, __a, __b)
+ #define __aarch64_vdupq_laneq_p16(__a, __b) \
+ __aarch64_vdup_lane_any (p16, q, __a, __b)
++#define __aarch64_vdupq_laneq_p64(__a, __b) \
++ __aarch64_vdup_lane_any (p64, q, __a, __b)
+ #define __aarch64_vdupq_laneq_s8(__a, __b) \
+ __aarch64_vdup_lane_any (s8, q, __a, __b)
+ #define __aarch64_vdupq_laneq_s16(__a, __b) \
+@@ -601,535 +648,619 @@ typedef struct poly16x8x4_t
+ })
+
+ /* vadd */
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_f64 (float64x1_t __a, float64x1_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_saddlv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_saddlv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_saddlv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_uaddlv8qi ((int8x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_uaddlv4hi ((int16x4_t) __a,
+ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t) __builtin_aarch64_uaddlv2si ((int32x2_t) __a,
+ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_high_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_saddl2v16qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_high_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_saddl2v8hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_high_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_saddl2v4si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_high_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_uaddl2v16qi ((int8x16_t) __a,
+ (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_high_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_uaddl2v8hi ((int16x8_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_high_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint64x2_t) __builtin_aarch64_uaddl2v4si ((int32x4_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_s8 (int16x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_saddwv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_s16 (int32x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_saddwv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_s32 (int64x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_saddwv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_u8 (uint16x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_uaddwv8qi ((int16x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_u16 (uint32x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_uaddwv4hi ((int32x4_t) __a,
+ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_u32 (uint64x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t) __builtin_aarch64_uaddwv2si ((int64x2_t) __a,
+ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_high_s8 (int16x8_t __a, int8x16_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_saddw2v16qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_high_s16 (int32x4_t __a, int16x8_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_saddw2v8hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_high_s32 (int64x2_t __a, int32x4_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_saddw2v4si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_high_u8 (uint16x8_t __a, uint8x16_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_uaddw2v16qi ((int16x8_t) __a,
+ (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_high_u16 (uint32x4_t __a, uint16x8_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_uaddw2v8hi ((int32x4_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_high_u32 (uint64x2_t __a, uint32x4_t __b)
+ {
+ return (uint64x2_t) __builtin_aarch64_uaddw2v4si ((int64x2_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t) __builtin_aarch64_shaddv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_shaddv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_shaddv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t) __builtin_aarch64_uhaddv8qi ((int8x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t) __builtin_aarch64_uhaddv4hi ((int16x4_t) __a,
+ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t) __builtin_aarch64_uhaddv2si ((int32x2_t) __a,
+ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t) __builtin_aarch64_shaddv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_shaddv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_shaddv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t) __builtin_aarch64_uhaddv16qi ((int8x16_t) __a,
+ (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_uhaddv8hi ((int16x8_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_uhaddv4si ((int32x4_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t) __builtin_aarch64_srhaddv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_srhaddv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_srhaddv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t) __builtin_aarch64_urhaddv8qi ((int8x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t) __builtin_aarch64_urhaddv4hi ((int16x4_t) __a,
+ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t) __builtin_aarch64_urhaddv2si ((int32x2_t) __a,
+ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t) __builtin_aarch64_srhaddv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_srhaddv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_srhaddv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t) __builtin_aarch64_urhaddv16qi ((int8x16_t) __a,
+ (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_urhaddv8hi ((int16x8_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_urhaddv4si ((int32x4_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int8x8_t) __builtin_aarch64_addhnv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_addhnv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_addhnv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint8x8_t) __builtin_aarch64_addhnv8hi ((int16x8_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint16x4_t) __builtin_aarch64_addhnv4si ((int32x4_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint32x2_t) __builtin_aarch64_addhnv2di ((int64x2_t) __a,
+ (int64x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int8x8_t) __builtin_aarch64_raddhnv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_raddhnv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_raddhnv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint8x8_t) __builtin_aarch64_raddhnv8hi ((int16x8_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint16x4_t) __builtin_aarch64_raddhnv4si ((int32x4_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint32x2_t) __builtin_aarch64_raddhnv2di ((int64x2_t) __a,
+ (int64x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int8x16_t) __builtin_aarch64_addhn2v8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int16x8_t) __builtin_aarch64_addhn2v4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
+ {
+ return (int32x4_t) __builtin_aarch64_addhn2v2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ {
+ return (uint8x16_t) __builtin_aarch64_addhn2v8hi ((int8x8_t) __a,
+@@ -1137,7 +1268,8 @@ vaddhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ (int16x8_t) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ {
+ return (uint16x8_t) __builtin_aarch64_addhn2v4si ((int16x4_t) __a,
+@@ -1145,7 +1277,8 @@ vaddhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ (int32x4_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+ {
+ return (uint32x4_t) __builtin_aarch64_addhn2v2di ((int32x2_t) __a,
+@@ -1153,25 +1286,29 @@ vaddhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+ (int64x2_t) __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int8x16_t) __builtin_aarch64_raddhn2v8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int16x8_t) __builtin_aarch64_raddhn2v4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
+ {
+ return (int32x4_t) __builtin_aarch64_raddhn2v2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ {
+ return (uint8x16_t) __builtin_aarch64_raddhn2v8hi ((int8x8_t) __a,
+@@ -1179,7 +1316,8 @@ vraddhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ (int16x8_t) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ {
+ return (uint16x8_t) __builtin_aarch64_raddhn2v4si ((int16x4_t) __a,
+@@ -1187,7 +1325,8 @@ vraddhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ (int32x4_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+ {
+ return (uint32x4_t) __builtin_aarch64_raddhn2v2di ((int32x2_t) __a,
+@@ -1195,1101 +1334,1280 @@ vraddhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+ (int64x2_t) __c);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdiv_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return __a / __b;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdiv_f64 (float64x1_t __a, float64x1_t __b)
+ {
+ return __a / __b;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdivq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return __a / __b;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdivq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+ return __a / __b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_f64 (float64x1_t __a, float64x1_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ return (poly8x8_t) __builtin_aarch64_pmulv8qi ((int8x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+ return (poly8x16_t) __builtin_aarch64_pmulv16qi ((int8x16_t) __a,
+ (int8x16_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_f64 (float64x1_t __a, float64x1_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_ssublv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_ssublv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_ssublv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_usublv8qi ((int8x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_usublv4hi ((int16x4_t) __a,
+ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t) __builtin_aarch64_usublv2si ((int32x2_t) __a,
+ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_high_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_ssubl2v16qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_high_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_ssubl2v8hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_high_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_ssubl2v4si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_high_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_usubl2v16qi ((int8x16_t) __a,
+ (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_high_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_usubl2v8hi ((int16x8_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_high_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint64x2_t) __builtin_aarch64_usubl2v4si ((int32x4_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_s8 (int16x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_ssubwv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_s16 (int32x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_ssubwv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_s32 (int64x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_ssubwv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_u8 (uint16x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_usubwv8qi ((int16x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_u16 (uint32x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_usubwv4hi ((int32x4_t) __a,
+ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_u32 (uint64x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t) __builtin_aarch64_usubwv2si ((int64x2_t) __a,
+ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_high_s8 (int16x8_t __a, int8x16_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_ssubw2v16qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_high_s16 (int32x4_t __a, int16x8_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_ssubw2v8hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_high_s32 (int64x2_t __a, int32x4_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_ssubw2v4si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_high_u8 (uint16x8_t __a, uint8x16_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_usubw2v16qi ((int16x8_t) __a,
+ (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_high_u16 (uint32x4_t __a, uint16x8_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_usubw2v8hi ((int32x4_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_high_u32 (uint64x2_t __a, uint32x4_t __b)
+ {
+ return (uint64x2_t) __builtin_aarch64_usubw2v4si ((int64x2_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t) __builtin_aarch64_sqaddv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_sqaddv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_sqaddv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return (int64x1_t) {__builtin_aarch64_sqadddi (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __builtin_aarch64_uqaddv8qi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_aarch64_shsubv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_shsubv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_shsubv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t) __builtin_aarch64_uhsubv8qi ((int8x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t) __builtin_aarch64_uhsubv4hi ((int16x4_t) __a,
+ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t) __builtin_aarch64_uhsubv2si ((int32x2_t) __a,
+ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t) __builtin_aarch64_shsubv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_shsubv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_shsubv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t) __builtin_aarch64_uhsubv16qi ((int8x16_t) __a,
+ (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_uhsubv8hi ((int16x8_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_uhsubv4si ((int32x4_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int8x8_t) __builtin_aarch64_subhnv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_subhnv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_subhnv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint8x8_t) __builtin_aarch64_subhnv8hi ((int16x8_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint16x4_t) __builtin_aarch64_subhnv4si ((int32x4_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint32x2_t) __builtin_aarch64_subhnv2di ((int64x2_t) __a,
+ (int64x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int8x8_t) __builtin_aarch64_rsubhnv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_rsubhnv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_rsubhnv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint8x8_t) __builtin_aarch64_rsubhnv8hi ((int16x8_t) __a,
+ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint16x4_t) __builtin_aarch64_rsubhnv4si ((int32x4_t) __a,
+ (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint32x2_t) __builtin_aarch64_rsubhnv2di ((int64x2_t) __a,
+ (int64x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int8x16_t) __builtin_aarch64_rsubhn2v8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int16x8_t) __builtin_aarch64_rsubhn2v4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
+ {
+ return (int32x4_t) __builtin_aarch64_rsubhn2v2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ {
+ return (uint8x16_t) __builtin_aarch64_rsubhn2v8hi ((int8x8_t) __a,
+@@ -2297,7 +2615,8 @@ vrsubhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ (int16x8_t) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ {
+ return (uint16x8_t) __builtin_aarch64_rsubhn2v4si ((int16x4_t) __a,
+@@ -2305,7 +2624,8 @@ vrsubhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ (int32x4_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+ {
+ return (uint32x4_t) __builtin_aarch64_rsubhn2v2di ((int32x2_t) __a,
+@@ -2313,25 +2633,29 @@ vrsubhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+ (int64x2_t) __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int8x16_t) __builtin_aarch64_subhn2v8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int16x8_t) __builtin_aarch64_subhn2v4si (__a, __b, __c);;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
+ {
+ return (int32x4_t) __builtin_aarch64_subhn2v2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ {
+ return (uint8x16_t) __builtin_aarch64_subhn2v8hi ((int8x8_t) __a,
+@@ -2339,7 +2663,8 @@ vsubhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ (int16x8_t) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ {
+ return (uint16x8_t) __builtin_aarch64_subhn2v4si ((int16x4_t) __a,
+@@ -2347,7 +2672,8 @@ vsubhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ (int32x4_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+ {
+ return (uint32x4_t) __builtin_aarch64_subhn2v2di ((int32x2_t) __a,
+@@ -2355,453 +2681,542 @@ vsubhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+ (int64x2_t) __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __builtin_aarch64_uqaddv4hi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __builtin_aarch64_uqaddv2si_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return (uint64x1_t) {__builtin_aarch64_uqadddi_uuu (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t) __builtin_aarch64_sqaddv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_sqaddv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_sqaddv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_sqaddv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __builtin_aarch64_uqaddv16qi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __builtin_aarch64_uqaddv8hi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __builtin_aarch64_uqaddv4si_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __builtin_aarch64_uqaddv2di_uuu (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t) __builtin_aarch64_sqsubv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_sqsubv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_sqsubv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return (int64x1_t) {__builtin_aarch64_sqsubdi (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __builtin_aarch64_uqsubv8qi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __builtin_aarch64_uqsubv4hi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __builtin_aarch64_uqsubv2si_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return (uint64x1_t) {__builtin_aarch64_uqsubdi_uuu (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t) __builtin_aarch64_sqsubv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_sqsubv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_sqsubv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int64x2_t) __builtin_aarch64_sqsubv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __builtin_aarch64_uqsubv16qi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __builtin_aarch64_uqsubv8hi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __builtin_aarch64_uqsubv4si_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __builtin_aarch64_uqsubv2di_uuu (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqneg_s8 (int8x8_t __a)
+ {
+ return (int8x8_t) __builtin_aarch64_sqnegv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqneg_s16 (int16x4_t __a)
+ {
+ return (int16x4_t) __builtin_aarch64_sqnegv4hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqneg_s32 (int32x2_t __a)
+ {
+ return (int32x2_t) __builtin_aarch64_sqnegv2si (__a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqneg_s64 (int64x1_t __a)
+ {
+ return (int64x1_t) {__builtin_aarch64_sqnegdi (__a[0])};
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqnegq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t) __builtin_aarch64_sqnegv16qi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqnegq_s16 (int16x8_t __a)
+ {
+ return (int16x8_t) __builtin_aarch64_sqnegv8hi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqnegq_s32 (int32x4_t __a)
+ {
+ return (int32x4_t) __builtin_aarch64_sqnegv4si (__a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabs_s8 (int8x8_t __a)
+ {
+ return (int8x8_t) __builtin_aarch64_sqabsv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabs_s16 (int16x4_t __a)
+ {
+ return (int16x4_t) __builtin_aarch64_sqabsv4hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabs_s32 (int32x2_t __a)
+ {
+ return (int32x2_t) __builtin_aarch64_sqabsv2si (__a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabs_s64 (int64x1_t __a)
+ {
+ return (int64x1_t) {__builtin_aarch64_sqabsdi (__a[0])};
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabsq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t) __builtin_aarch64_sqabsv16qi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabsq_s16 (int16x8_t __a)
+ {
+ return (int16x8_t) __builtin_aarch64_sqabsv8hi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabsq_s32 (int32x4_t __a)
+ {
+ return (int32x4_t) __builtin_aarch64_sqabsv4si (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulh_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_sqdmulhv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulh_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_sqdmulhv2si (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulhq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_sqdmulhv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulhq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_sqdmulhv4si (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulh_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t) __builtin_aarch64_sqrdmulhv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulh_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t) __builtin_aarch64_sqrdmulhv2si (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulhq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_sqrdmulhv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulhq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_sqrdmulhv4si (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_s8 (uint64_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_s16 (uint64_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_s32 (uint64_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_s64 (uint64_t __a)
+ {
+ return (int64x1_t) {__a};
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_f16 (uint64_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_f32 (uint64_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_u8 (uint64_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_u16 (uint64_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_u32 (uint64_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_u64 (uint64_t __a)
+ {
+ return (uint64x1_t) {__a};
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_f64 (uint64_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_p8 (uint64_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_p16 (uint64_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcreate_p64 (uint64_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
+ /* vget_lane */
+
+-__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_f16 (float16x4_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_f32 (float32x2_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_f64 (float64x1_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline poly8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_p8 (poly8x8_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline poly16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_p16 (poly16x4_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vget_lane_p64 (poly64x1_t __a, const int __b)
++{
++ return __aarch64_vget_lane_any (__a, __b);
++}
++
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_s8 (int8x8_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_s16 (int16x4_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_s32 (int32x2_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_s64 (int64x1_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_u8 (uint8x8_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_u16 (uint16x4_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_u32 (uint32x2_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_u64 (uint64x1_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+@@ -2809,79 +3224,99 @@ vget_lane_u64 (uint64x1_t __a, const int __b)
+
+ /* vgetq_lane */
+
+-__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_f16 (float16x8_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_f32 (float32x4_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_f64 (float64x2_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline poly8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_p8 (poly8x16_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline poly16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_p16 (poly16x8_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vgetq_lane_p64 (poly64x2_t __a, const int __b)
++{
++ return __aarch64_vget_lane_any (__a, __b);
++}
++
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_s8 (int8x16_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_s16 (int16x8_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_s32 (int32x4_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_s64 (int64x2_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_u8 (uint8x16_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_u16 (uint16x8_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_u32 (uint32x4_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_u64 (uint64x2_t __a, const int __b)
+ {
+ return __aarch64_vget_lane_any (__a, __b);
+@@ -2889,1953 +3324,2832 @@ vgetq_lane_u64 (uint64x2_t __a, const int __b)
+
+ /* vreinterpret */
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_f16 (float16x4_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_f64 (float64x1_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_s8 (int8x8_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_s16 (int16x4_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_s32 (int32x2_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_s64 (int64x1_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_f32 (float32x2_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_u8 (uint8x8_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_u16 (uint16x4_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_u32 (uint32x2_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_u64 (uint64x1_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_p16 (poly16x4_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p8_p64 (poly64x1_t __a)
++{
++ return (poly8x8_t) __a;
++}
++
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_f64 (float64x2_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_s8 (int8x16_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_s16 (int16x8_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_s32 (int32x4_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_s64 (int64x2_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_f16 (float16x8_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_f32 (float32x4_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_u8 (uint8x16_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_u16 (uint16x8_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_u32 (uint32x4_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_u64 (uint64x2_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_p16 (poly16x8_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p8_p64 (poly64x2_t __a)
++{
++ return (poly8x16_t) __a;
++}
++
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p8_p128 (poly128_t __a)
++{
++ return (poly8x16_t)__a;
++}
++
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_f16 (float16x4_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_f64 (float64x1_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_s8 (int8x8_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_s16 (int16x4_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_s32 (int32x2_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_s64 (int64x1_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_f32 (float32x2_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_u8 (uint8x8_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_u16 (uint16x4_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_u32 (uint32x2_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_u64 (uint64x1_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_p8 (poly8x8_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p16_p64 (poly64x1_t __a)
++{
++ return (poly16x4_t) __a;
++}
++
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_f64 (float64x2_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_s8 (int8x16_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_s16 (int16x8_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_s32 (int32x4_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_s64 (int64x2_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_f16 (float16x8_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_f32 (float32x4_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_u8 (uint8x16_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_u16 (uint16x8_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_u32 (uint32x4_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_u64 (uint64x2_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_p8 (poly8x16_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p16_p64 (poly64x2_t __a)
++{
++ return (poly16x8_t) __a;
++}
++
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p16_p128 (poly128_t __a)
++{
++ return (poly16x8_t)__a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_f16 (float16x4_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_f64 (float64x1_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_s8 (int8x8_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_s16 (int16x4_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_s32 (int32x2_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_s64 (int64x1_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_f32 (float32x2_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_u8 (uint8x8_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_u16 (uint16x4_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_u32 (uint32x2_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_u64 (uint64x1_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_p8 (poly8x8_t __a)
++{
++ return (poly64x1_t) __a;
++}
++
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_p64_p16 (poly16x4_t __a)
++{
++ return (poly64x1_t)__a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_f64 (float64x2_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_s8 (int8x16_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_s16 (int16x8_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_s32 (int32x4_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_s64 (int64x2_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_f16 (float16x8_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_f32 (float32x4_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_p128 (poly128_t __a)
++{
++ return (poly64x2_t)__a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_u8 (uint8x16_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_u16 (uint16x8_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_p16 (poly16x8_t __a)
++{
++ return (poly64x2_t)__a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_u32 (uint32x4_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_u64 (uint64x2_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p64_p8 (poly8x16_t __a)
++{
++ return (poly64x2_t) __a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_p8 (poly8x16_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_p16 (poly16x8_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_f16 (float16x8_t __a)
++{
++ return (poly128_t) __a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_f32 (float32x4_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_p64 (poly64x2_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_s64 (int64x2_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_u64 (uint64x2_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_s8 (int8x16_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_s16 (int16x8_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_s32 (int32x4_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_u8 (uint8x16_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_u16 (uint16x8_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_p128_u32 (uint32x4_t __a)
++{
++ return (poly128_t)__a;
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_f64 (float64x1_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_s8 (int8x8_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_s16 (int16x4_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_s32 (int32x2_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_s64 (int64x1_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_f32 (float32x2_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_u8 (uint8x8_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_u16 (uint16x4_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_u32 (uint32x2_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_u64 (uint64x1_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_p8 (poly8x8_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_p16 (poly16x4_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_f16_p64 (poly64x1_t __a)
++{
++ return (float16x4_t) __a;
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_f64 (float64x2_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_s8 (int8x16_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_s16 (int16x8_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_s32 (int32x4_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_s64 (int64x2_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_f32 (float32x4_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_u8 (uint8x16_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_u16 (uint16x8_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_u32 (uint32x4_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_u64 (uint64x2_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_p8 (poly8x16_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_f16_p128 (poly128_t __a)
++{
++ return (float16x8_t) __a;
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_p16 (poly16x8_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_f16_p64 (poly64x2_t __a)
++{
++ return (float16x8_t) __a;
++}
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_f16 (float16x4_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_f64 (float64x1_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_s8 (int8x8_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_s16 (int16x4_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_s32 (int32x2_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_s64 (int64x1_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_u8 (uint8x8_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_u16 (uint16x4_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_u32 (uint32x2_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_u64 (uint64x1_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_p8 (poly8x8_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_p16 (poly16x4_t __a)
+ {
+ return (float32x2_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_f32_p64 (poly64x1_t __a)
++{
++ return (float32x2_t) __a;
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_f16 (float16x8_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_f64 (float64x2_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_s8 (int8x16_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_s16 (int16x8_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_s32 (int32x4_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_s64 (int64x2_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_u8 (uint8x16_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_u16 (uint16x8_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_u32 (uint32x4_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_u64 (uint64x2_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_p8 (poly8x16_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_p16 (poly16x8_t __a)
+ {
+ return (float32x4_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_f32_p64 (poly64x2_t __a)
++{
++ return (float32x4_t) __a;
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_f32_p128 (poly128_t __a)
++{
++ return (float32x4_t)__a;
++}
++
++
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_f16 (float16x4_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_f32 (float32x2_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_p8 (poly8x8_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_p16 (poly16x4_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_f64_p64 (poly64x1_t __a)
++{
++ return (float64x1_t) __a;
++}
++
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_s8 (int8x8_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_s16 (int16x4_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_s32 (int32x2_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_s64 (int64x1_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_u8 (uint8x8_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_u16 (uint16x4_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_u32 (uint32x2_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f64_u64 (uint64x1_t __a)
+ {
+ return (float64x1_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_f16 (float16x8_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_f32 (float32x4_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_p8 (poly8x16_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_p16 (poly16x8_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_f64_p64 (poly64x2_t __a)
++{
++ return (float64x2_t) __a;
++}
++
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_s8 (int8x16_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_s16 (int16x8_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_s32 (int32x4_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_s64 (int64x2_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_u8 (uint8x16_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_u16 (uint16x8_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_u32 (uint32x4_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f64_u64 (uint64x2_t __a)
+ {
+ return (float64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_f16 (float16x4_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_f64 (float64x1_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_s8 (int8x8_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_s16 (int16x4_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_s32 (int32x2_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_f32 (float32x2_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_u8 (uint8x8_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_u16 (uint16x4_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_u32 (uint32x2_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_u64 (uint64x1_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_p8 (poly8x8_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_p16 (poly16x4_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_s64_p64 (poly64x1_t __a)
++{
++ return (int64x1_t) __a;
++}
++
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_f64 (float64x2_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_s8 (int8x16_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_s16 (int16x8_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_s32 (int32x4_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_f16 (float16x8_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_f32 (float32x4_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_u8 (uint8x16_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_u16 (uint16x8_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_u32 (uint32x4_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_u64 (uint64x2_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_p8 (poly8x16_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_p16 (poly16x8_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_s64_p64 (poly64x2_t __a)
++{
++ return (int64x2_t) __a;
++}
++
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_s64_p128 (poly128_t __a)
++{
++ return (int64x2_t)__a;
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_f16 (float16x4_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_f64 (float64x1_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_s8 (int8x8_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_s16 (int16x4_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_s32 (int32x2_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_s64 (int64x1_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_f32 (float32x2_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_u8 (uint8x8_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_u16 (uint16x4_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_u32 (uint32x2_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_p8 (poly8x8_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_p16 (poly16x4_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_u64_p64 (poly64x1_t __a)
++{
++ return (uint64x1_t) __a;
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_f64 (float64x2_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_s8 (int8x16_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_s16 (int16x8_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_s32 (int32x4_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_s64 (int64x2_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_f16 (float16x8_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_f32 (float32x4_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_u8 (uint8x16_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_u16 (uint16x8_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_u32 (uint32x4_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_p8 (poly8x16_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_p16 (poly16x8_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_u64_p64 (poly64x2_t __a)
++{
++ return (uint64x2_t) __a;
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_u64_p128 (poly128_t __a)
++{
++ return (uint64x2_t)__a;
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_f16 (float16x4_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_f64 (float64x1_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_s16 (int16x4_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_s32 (int32x2_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_s64 (int64x1_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_f32 (float32x2_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_u8 (uint8x8_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_u16 (uint16x4_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_u32 (uint32x2_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_u64 (uint64x1_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_p8 (poly8x8_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_p16 (poly16x4_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_s8_p64 (poly64x1_t __a)
++{
++ return (int8x8_t) __a;
++}
++
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_f64 (float64x2_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_s16 (int16x8_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_s32 (int32x4_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_s64 (int64x2_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_f16 (float16x8_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_f32 (float32x4_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_u8 (uint8x16_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_u16 (uint16x8_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_u32 (uint32x4_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_u64 (uint64x2_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_p8 (poly8x16_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_p16 (poly16x8_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_s8_p64 (poly64x2_t __a)
++{
++ return (int8x16_t) __a;
++}
++
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_s8_p128 (poly128_t __a)
++{
++ return (int8x16_t)__a;
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_f16 (float16x4_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_f64 (float64x1_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_s8 (int8x8_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_s32 (int32x2_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_s64 (int64x1_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_f32 (float32x2_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_u8 (uint8x8_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_u16 (uint16x4_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_u32 (uint32x2_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_u64 (uint64x1_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_p8 (poly8x8_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_p16 (poly16x4_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_s16_p64 (poly64x1_t __a)
++{
++ return (int16x4_t) __a;
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_f64 (float64x2_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_s8 (int8x16_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_s32 (int32x4_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_s64 (int64x2_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_f16 (float16x8_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_f32 (float32x4_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_u8 (uint8x16_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_u16 (uint16x8_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_u32 (uint32x4_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_u64 (uint64x2_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_p8 (poly8x16_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_p16 (poly16x8_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_s16_p64 (poly64x2_t __a)
++{
++ return (int16x8_t) __a;
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_s16_p128 (poly128_t __a)
++{
++ return (int16x8_t)__a;
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_f16 (float16x4_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_f64 (float64x1_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_s8 (int8x8_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_s16 (int16x4_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_s64 (int64x1_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_f32 (float32x2_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_u8 (uint8x8_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_u16 (uint16x4_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_u32 (uint32x2_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_u64 (uint64x1_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_p8 (poly8x8_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_p16 (poly16x4_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_s32_p64 (poly64x1_t __a)
++{
++ return (int32x2_t) __a;
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_f64 (float64x2_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_s8 (int8x16_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_s16 (int16x8_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_s64 (int64x2_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_f16 (float16x8_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_f32 (float32x4_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_u8 (uint8x16_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_u16 (uint16x8_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_u32 (uint32x4_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_u64 (uint64x2_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_p8 (poly8x16_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_p16 (poly16x8_t __a)
+ {
+ return (int32x4_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_s32_p64 (poly64x2_t __a)
++{
++ return (int32x4_t) __a;
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_s32_p128 (poly128_t __a)
++{
++ return (int32x4_t)__a;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_f16 (float16x4_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_f64 (float64x1_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_s8 (int8x8_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_s16 (int16x4_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_s32 (int32x2_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_s64 (int64x1_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_f32 (float32x2_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_u16 (uint16x4_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_u32 (uint32x2_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_u64 (uint64x1_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_p8 (poly8x8_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_p16 (poly16x4_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_u8_p64 (poly64x1_t __a)
++{
++ return (uint8x8_t) __a;
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_f64 (float64x2_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_s8 (int8x16_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_s16 (int16x8_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_s32 (int32x4_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_s64 (int64x2_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_f16 (float16x8_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_f32 (float32x4_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_u16 (uint16x8_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_u32 (uint32x4_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_u64 (uint64x2_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_p8 (poly8x16_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_p16 (poly16x8_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_u8_p64 (poly64x2_t __a)
++{
++ return (uint8x16_t) __a;
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_u8_p128 (poly128_t __a)
++{
++ return (uint8x16_t)__a;
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_f16 (float16x4_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_f64 (float64x1_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_s8 (int8x8_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_s16 (int16x4_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_s32 (int32x2_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_s64 (int64x1_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_f32 (float32x2_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_u8 (uint8x8_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_u32 (uint32x2_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_u64 (uint64x1_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_p8 (poly8x8_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_p16 (poly16x4_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_u16_p64 (poly64x1_t __a)
++{
++ return (uint16x4_t) __a;
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_f64 (float64x2_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_s8 (int8x16_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_s16 (int16x8_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_s32 (int32x4_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_s64 (int64x2_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_f16 (float16x8_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_f32 (float32x4_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_u8 (uint8x16_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_u32 (uint32x4_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_u64 (uint64x2_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_p8 (poly8x16_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_p16 (poly16x8_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_u16_p64 (poly64x2_t __a)
++{
++ return (uint16x8_t) __a;
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_u16_p128 (poly128_t __a)
++{
++ return (uint16x8_t)__a;
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_f16 (float16x4_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_f64 (float64x1_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_s8 (int8x8_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_s16 (int16x4_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_s32 (int32x2_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_s64 (int64x1_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_f32 (float32x2_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_u8 (uint8x8_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_u16 (uint16x4_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_u64 (uint64x1_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_p8 (poly8x8_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_p16 (poly16x4_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpret_u32_p64 (poly64x1_t __a)
++{
++ return (uint32x2_t) __a;
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_f64 (float64x2_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_s8 (int8x16_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_s16 (int16x8_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_s32 (int32x4_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_s64 (int64x2_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_f16 (float16x8_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_f32 (float32x4_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_u8 (uint8x16_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_u16 (uint16x8_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_u64 (uint64x2_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_p8 (poly8x16_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_p16 (poly16x8_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_u32_p64 (poly64x2_t __a)
++{
++ return (uint32x4_t) __a;
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vreinterpretq_u32_p128 (poly128_t __a)
++{
++ return (uint32x4_t)__a;
++}
++
+ /* vset_lane */
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_f16 (float16_t __elem, float16x4_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_f32 (float32_t __elem, float32x2_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_f64 (float64_t __elem, float64x1_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_p8 (poly8_t __elem, poly8x8_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_p16 (poly16_t __elem, poly16x4_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vset_lane_p64 (poly64_t __elem, poly64x1_t __vec, const int __index)
++{
++ return __aarch64_vset_lane_any (__elem, __vec, __index);
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_s8 (int8_t __elem, int8x8_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_s16 (int16_t __elem, int16x4_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_s32 (int32_t __elem, int32x2_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_s64 (int64_t __elem, int64x1_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_u8 (uint8_t __elem, uint8x8_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_u16 (uint16_t __elem, uint16x4_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_u32 (uint32_t __elem, uint32x2_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_u64 (uint64_t __elem, uint64x1_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+@@ -4843,79 +6157,99 @@ vset_lane_u64 (uint64_t __elem, uint64x1_t __vec, const int __index)
+
+ /* vsetq_lane */
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_f16 (float16_t __elem, float16x8_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_f32 (float32_t __elem, float32x4_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_f64 (float64_t __elem, float64x2_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_p8 (poly8_t __elem, poly8x16_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_p16 (poly16_t __elem, poly16x8_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsetq_lane_p64 (poly64_t __elem, poly64x2_t __vec, const int __index)
++{
++ return __aarch64_vset_lane_any (__elem, __vec, __index);
++}
++
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_s8 (int8_t __elem, int8x16_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_s16 (int16_t __elem, int16x8_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_s32 (int32_t __elem, int32x4_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_s64 (int64_t __elem, int64x2_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_u8 (uint8_t __elem, uint8x16_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_u16 (uint16_t __elem, uint16x8_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_u32 (uint32_t __elem, uint32x4_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_u64 (uint64_t __elem, uint64x2_t __vec, const int __index)
+ {
+ return __aarch64_vset_lane_any (__elem, __vec, __index);
+@@ -4926,79 +6260,99 @@ vsetq_lane_u64 (uint64_t __elem, uint64x2_t __vec, const int __index)
+ uint64x1_t lo = vcreate_u64 (vgetq_lane_u64 (tmp, 0)); \
+ return vreinterpret_##__TYPE##_u64 (lo);
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_f16 (float16x8_t __a)
+ {
+ __GET_LOW (f16);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_f32 (float32x4_t __a)
+ {
+ __GET_LOW (f32);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_f64 (float64x2_t __a)
+ {
+ return (float64x1_t) {vgetq_lane_f64 (__a, 0)};
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_p8 (poly8x16_t __a)
+ {
+ __GET_LOW (p8);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_p16 (poly16x8_t __a)
+ {
+ __GET_LOW (p16);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vget_low_p64 (poly64x2_t __a)
++{
++ __GET_LOW (p64);
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_s8 (int8x16_t __a)
+ {
+ __GET_LOW (s8);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_s16 (int16x8_t __a)
+ {
+ __GET_LOW (s16);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_s32 (int32x4_t __a)
+ {
+ __GET_LOW (s32);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_s64 (int64x2_t __a)
+ {
+ __GET_LOW (s64);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_u8 (uint8x16_t __a)
+ {
+ __GET_LOW (u8);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_u16 (uint16x8_t __a)
+ {
+ __GET_LOW (u16);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_u32 (uint32x4_t __a)
+ {
+ __GET_LOW (u32);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_u64 (uint64x2_t __a)
+ {
+ return vcreate_u64 (vgetq_lane_u64 (__a, 0));
+@@ -5011,73 +6365,92 @@ vget_low_u64 (uint64x2_t __a)
+ uint64x1_t hi = vcreate_u64 (vgetq_lane_u64 (tmp, 1)); \
+ return vreinterpret_##__TYPE##_u64 (hi);
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_f16 (float16x8_t __a)
+ {
+ __GET_HIGH (f16);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_f32 (float32x4_t __a)
+ {
+ __GET_HIGH (f32);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_f64 (float64x2_t __a)
+ {
+ __GET_HIGH (f64);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_p8 (poly8x16_t __a)
+ {
+ __GET_HIGH (p8);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_p16 (poly16x8_t __a)
+ {
+ __GET_HIGH (p16);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vget_high_p64 (poly64x2_t __a)
++{
++ __GET_HIGH (p64);
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_s8 (int8x16_t __a)
+ {
+ __GET_HIGH (s8);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_s16 (int16x8_t __a)
+ {
+ __GET_HIGH (s16);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_s32 (int32x4_t __a)
+ {
+ __GET_HIGH (s32);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_s64 (int64x2_t __a)
+ {
+ __GET_HIGH (s64);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_u8 (uint8x16_t __a)
+ {
+ __GET_HIGH (u8);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_u16 (uint16x8_t __a)
+ {
+ __GET_HIGH (u16);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_u32 (uint32x4_t __a)
+ {
+ __GET_HIGH (u32);
+@@ -5085,98 +6458,120 @@ vget_high_u32 (uint32x4_t __a)
+
+ #undef __GET_HIGH
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_u64 (uint64x2_t __a)
+ {
+ return vcreate_u64 (vgetq_lane_u64 (__a, 1));
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x16_t) __builtin_aarch64_combinev8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x8_t) __builtin_aarch64_combinev4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x4_t) __builtin_aarch64_combinev2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __builtin_aarch64_combinedi (__a[0], __b[0]);
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_f16 (float16x4_t __a, float16x4_t __b)
+ {
+ return __builtin_aarch64_combinev4hf (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x4_t) __builtin_aarch64_combinev2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x16_t) __builtin_aarch64_combinev8qi ((int8x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x8_t) __builtin_aarch64_combinev4hi ((int16x4_t) __a,
+ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x4_t) __builtin_aarch64_combinev2si ((int32x2_t) __a,
+ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return (uint64x2_t) __builtin_aarch64_combinedi (__a[0], __b[0]);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_f64 (float64x1_t __a, float64x1_t __b)
+ {
+ return __builtin_aarch64_combinedf (__a[0], __b[0]);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ return (poly8x16_t) __builtin_aarch64_combinev8qi ((int8x8_t) __a,
+ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+ return (poly16x8_t) __builtin_aarch64_combinev4hi ((int16x4_t) __a,
+ (int16x4_t) __b);
+ }
+
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcombine_p64 (poly64x1_t __a, poly64x1_t __b)
++{
++ return (poly64x2_t) __builtin_aarch64_combinedi_ppp (__a[0], __b[0]);
++}
++
+ /* Start of temporary inline asm implementations. */
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
+ {
+ int8x8_t result;
+@@ -5187,7 +6582,8 @@ vaba_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
+ return result;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
+ {
+ int16x4_t result;
+@@ -5198,7 +6594,8 @@ vaba_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
+ return result;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
+ {
+ int32x2_t result;
+@@ -5209,7 +6606,8 @@ vaba_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
+ {
+ uint8x8_t result;
+@@ -5220,7 +6618,8 @@ vaba_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
+ {
+ uint16x4_t result;
+@@ -5231,7 +6630,8 @@ vaba_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
+ {
+ uint32x2_t result;
+@@ -5242,7 +6642,8 @@ vaba_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
+ {
+ int16x8_t result;
+@@ -5253,7 +6654,8 @@ vabal_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+ {
+ int32x4_t result;
+@@ -5264,7 +6666,8 @@ vabal_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
+ {
+ int64x2_t result;
+@@ -5275,7 +6678,8 @@ vabal_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
+ {
+ uint16x8_t result;
+@@ -5286,7 +6690,8 @@ vabal_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
+ {
+ uint32x4_t result;
+@@ -5297,7 +6702,8 @@ vabal_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
+ {
+ uint64x2_t result;
+@@ -5308,7 +6714,8 @@ vabal_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
+ {
+ int16x8_t result;
+@@ -5319,7 +6726,8 @@ vabal_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
+ {
+ int32x4_t result;
+@@ -5330,7 +6738,8 @@ vabal_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
+ {
+ int64x2_t result;
+@@ -5341,7 +6750,8 @@ vabal_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
+ {
+ uint16x8_t result;
+@@ -5352,7 +6762,8 @@ vabal_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
+ {
+ uint32x4_t result;
+@@ -5363,7 +6774,8 @@ vabal_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
+ {
+ uint64x2_t result;
+@@ -5374,7 +6786,8 @@ vabal_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
+ return result;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
+ {
+ int8x16_t result;
+@@ -5385,7 +6798,8 @@ vabaq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
+ {
+ int16x8_t result;
+@@ -5396,7 +6810,8 @@ vabaq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
+ {
+ int32x4_t result;
+@@ -5407,7 +6822,8 @@ vabaq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
+ {
+ uint8x16_t result;
+@@ -5418,7 +6834,8 @@ vabaq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
+ {
+ uint16x8_t result;
+@@ -5429,7 +6846,8 @@ vabaq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
+ {
+ uint32x4_t result;
+@@ -5440,18 +6858,8 @@ vabaq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
+ return result;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vabd_f32 (float32x2_t a, float32x2_t b)
+-{
+- float32x2_t result;
+- __asm__ ("fabd %0.2s, %1.2s, %2.2s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_s8 (int8x8_t a, int8x8_t b)
+ {
+ int8x8_t result;
+@@ -5462,7 +6870,8 @@ vabd_s8 (int8x8_t a, int8x8_t b)
+ return result;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_s16 (int16x4_t a, int16x4_t b)
+ {
+ int16x4_t result;
+@@ -5473,7 +6882,8 @@ vabd_s16 (int16x4_t a, int16x4_t b)
+ return result;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_s32 (int32x2_t a, int32x2_t b)
+ {
+ int32x2_t result;
+@@ -5484,7 +6894,8 @@ vabd_s32 (int32x2_t a, int32x2_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_u8 (uint8x8_t a, uint8x8_t b)
+ {
+ uint8x8_t result;
+@@ -5495,7 +6906,8 @@ vabd_u8 (uint8x8_t a, uint8x8_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_u16 (uint16x4_t a, uint16x4_t b)
+ {
+ uint16x4_t result;
+@@ -5506,7 +6918,8 @@ vabd_u16 (uint16x4_t a, uint16x4_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_u32 (uint32x2_t a, uint32x2_t b)
+ {
+ uint32x2_t result;
+@@ -5517,18 +6930,8 @@ vabd_u32 (uint32x2_t a, uint32x2_t b)
+ return result;
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vabdd_f64 (float64_t a, float64_t b)
+-{
+- float64_t result;
+- __asm__ ("fabd %d0, %d1, %d2"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_high_s8 (int8x16_t a, int8x16_t b)
+ {
+ int16x8_t result;
+@@ -5539,7 +6942,8 @@ vabdl_high_s8 (int8x16_t a, int8x16_t b)
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_high_s16 (int16x8_t a, int16x8_t b)
+ {
+ int32x4_t result;
+@@ -5550,7 +6954,8 @@ vabdl_high_s16 (int16x8_t a, int16x8_t b)
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_high_s32 (int32x4_t a, int32x4_t b)
+ {
+ int64x2_t result;
+@@ -5561,7 +6966,8 @@ vabdl_high_s32 (int32x4_t a, int32x4_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_high_u8 (uint8x16_t a, uint8x16_t b)
+ {
+ uint16x8_t result;
+@@ -5572,7 +6978,8 @@ vabdl_high_u8 (uint8x16_t a, uint8x16_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_high_u16 (uint16x8_t a, uint16x8_t b)
+ {
+ uint32x4_t result;
+@@ -5583,7 +6990,8 @@ vabdl_high_u16 (uint16x8_t a, uint16x8_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_high_u32 (uint32x4_t a, uint32x4_t b)
+ {
+ uint64x2_t result;
+@@ -5594,7 +7002,8 @@ vabdl_high_u32 (uint32x4_t a, uint32x4_t b)
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_s8 (int8x8_t a, int8x8_t b)
+ {
+ int16x8_t result;
+@@ -5605,7 +7014,8 @@ vabdl_s8 (int8x8_t a, int8x8_t b)
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_s16 (int16x4_t a, int16x4_t b)
+ {
+ int32x4_t result;
+@@ -5616,7 +7026,8 @@ vabdl_s16 (int16x4_t a, int16x4_t b)
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_s32 (int32x2_t a, int32x2_t b)
+ {
+ int64x2_t result;
+@@ -5627,7 +7038,8 @@ vabdl_s32 (int32x2_t a, int32x2_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_u8 (uint8x8_t a, uint8x8_t b)
+ {
+ uint16x8_t result;
+@@ -5638,7 +7050,8 @@ vabdl_u8 (uint8x8_t a, uint8x8_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_u16 (uint16x4_t a, uint16x4_t b)
+ {
+ uint32x4_t result;
+@@ -5649,7 +7062,8 @@ vabdl_u16 (uint16x4_t a, uint16x4_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_u32 (uint32x2_t a, uint32x2_t b)
+ {
+ uint64x2_t result;
+@@ -5660,29 +7074,8 @@ vabdl_u32 (uint32x2_t a, uint32x2_t b)
+ return result;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vabdq_f32 (float32x4_t a, float32x4_t b)
+-{
+- float32x4_t result;
+- __asm__ ("fabd %0.4s, %1.4s, %2.4s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vabdq_f64 (float64x2_t a, float64x2_t b)
+-{
+- float64x2_t result;
+- __asm__ ("fabd %0.2d, %1.2d, %2.2d"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_s8 (int8x16_t a, int8x16_t b)
+ {
+ int8x16_t result;
+@@ -5693,7 +7086,8 @@ vabdq_s8 (int8x16_t a, int8x16_t b)
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_s16 (int16x8_t a, int16x8_t b)
+ {
+ int16x8_t result;
+@@ -5704,7 +7098,8 @@ vabdq_s16 (int16x8_t a, int16x8_t b)
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_s32 (int32x4_t a, int32x4_t b)
+ {
+ int32x4_t result;
+@@ -5715,7 +7110,8 @@ vabdq_s32 (int32x4_t a, int32x4_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_u8 (uint8x16_t a, uint8x16_t b)
+ {
+ uint8x16_t result;
+@@ -5726,7 +7122,8 @@ vabdq_u8 (uint8x16_t a, uint8x16_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_u16 (uint16x8_t a, uint16x8_t b)
+ {
+ uint16x8_t result;
+@@ -5737,7 +7134,8 @@ vabdq_u16 (uint16x8_t a, uint16x8_t b)
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_u32 (uint32x4_t a, uint32x4_t b)
+ {
+ uint32x4_t result;
+@@ -5748,18 +7146,8 @@ vabdq_u32 (uint32x4_t a, uint32x4_t b)
+ return result;
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vabds_f32 (float32_t a, float32_t b)
+-{
+- float32_t result;
+- __asm__ ("fabd %s0, %s1, %s2"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlv_s8 (int8x8_t a)
+ {
+ int16_t result;
+@@ -5770,7 +7158,8 @@ vaddlv_s8 (int8x8_t a)
+ return result;
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlv_s16 (int16x4_t a)
+ {
+ int32_t result;
+@@ -5781,7 +7170,8 @@ vaddlv_s16 (int16x4_t a)
+ return result;
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlv_u8 (uint8x8_t a)
+ {
+ uint16_t result;
+@@ -5792,7 +7182,8 @@ vaddlv_u8 (uint8x8_t a)
+ return result;
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlv_u16 (uint16x4_t a)
+ {
+ uint32_t result;
+@@ -5803,7 +7194,8 @@ vaddlv_u16 (uint16x4_t a)
+ return result;
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlvq_s8 (int8x16_t a)
+ {
+ int16_t result;
+@@ -5814,7 +7206,8 @@ vaddlvq_s8 (int8x16_t a)
+ return result;
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlvq_s16 (int16x8_t a)
+ {
+ int32_t result;
+@@ -5825,7 +7218,8 @@ vaddlvq_s16 (int16x8_t a)
+ return result;
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlvq_s32 (int32x4_t a)
+ {
+ int64_t result;
+@@ -5836,7 +7230,8 @@ vaddlvq_s32 (int32x4_t a)
+ return result;
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlvq_u8 (uint8x16_t a)
+ {
+ uint16_t result;
+@@ -5847,7 +7242,8 @@ vaddlvq_u8 (uint8x16_t a)
+ return result;
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlvq_u16 (uint16x8_t a)
+ {
+ uint32_t result;
+@@ -5858,7 +7254,8 @@ vaddlvq_u16 (uint16x8_t a)
+ return result;
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddlvq_u32 (uint32x4_t a)
+ {
+ uint64_t result;
+@@ -5869,18584 +7266,23100 @@ vaddlvq_u32 (uint32x4_t a)
+ return result;
+ }
+
+-#define vcopyq_lane_f32(a, b, c, d) \
+- __extension__ \
+- ({ \
+- float32x4_t c_ = (c); \
+- float32x4_t a_ = (a); \
+- float32x4_t result; \
+- __asm__ ("ins %0.s[%2], %3.s[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtx_f32_f64 (float64x2_t a)
++{
++ float32x2_t result;
++ __asm__ ("fcvtxn %0.2s,%1.2d"
++ : "=w"(result)
++ : "w"(a)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtx_high_f32_f64 (float32x2_t a, float64x2_t b)
++{
++ float32x4_t result;
++ __asm__ ("fcvtxn2 %0.4s,%1.2d"
++ : "=w"(result)
++ : "w" (b), "0"(a)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtxd_f32_f64 (float64_t a)
++{
++ float32_t result;
++ __asm__ ("fcvtxn %s0,%d1"
++ : "=w"(result)
++ : "w"(a)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_n_f32 (float32x2_t a, float32x2_t b, float32_t c)
++{
++ float32x2_t result;
++ float32x2_t t1;
++ __asm__ ("fmul %1.2s, %3.2s, %4.s[0]; fadd %0.2s, %0.2s, %1.2s"
++ : "=w"(result), "=w"(t1)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_n_s16 (int16x4_t a, int16x4_t b, int16_t c)
++{
++ int16x4_t result;
++ __asm__ ("mla %0.4h,%2.4h,%3.h[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "x"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_n_s32 (int32x2_t a, int32x2_t b, int32_t c)
++{
++ int32x2_t result;
++ __asm__ ("mla %0.2s,%2.2s,%3.s[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_n_u16 (uint16x4_t a, uint16x4_t b, uint16_t c)
++{
++ uint16x4_t result;
++ __asm__ ("mla %0.4h,%2.4h,%3.h[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "x"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_n_u32 (uint32x2_t a, uint32x2_t b, uint32_t c)
++{
++ uint32x2_t result;
++ __asm__ ("mla %0.2s,%2.2s,%3.s[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
++{
++ int8x8_t result;
++ __asm__ ("mla %0.8b, %2.8b, %3.8b"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
++{
++ int16x4_t result;
++ __asm__ ("mla %0.4h, %2.4h, %3.4h"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
++{
++ int32x2_t result;
++ __asm__ ("mla %0.2s, %2.2s, %3.2s"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
++{
++ uint8x8_t result;
++ __asm__ ("mla %0.8b, %2.8b, %3.8b"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
++{
++ uint16x4_t result;
++ __asm__ ("mla %0.4h, %2.4h, %3.4h"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
++{
++ uint32x2_t result;
++ __asm__ ("mla %0.2s, %2.2s, %3.2s"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcopyq_lane_f64(a, b, c, d) \
++#define vmlal_high_lane_s16(a, b, c, d) \
+ __extension__ \
+ ({ \
+- float64x2_t c_ = (c); \
+- float64x2_t a_ = (a); \
+- float64x2_t result; \
+- __asm__ ("ins %0.d[%2], %3.d[%4]" \
++ int16x4_t c_ = (c); \
++ int16x8_t b_ = (b); \
++ int32x4_t a_ = (a); \
++ int32x4_t result; \
++ __asm__ ("smlal2 %0.4s, %2.8h, %3.h[%4]" \
+ : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcopyq_lane_p8(a, b, c, d) \
++#define vmlal_high_lane_s32(a, b, c, d) \
+ __extension__ \
+ ({ \
+- poly8x16_t c_ = (c); \
+- poly8x16_t a_ = (a); \
+- poly8x16_t result; \
+- __asm__ ("ins %0.b[%2], %3.b[%4]" \
++ int32x2_t c_ = (c); \
++ int32x4_t b_ = (b); \
++ int64x2_t a_ = (a); \
++ int64x2_t result; \
++ __asm__ ("smlal2 %0.2d, %2.4s, %3.s[%4]" \
+ : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
++ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcopyq_lane_p16(a, b, c, d) \
++#define vmlal_high_lane_u16(a, b, c, d) \
+ __extension__ \
+ ({ \
+- poly16x8_t c_ = (c); \
+- poly16x8_t a_ = (a); \
+- poly16x8_t result; \
+- __asm__ ("ins %0.h[%2], %3.h[%4]" \
++ uint16x4_t c_ = (c); \
++ uint16x8_t b_ = (b); \
++ uint32x4_t a_ = (a); \
++ uint32x4_t result; \
++ __asm__ ("umlal2 %0.4s, %2.8h, %3.h[%4]" \
+ : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcopyq_lane_s8(a, b, c, d) \
++#define vmlal_high_lane_u32(a, b, c, d) \
+ __extension__ \
+ ({ \
+- int8x16_t c_ = (c); \
+- int8x16_t a_ = (a); \
+- int8x16_t result; \
+- __asm__ ("ins %0.b[%2], %3.b[%4]" \
++ uint32x2_t c_ = (c); \
++ uint32x4_t b_ = (b); \
++ uint64x2_t a_ = (a); \
++ uint64x2_t result; \
++ __asm__ ("umlal2 %0.2d, %2.4s, %3.s[%4]" \
+ : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
++ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcopyq_lane_s16(a, b, c, d) \
++#define vmlal_high_laneq_s16(a, b, c, d) \
+ __extension__ \
+ ({ \
+ int16x8_t c_ = (c); \
+- int16x8_t a_ = (a); \
+- int16x8_t result; \
+- __asm__ ("ins %0.h[%2], %3.h[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vcopyq_lane_s32(a, b, c, d) \
+- __extension__ \
+- ({ \
+- int32x4_t c_ = (c); \
++ int16x8_t b_ = (b); \
+ int32x4_t a_ = (a); \
+ int32x4_t result; \
+- __asm__ ("ins %0.s[%2], %3.s[%4]" \
++ __asm__ ("smlal2 %0.4s, %2.8h, %3.h[%4]" \
+ : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcopyq_lane_s64(a, b, c, d) \
++#define vmlal_high_laneq_s32(a, b, c, d) \
+ __extension__ \
+ ({ \
+- int64x2_t c_ = (c); \
++ int32x4_t c_ = (c); \
++ int32x4_t b_ = (b); \
+ int64x2_t a_ = (a); \
+ int64x2_t result; \
+- __asm__ ("ins %0.d[%2], %3.d[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vcopyq_lane_u8(a, b, c, d) \
+- __extension__ \
+- ({ \
+- uint8x16_t c_ = (c); \
+- uint8x16_t a_ = (a); \
+- uint8x16_t result; \
+- __asm__ ("ins %0.b[%2], %3.b[%4]" \
++ __asm__ ("smlal2 %0.2d, %2.4s, %3.s[%4]" \
+ : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
++ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcopyq_lane_u16(a, b, c, d) \
++#define vmlal_high_laneq_u16(a, b, c, d) \
+ __extension__ \
+ ({ \
+ uint16x8_t c_ = (c); \
+- uint16x8_t a_ = (a); \
+- uint16x8_t result; \
+- __asm__ ("ins %0.h[%2], %3.h[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vcopyq_lane_u32(a, b, c, d) \
+- __extension__ \
+- ({ \
+- uint32x4_t c_ = (c); \
++ uint16x8_t b_ = (b); \
+ uint32x4_t a_ = (a); \
+ uint32x4_t result; \
+- __asm__ ("ins %0.s[%2], %3.s[%4]" \
++ __asm__ ("umlal2 %0.4s, %2.8h, %3.h[%4]" \
+ : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcopyq_lane_u64(a, b, c, d) \
++#define vmlal_high_laneq_u32(a, b, c, d) \
+ __extension__ \
+ ({ \
+- uint64x2_t c_ = (c); \
++ uint32x4_t c_ = (c); \
++ uint32x4_t b_ = (b); \
+ uint64x2_t a_ = (a); \
+ uint64x2_t result; \
+- __asm__ ("ins %0.d[%2], %3.d[%4]" \
++ __asm__ ("umlal2 %0.2d, %2.4s, %3.s[%4]" \
+ : "=w"(result) \
+- : "0"(a_), "i"(b), "w"(c_), "i"(d) \
++ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcvt_n_f32_s32(a, b) \
+- __extension__ \
+- ({ \
+- int32x2_t a_ = (a); \
+- float32x2_t result; \
+- __asm__ ("scvtf %0.2s, %1.2s, #%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_n_s16 (int32x4_t a, int16x8_t b, int16_t c)
++{
++ int32x4_t result;
++ __asm__ ("smlal2 %0.4s,%2.8h,%3.h[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "x"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvt_n_f32_u32(a, b) \
+- __extension__ \
+- ({ \
+- uint32x2_t a_ = (a); \
+- float32x2_t result; \
+- __asm__ ("ucvtf %0.2s, %1.2s, #%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_n_s32 (int64x2_t a, int32x4_t b, int32_t c)
++{
++ int64x2_t result;
++ __asm__ ("smlal2 %0.2d,%2.4s,%3.s[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvt_n_s32_f32(a, b) \
+- __extension__ \
+- ({ \
+- float32x2_t a_ = (a); \
+- int32x2_t result; \
+- __asm__ ("fcvtzs %0.2s, %1.2s, #%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_n_u16 (uint32x4_t a, uint16x8_t b, uint16_t c)
++{
++ uint32x4_t result;
++ __asm__ ("umlal2 %0.4s,%2.8h,%3.h[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "x"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvt_n_u32_f32(a, b) \
+- __extension__ \
+- ({ \
+- float32x2_t a_ = (a); \
+- uint32x2_t result; \
+- __asm__ ("fcvtzu %0.2s, %1.2s, #%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_n_u32 (uint64x2_t a, uint32x4_t b, uint32_t c)
++{
++ uint64x2_t result;
++ __asm__ ("umlal2 %0.2d,%2.4s,%3.s[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvtd_n_f64_s64(a, b) \
+- __extension__ \
+- ({ \
+- int64_t a_ = (a); \
+- float64_t result; \
+- __asm__ ("scvtf %d0,%d1,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
++{
++ int16x8_t result;
++ __asm__ ("smlal2 %0.8h,%2.16b,%3.16b"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvtd_n_f64_u64(a, b) \
+- __extension__ \
+- ({ \
+- uint64_t a_ = (a); \
+- float64_t result; \
+- __asm__ ("ucvtf %d0,%d1,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
++{
++ int32x4_t result;
++ __asm__ ("smlal2 %0.4s,%2.8h,%3.8h"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvtd_n_s64_f64(a, b) \
+- __extension__ \
+- ({ \
+- float64_t a_ = (a); \
+- int64_t result; \
+- __asm__ ("fcvtzs %d0,%d1,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
++{
++ int64x2_t result;
++ __asm__ ("smlal2 %0.2d,%2.4s,%3.4s"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvtd_n_u64_f64(a, b) \
+- __extension__ \
+- ({ \
+- float64_t a_ = (a); \
+- uint64_t result; \
+- __asm__ ("fcvtzu %d0,%d1,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
++{
++ uint16x8_t result;
++ __asm__ ("umlal2 %0.8h,%2.16b,%3.16b"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
++{
++ uint32x4_t result;
++ __asm__ ("umlal2 %0.4s,%2.8h,%3.8h"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
++{
++ uint64x2_t result;
++ __asm__ ("umlal2 %0.2d,%2.4s,%3.4s"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvtq_n_f32_s32(a, b) \
++#define vmlal_lane_s16(a, b, c, d) \
+ __extension__ \
+ ({ \
++ int16x4_t c_ = (c); \
++ int16x4_t b_ = (b); \
+ int32x4_t a_ = (a); \
+- float32x4_t result; \
+- __asm__ ("scvtf %0.4s, %1.4s, #%2" \
++ int32x4_t result; \
++ __asm__ ("smlal %0.4s,%2.4h,%3.h[%4]" \
+ : "=w"(result) \
+- : "w"(a_), "i"(b) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcvtq_n_f32_u32(a, b) \
++#define vmlal_lane_s32(a, b, c, d) \
+ __extension__ \
+ ({ \
+- uint32x4_t a_ = (a); \
+- float32x4_t result; \
+- __asm__ ("ucvtf %0.4s, %1.4s, #%2" \
++ int32x2_t c_ = (c); \
++ int32x2_t b_ = (b); \
++ int64x2_t a_ = (a); \
++ int64x2_t result; \
++ __asm__ ("smlal %0.2d,%2.2s,%3.s[%4]" \
+ : "=w"(result) \
+- : "w"(a_), "i"(b) \
++ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcvtq_n_f64_s64(a, b) \
++#define vmlal_lane_u16(a, b, c, d) \
+ __extension__ \
+ ({ \
+- int64x2_t a_ = (a); \
+- float64x2_t result; \
+- __asm__ ("scvtf %0.2d, %1.2d, #%2" \
++ uint16x4_t c_ = (c); \
++ uint16x4_t b_ = (b); \
++ uint32x4_t a_ = (a); \
++ uint32x4_t result; \
++ __asm__ ("umlal %0.4s,%2.4h,%3.h[%4]" \
+ : "=w"(result) \
+- : "w"(a_), "i"(b) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcvtq_n_f64_u64(a, b) \
++#define vmlal_lane_u32(a, b, c, d) \
+ __extension__ \
+ ({ \
++ uint32x2_t c_ = (c); \
++ uint32x2_t b_ = (b); \
+ uint64x2_t a_ = (a); \
+- float64x2_t result; \
+- __asm__ ("ucvtf %0.2d, %1.2d, #%2" \
++ uint64x2_t result; \
++ __asm__ ("umlal %0.2d, %2.2s, %3.s[%4]" \
+ : "=w"(result) \
+- : "w"(a_), "i"(b) \
++ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcvtq_n_s32_f32(a, b) \
++#define vmlal_laneq_s16(a, b, c, d) \
+ __extension__ \
+ ({ \
+- float32x4_t a_ = (a); \
++ int16x8_t c_ = (c); \
++ int16x4_t b_ = (b); \
++ int32x4_t a_ = (a); \
+ int32x4_t result; \
+- __asm__ ("fcvtzs %0.4s, %1.4s, #%2" \
++ __asm__ ("smlal %0.4s, %2.4h, %3.h[%4]" \
+ : "=w"(result) \
+- : "w"(a_), "i"(b) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcvtq_n_s64_f64(a, b) \
++#define vmlal_laneq_s32(a, b, c, d) \
+ __extension__ \
+ ({ \
+- float64x2_t a_ = (a); \
++ int32x4_t c_ = (c); \
++ int32x2_t b_ = (b); \
++ int64x2_t a_ = (a); \
+ int64x2_t result; \
+- __asm__ ("fcvtzs %0.2d, %1.2d, #%2" \
++ __asm__ ("smlal %0.2d, %2.2s, %3.s[%4]" \
+ : "=w"(result) \
+- : "w"(a_), "i"(b) \
++ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcvtq_n_u32_f32(a, b) \
++#define vmlal_laneq_u16(a, b, c, d) \
+ __extension__ \
+ ({ \
+- float32x4_t a_ = (a); \
++ uint16x8_t c_ = (c); \
++ uint16x4_t b_ = (b); \
++ uint32x4_t a_ = (a); \
+ uint32x4_t result; \
+- __asm__ ("fcvtzu %0.4s, %1.4s, #%2" \
++ __asm__ ("umlal %0.4s, %2.4h, %3.h[%4]" \
+ : "=w"(result) \
+- : "w"(a_), "i"(b) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcvtq_n_u64_f64(a, b) \
++#define vmlal_laneq_u32(a, b, c, d) \
+ __extension__ \
+ ({ \
+- float64x2_t a_ = (a); \
+- uint64x2_t result; \
+- __asm__ ("fcvtzu %0.2d, %1.2d, #%2" \
++ uint32x4_t c_ = (c); \
++ uint32x2_t b_ = (b); \
++ uint64x2_t a_ = (a); \
++ uint64x2_t result; \
++ __asm__ ("umlal %0.2d, %2.2s, %3.s[%4]" \
+ : "=w"(result) \
+- : "w"(a_), "i"(b) \
++ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vcvts_n_f32_s32(a, b) \
+- __extension__ \
+- ({ \
+- int32_t a_ = (a); \
+- float32_t result; \
+- __asm__ ("scvtf %s0,%s1,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_n_s16 (int32x4_t a, int16x4_t b, int16_t c)
++{
++ int32x4_t result;
++ __asm__ ("smlal %0.4s,%2.4h,%3.h[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "x"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvts_n_f32_u32(a, b) \
+- __extension__ \
+- ({ \
+- uint32_t a_ = (a); \
+- float32_t result; \
+- __asm__ ("ucvtf %s0,%s1,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_n_s32 (int64x2_t a, int32x2_t b, int32_t c)
++{
++ int64x2_t result;
++ __asm__ ("smlal %0.2d,%2.2s,%3.s[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvts_n_s32_f32(a, b) \
+- __extension__ \
+- ({ \
+- float32_t a_ = (a); \
+- int32_t result; \
+- __asm__ ("fcvtzs %s0,%s1,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_n_u16 (uint32x4_t a, uint16x4_t b, uint16_t c)
++{
++ uint32x4_t result;
++ __asm__ ("umlal %0.4s,%2.4h,%3.h[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "x"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vcvts_n_u32_f32(a, b) \
+- __extension__ \
+- ({ \
+- float32_t a_ = (a); \
+- uint32_t result; \
+- __asm__ ("fcvtzu %s0,%s1,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_n_u32 (uint64x2_t a, uint32x2_t b, uint32_t c)
++{
++ uint64x2_t result;
++ __asm__ ("umlal %0.2d,%2.2s,%3.s[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vcvtx_f32_f64 (float64x2_t a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
+ {
+- float32x2_t result;
+- __asm__ ("fcvtxn %0.2s,%1.2d"
++ int16x8_t result;
++ __asm__ ("smlal %0.8h,%2.8b,%3.8b"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vcvtx_high_f32_f64 (float32x2_t a, float64x2_t b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
+ {
+- float32x4_t result;
+- __asm__ ("fcvtxn2 %0.4s,%1.2d"
++ int32x4_t result;
++ __asm__ ("smlal %0.4s,%2.4h,%3.4h"
+ : "=w"(result)
+- : "w" (b), "0"(a)
++ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vcvtxd_f32_f64 (float64_t a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
+ {
+- float32_t result;
+- __asm__ ("fcvtxn %s0,%d1"
++ int64x2_t result;
++ __asm__ ("smlal %0.2d,%2.2s,%3.2s"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmla_n_f32 (float32x2_t a, float32x2_t b, float32_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
+ {
+- float32x2_t result;
+- float32x2_t t1;
+- __asm__ ("fmul %1.2s, %3.2s, %4.s[0]; fadd %0.2s, %0.2s, %1.2s"
++ uint16x8_t result;
++ __asm__ ("umlal %0.8h,%2.8b,%3.8b"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
++{
++ uint32x4_t result;
++ __asm__ ("umlal %0.4s,%2.4h,%3.4h"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlal_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
++{
++ uint64x2_t result;
++ __asm__ ("umlal %0.2d,%2.2s,%3.2s"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_n_f32 (float32x4_t a, float32x4_t b, float32_t c)
++{
++ float32x4_t result;
++ float32x4_t t1;
++ __asm__ ("fmul %1.4s, %3.4s, %4.s[0]; fadd %0.4s, %0.4s, %1.4s"
+ : "=w"(result), "=w"(t1)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmla_n_s16 (int16x4_t a, int16x4_t b, int16_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_n_s16 (int16x8_t a, int16x8_t b, int16_t c)
+ {
+- int16x4_t result;
+- __asm__ ("mla %0.4h,%2.4h,%3.h[0]"
++ int16x8_t result;
++ __asm__ ("mla %0.8h,%2.8h,%3.h[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "x"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmla_n_s32 (int32x2_t a, int32x2_t b, int32_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_n_s32 (int32x4_t a, int32x4_t b, int32_t c)
+ {
+- int32x2_t result;
+- __asm__ ("mla %0.2s,%2.2s,%3.s[0]"
++ int32x4_t result;
++ __asm__ ("mla %0.4s,%2.4s,%3.s[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmla_n_u16 (uint16x4_t a, uint16x4_t b, uint16_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_n_u16 (uint16x8_t a, uint16x8_t b, uint16_t c)
+ {
+- uint16x4_t result;
+- __asm__ ("mla %0.4h,%2.4h,%3.h[0]"
++ uint16x8_t result;
++ __asm__ ("mla %0.8h,%2.8h,%3.h[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "x"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmla_n_u32 (uint32x2_t a, uint32x2_t b, uint32_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_n_u32 (uint32x4_t a, uint32x4_t b, uint32_t c)
+ {
+- uint32x2_t result;
+- __asm__ ("mla %0.2s,%2.2s,%3.s[0]"
++ uint32x4_t result;
++ __asm__ ("mla %0.4s,%2.4s,%3.s[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vmla_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
+ {
+- int8x8_t result;
+- __asm__ ("mla %0.8b, %2.8b, %3.8b"
++ int8x16_t result;
++ __asm__ ("mla %0.16b, %2.16b, %3.16b"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmla_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
+ {
+- int16x4_t result;
+- __asm__ ("mla %0.4h, %2.4h, %3.4h"
++ int16x8_t result;
++ __asm__ ("mla %0.8h, %2.8h, %3.8h"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmla_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
+ {
+- int32x2_t result;
+- __asm__ ("mla %0.2s, %2.2s, %3.2s"
++ int32x4_t result;
++ __asm__ ("mla %0.4s, %2.4s, %3.4s"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vmla_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
+ {
+- uint8x8_t result;
+- __asm__ ("mla %0.8b, %2.8b, %3.8b"
++ uint8x16_t result;
++ __asm__ ("mla %0.16b, %2.16b, %3.16b"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmla_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
+ {
+- uint16x4_t result;
+- __asm__ ("mla %0.4h, %2.4h, %3.4h"
++ uint16x8_t result;
++ __asm__ ("mla %0.8h, %2.8h, %3.8h"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmla_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
+ {
+- uint32x2_t result;
+- __asm__ ("mla %0.2s, %2.2s, %3.2s"
++ uint32x4_t result;
++ __asm__ ("mla %0.4s, %2.4s, %3.4s"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-#define vmlal_high_lane_s16(a, b, c, d) \
+- __extension__ \
+- ({ \
+- int16x4_t c_ = (c); \
+- int16x8_t b_ = (b); \
+- int32x4_t a_ = (a); \
+- int32x4_t result; \
+- __asm__ ("smlal2 %0.4s, %2.8h, %3.h[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vmlal_high_lane_s32(a, b, c, d) \
+- __extension__ \
+- ({ \
+- int32x2_t c_ = (c); \
+- int32x4_t b_ = (b); \
+- int64x2_t a_ = (a); \
+- int64x2_t result; \
+- __asm__ ("smlal2 %0.2d, %2.4s, %3.s[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_n_f32 (float32x2_t a, float32x2_t b, float32_t c)
++{
++ float32x2_t result;
++ float32x2_t t1;
++ __asm__ ("fmul %1.2s, %3.2s, %4.s[0]; fsub %0.2s, %0.2s, %1.2s"
++ : "=w"(result), "=w"(t1)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vmlal_high_lane_u16(a, b, c, d) \
+- __extension__ \
+- ({ \
+- uint16x4_t c_ = (c); \
+- uint16x8_t b_ = (b); \
+- uint32x4_t a_ = (a); \
+- uint32x4_t result; \
+- __asm__ ("umlal2 %0.4s, %2.8h, %3.h[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_n_s16 (int16x4_t a, int16x4_t b, int16_t c)
++{
++ int16x4_t result;
++ __asm__ ("mls %0.4h, %2.4h, %3.h[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "x"(c)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vmlal_high_lane_u32(a, b, c, d) \
+- __extension__ \
+- ({ \
+- uint32x2_t c_ = (c); \
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_n_s32 (int32x2_t a, int32x2_t b, int32_t c)
++{
++ int32x2_t result;
++ __asm__ ("mls %0.2s, %2.2s, %3.s[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_n_u16 (uint16x4_t a, uint16x4_t b, uint16_t c)
++{
++ uint16x4_t result;
++ __asm__ ("mls %0.4h, %2.4h, %3.h[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "x"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_n_u32 (uint32x2_t a, uint32x2_t b, uint32_t c)
++{
++ uint32x2_t result;
++ __asm__ ("mls %0.2s, %2.2s, %3.s[0]"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
++{
++ int8x8_t result;
++ __asm__ ("mls %0.8b,%2.8b,%3.8b"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
++{
++ int16x4_t result;
++ __asm__ ("mls %0.4h,%2.4h,%3.4h"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
++{
++ int32x2_t result;
++ __asm__ ("mls %0.2s,%2.2s,%3.2s"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
++{
++ uint8x8_t result;
++ __asm__ ("mls %0.8b,%2.8b,%3.8b"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
++{
++ uint16x4_t result;
++ __asm__ ("mls %0.4h,%2.4h,%3.4h"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
++{
++ uint32x2_t result;
++ __asm__ ("mls %0.2s,%2.2s,%3.2s"
++ : "=w"(result)
++ : "0"(a), "w"(b), "w"(c)
++ : /* No clobbers */);
++ return result;
++}
++
++#define vmlsl_high_lane_s16(a, b, c, d) \
++ __extension__ \
++ ({ \
++ int16x4_t c_ = (c); \
++ int16x8_t b_ = (b); \
++ int32x4_t a_ = (a); \
++ int32x4_t result; \
++ __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[%4]" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmlsl_high_lane_s32(a, b, c, d) \
++ __extension__ \
++ ({ \
++ int32x2_t c_ = (c); \
++ int32x4_t b_ = (b); \
++ int64x2_t a_ = (a); \
++ int64x2_t result; \
++ __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[%4]" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmlsl_high_lane_u16(a, b, c, d) \
++ __extension__ \
++ ({ \
++ uint16x4_t c_ = (c); \
++ uint16x8_t b_ = (b); \
++ uint32x4_t a_ = (a); \
++ uint32x4_t result; \
++ __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[%4]" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmlsl_high_lane_u32(a, b, c, d) \
++ __extension__ \
++ ({ \
++ uint32x2_t c_ = (c); \
+ uint32x4_t b_ = (b); \
+ uint64x2_t a_ = (a); \
+ uint64x2_t result; \
+- __asm__ ("umlal2 %0.2d, %2.4s, %3.s[%4]" \
++ __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_high_laneq_s16(a, b, c, d) \
++#define vmlsl_high_laneq_s16(a, b, c, d) \
+ __extension__ \
+ ({ \
+ int16x8_t c_ = (c); \
+ int16x8_t b_ = (b); \
+ int32x4_t a_ = (a); \
+ int32x4_t result; \
+- __asm__ ("smlal2 %0.4s, %2.8h, %3.h[%4]" \
++ __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_high_laneq_s32(a, b, c, d) \
++#define vmlsl_high_laneq_s32(a, b, c, d) \
+ __extension__ \
+ ({ \
+ int32x4_t c_ = (c); \
+ int32x4_t b_ = (b); \
+ int64x2_t a_ = (a); \
+ int64x2_t result; \
+- __asm__ ("smlal2 %0.2d, %2.4s, %3.s[%4]" \
++ __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_high_laneq_u16(a, b, c, d) \
++#define vmlsl_high_laneq_u16(a, b, c, d) \
+ __extension__ \
+ ({ \
+ uint16x8_t c_ = (c); \
+ uint16x8_t b_ = (b); \
+ uint32x4_t a_ = (a); \
+ uint32x4_t result; \
+- __asm__ ("umlal2 %0.4s, %2.8h, %3.h[%4]" \
++ __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_high_laneq_u32(a, b, c, d) \
++#define vmlsl_high_laneq_u32(a, b, c, d) \
+ __extension__ \
+ ({ \
+ uint32x4_t c_ = (c); \
+ uint32x4_t b_ = (b); \
+ uint64x2_t a_ = (a); \
+ uint64x2_t result; \
+- __asm__ ("umlal2 %0.2d, %2.4s, %3.s[%4]" \
++ __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlal_high_n_s16 (int32x4_t a, int16x8_t b, int16_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_n_s16 (int32x4_t a, int16x8_t b, int16_t c)
+ {
+ int32x4_t result;
+- __asm__ ("smlal2 %0.4s,%2.8h,%3.h[0]"
++ __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "x"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmlal_high_n_s32 (int64x2_t a, int32x4_t b, int32_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_n_s32 (int64x2_t a, int32x4_t b, int32_t c)
+ {
+ int64x2_t result;
+- __asm__ ("smlal2 %0.2d,%2.4s,%3.s[0]"
++ __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlal_high_n_u16 (uint32x4_t a, uint16x8_t b, uint16_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_n_u16 (uint32x4_t a, uint16x8_t b, uint16_t c)
+ {
+ uint32x4_t result;
+- __asm__ ("umlal2 %0.4s,%2.8h,%3.h[0]"
++ __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "x"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmlal_high_n_u32 (uint64x2_t a, uint32x4_t b, uint32_t c)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_n_u32 (uint64x2_t a, uint32x4_t b, uint32_t c)
+ {
+ uint64x2_t result;
+- __asm__ ("umlal2 %0.2d,%2.4s,%3.s[0]"
++ __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlal_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
+ {
+ int16x8_t result;
+- __asm__ ("smlal2 %0.8h,%2.16b,%3.16b"
++ __asm__ ("smlsl2 %0.8h,%2.16b,%3.16b"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlal_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+ {
+ int32x4_t result;
+- __asm__ ("smlal2 %0.4s,%2.8h,%3.8h"
++ __asm__ ("smlsl2 %0.4s,%2.8h,%3.8h"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmlal_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
+ {
+ int64x2_t result;
+- __asm__ ("smlal2 %0.2d,%2.4s,%3.4s"
++ __asm__ ("smlsl2 %0.2d,%2.4s,%3.4s"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlal_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
+ {
+ uint16x8_t result;
+- __asm__ ("umlal2 %0.8h,%2.16b,%3.16b"
++ __asm__ ("umlsl2 %0.8h,%2.16b,%3.16b"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlal_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
+ {
+ uint32x4_t result;
+- __asm__ ("umlal2 %0.4s,%2.8h,%3.8h"
++ __asm__ ("umlsl2 %0.4s,%2.8h,%3.8h"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmlal_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
+ {
+ uint64x2_t result;
+- __asm__ ("umlal2 %0.2d,%2.4s,%3.4s"
++ __asm__ ("umlsl2 %0.2d,%2.4s,%3.4s"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-#define vmlal_lane_s16(a, b, c, d) \
++#define vmlsl_lane_s16(a, b, c, d) \
+ __extension__ \
+ ({ \
+ int16x4_t c_ = (c); \
+ int16x4_t b_ = (b); \
+ int32x4_t a_ = (a); \
+ int32x4_t result; \
+- __asm__ ("smlal %0.4s,%2.4h,%3.h[%4]" \
++ __asm__ ("smlsl %0.4s, %2.4h, %3.h[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_lane_s32(a, b, c, d) \
++#define vmlsl_lane_s32(a, b, c, d) \
+ __extension__ \
+ ({ \
+ int32x2_t c_ = (c); \
+ int32x2_t b_ = (b); \
+ int64x2_t a_ = (a); \
+ int64x2_t result; \
+- __asm__ ("smlal %0.2d,%2.2s,%3.s[%4]" \
++ __asm__ ("smlsl %0.2d, %2.2s, %3.s[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_lane_u16(a, b, c, d) \
++#define vmlsl_lane_u16(a, b, c, d) \
+ __extension__ \
+ ({ \
+ uint16x4_t c_ = (c); \
+ uint16x4_t b_ = (b); \
+ uint32x4_t a_ = (a); \
+ uint32x4_t result; \
+- __asm__ ("umlal %0.4s,%2.4h,%3.h[%4]" \
++ __asm__ ("umlsl %0.4s, %2.4h, %3.h[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_lane_u32(a, b, c, d) \
++#define vmlsl_lane_u32(a, b, c, d) \
+ __extension__ \
+ ({ \
+ uint32x2_t c_ = (c); \
+ uint32x2_t b_ = (b); \
+ uint64x2_t a_ = (a); \
+ uint64x2_t result; \
+- __asm__ ("umlal %0.2d, %2.2s, %3.s[%4]" \
++ __asm__ ("umlsl %0.2d, %2.2s, %3.s[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_laneq_s16(a, b, c, d) \
++#define vmlsl_laneq_s16(a, b, c, d) \
+ __extension__ \
+ ({ \
+ int16x8_t c_ = (c); \
+ int16x4_t b_ = (b); \
+ int32x4_t a_ = (a); \
+ int32x4_t result; \
+- __asm__ ("smlal %0.4s, %2.4h, %3.h[%4]" \
++ __asm__ ("smlsl %0.4s, %2.4h, %3.h[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_laneq_s32(a, b, c, d) \
++#define vmlsl_laneq_s32(a, b, c, d) \
+ __extension__ \
+ ({ \
+ int32x4_t c_ = (c); \
+ int32x2_t b_ = (b); \
+ int64x2_t a_ = (a); \
+ int64x2_t result; \
+- __asm__ ("smlal %0.2d, %2.2s, %3.s[%4]" \
++ __asm__ ("smlsl %0.2d, %2.2s, %3.s[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_laneq_u16(a, b, c, d) \
++#define vmlsl_laneq_u16(a, b, c, d) \
+ __extension__ \
+ ({ \
+ uint16x8_t c_ = (c); \
+ uint16x4_t b_ = (b); \
+ uint32x4_t a_ = (a); \
+ uint32x4_t result; \
+- __asm__ ("umlal %0.4s, %2.4h, %3.h[%4]" \
++ __asm__ ("umlsl %0.4s, %2.4h, %3.h[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlal_laneq_u32(a, b, c, d) \
++#define vmlsl_laneq_u32(a, b, c, d) \
+ __extension__ \
+ ({ \
+ uint32x4_t c_ = (c); \
+ uint32x2_t b_ = (b); \
+ uint64x2_t a_ = (a); \
+ uint64x2_t result; \
+- __asm__ ("umlal %0.2d, %2.2s, %3.s[%4]" \
++ __asm__ ("umlsl %0.2d, %2.2s, %3.s[%4]" \
+ : "=w"(result) \
+ : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlal_n_s16 (int32x4_t a, int16x4_t b, int16_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_n_s16 (int32x4_t a, int16x4_t b, int16_t c)
+ {
+ int32x4_t result;
+- __asm__ ("smlal %0.4s,%2.4h,%3.h[0]"
++ __asm__ ("smlsl %0.4s, %2.4h, %3.h[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "x"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmlal_n_s32 (int64x2_t a, int32x2_t b, int32_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_n_s32 (int64x2_t a, int32x2_t b, int32_t c)
+ {
+ int64x2_t result;
+- __asm__ ("smlal %0.2d,%2.2s,%3.s[0]"
++ __asm__ ("smlsl %0.2d, %2.2s, %3.s[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlal_n_u16 (uint32x4_t a, uint16x4_t b, uint16_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_n_u16 (uint32x4_t a, uint16x4_t b, uint16_t c)
+ {
+ uint32x4_t result;
+- __asm__ ("umlal %0.4s,%2.4h,%3.h[0]"
++ __asm__ ("umlsl %0.4s, %2.4h, %3.h[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "x"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmlal_n_u32 (uint64x2_t a, uint32x2_t b, uint32_t c)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_n_u32 (uint64x2_t a, uint32x2_t b, uint32_t c)
+ {
+ uint64x2_t result;
+- __asm__ ("umlal %0.2d,%2.2s,%3.s[0]"
++ __asm__ ("umlsl %0.2d, %2.2s, %3.s[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlal_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
+ {
+ int16x8_t result;
+- __asm__ ("smlal %0.8h,%2.8b,%3.8b"
++ __asm__ ("smlsl %0.8h, %2.8b, %3.8b"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlal_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
+ {
+ int32x4_t result;
+- __asm__ ("smlal %0.4s,%2.4h,%3.4h"
++ __asm__ ("smlsl %0.4s, %2.4h, %3.4h"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmlal_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
+ {
+ int64x2_t result;
+- __asm__ ("smlal %0.2d,%2.2s,%3.2s"
++ __asm__ ("smlsl %0.2d, %2.2s, %3.2s"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlal_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
+ {
+ uint16x8_t result;
+- __asm__ ("umlal %0.8h,%2.8b,%3.8b"
++ __asm__ ("umlsl %0.8h, %2.8b, %3.8b"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlal_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
+ {
+ uint32x4_t result;
+- __asm__ ("umlal %0.4s,%2.4h,%3.4h"
++ __asm__ ("umlsl %0.4s, %2.4h, %3.4h"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmlal_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsl_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
+ {
+ uint64x2_t result;
+- __asm__ ("umlal %0.2d,%2.2s,%3.2s"
++ __asm__ ("umlsl %0.2d, %2.2s, %3.2s"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmlaq_n_f32 (float32x4_t a, float32x4_t b, float32_t c)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_n_f32 (float32x4_t a, float32x4_t b, float32_t c)
+ {
+ float32x4_t result;
+ float32x4_t t1;
+- __asm__ ("fmul %1.4s, %3.4s, %4.s[0]; fadd %0.4s, %0.4s, %1.4s"
++ __asm__ ("fmul %1.4s, %3.4s, %4.s[0]; fsub %0.4s, %0.4s, %1.4s"
+ : "=w"(result), "=w"(t1)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlaq_n_s16 (int16x8_t a, int16x8_t b, int16_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_n_s16 (int16x8_t a, int16x8_t b, int16_t c)
+ {
+ int16x8_t result;
+- __asm__ ("mla %0.8h,%2.8h,%3.h[0]"
++ __asm__ ("mls %0.8h, %2.8h, %3.h[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "x"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlaq_n_s32 (int32x4_t a, int32x4_t b, int32_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_n_s32 (int32x4_t a, int32x4_t b, int32_t c)
+ {
+ int32x4_t result;
+- __asm__ ("mla %0.4s,%2.4s,%3.s[0]"
++ __asm__ ("mls %0.4s, %2.4s, %3.s[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlaq_n_u16 (uint16x8_t a, uint16x8_t b, uint16_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_n_u16 (uint16x8_t a, uint16x8_t b, uint16_t c)
+ {
+ uint16x8_t result;
+- __asm__ ("mla %0.8h,%2.8h,%3.h[0]"
++ __asm__ ("mls %0.8h, %2.8h, %3.h[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "x"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlaq_n_u32 (uint32x4_t a, uint32x4_t b, uint32_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_n_u32 (uint32x4_t a, uint32x4_t b, uint32_t c)
+ {
+ uint32x4_t result;
+- __asm__ ("mla %0.4s,%2.4s,%3.s[0]"
++ __asm__ ("mls %0.4s, %2.4s, %3.s[0]"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vmlaq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
+ {
+ int8x16_t result;
+- __asm__ ("mla %0.16b, %2.16b, %3.16b"
++ __asm__ ("mls %0.16b,%2.16b,%3.16b"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlaq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
+ {
+ int16x8_t result;
+- __asm__ ("mla %0.8h, %2.8h, %3.8h"
++ __asm__ ("mls %0.8h,%2.8h,%3.8h"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlaq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
+ {
+ int32x4_t result;
+- __asm__ ("mla %0.4s, %2.4s, %3.4s"
++ __asm__ ("mls %0.4s,%2.4s,%3.4s"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vmlaq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
+ {
+ uint8x16_t result;
+- __asm__ ("mla %0.16b, %2.16b, %3.16b"
++ __asm__ ("mls %0.16b,%2.16b,%3.16b"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlaq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
+ {
+ uint16x8_t result;
+- __asm__ ("mla %0.8h, %2.8h, %3.8h"
++ __asm__ ("mls %0.8h,%2.8h,%3.8h"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlaq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
+ {
+ uint32x4_t result;
+- __asm__ ("mla %0.4s, %2.4s, %3.4s"
++ __asm__ ("mls %0.4s,%2.4s,%3.4s"
+ : "=w"(result)
+ : "0"(a), "w"(b), "w"(c)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmls_n_f32 (float32x2_t a, float32x2_t b, float32_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_high_s8 (int8x16_t a)
+ {
+- float32x2_t result;
+- float32x2_t t1;
+- __asm__ ("fmul %1.2s, %3.2s, %4.s[0]; fsub %0.2s, %0.2s, %1.2s"
+- : "=w"(result), "=w"(t1)
+- : "0"(a), "w"(b), "w"(c)
++ int16x8_t result;
++ __asm__ ("sshll2 %0.8h,%1.16b,#0"
++ : "=w"(result)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmls_n_s16 (int16x4_t a, int16x4_t b, int16_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_high_s16 (int16x8_t a)
+ {
+- int16x4_t result;
+- __asm__ ("mls %0.4h, %2.4h, %3.h[0]"
++ int32x4_t result;
++ __asm__ ("sshll2 %0.4s,%1.8h,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "x"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmls_n_s32 (int32x2_t a, int32x2_t b, int32_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_high_s32 (int32x4_t a)
+ {
+- int32x2_t result;
+- __asm__ ("mls %0.2s, %2.2s, %3.s[0]"
++ int64x2_t result;
++ __asm__ ("sshll2 %0.2d,%1.4s,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmls_n_u16 (uint16x4_t a, uint16x4_t b, uint16_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_high_u8 (uint8x16_t a)
+ {
+- uint16x4_t result;
+- __asm__ ("mls %0.4h, %2.4h, %3.h[0]"
++ uint16x8_t result;
++ __asm__ ("ushll2 %0.8h,%1.16b,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "x"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmls_n_u32 (uint32x2_t a, uint32x2_t b, uint32_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_high_u16 (uint16x8_t a)
+ {
+- uint32x2_t result;
+- __asm__ ("mls %0.2s, %2.2s, %3.s[0]"
++ uint32x4_t result;
++ __asm__ ("ushll2 %0.4s,%1.8h,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vmls_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_high_u32 (uint32x4_t a)
+ {
+- int8x8_t result;
+- __asm__ ("mls %0.8b,%2.8b,%3.8b"
++ uint64x2_t result;
++ __asm__ ("ushll2 %0.2d,%1.4s,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmls_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_s8 (int8x8_t a)
+ {
+- int16x4_t result;
+- __asm__ ("mls %0.4h,%2.4h,%3.4h"
++ int16x8_t result;
++ __asm__ ("sshll %0.8h,%1.8b,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmls_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_s16 (int16x4_t a)
+ {
+- int32x2_t result;
+- __asm__ ("mls %0.2s,%2.2s,%3.2s"
++ int32x4_t result;
++ __asm__ ("sshll %0.4s,%1.4h,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vmls_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_s32 (int32x2_t a)
+ {
+- uint8x8_t result;
+- __asm__ ("mls %0.8b,%2.8b,%3.8b"
++ int64x2_t result;
++ __asm__ ("sshll %0.2d,%1.2s,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmls_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_u8 (uint8x8_t a)
+ {
+- uint16x4_t result;
+- __asm__ ("mls %0.4h,%2.4h,%3.4h"
++ uint16x8_t result;
++ __asm__ ("ushll %0.8h,%1.8b,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmls_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_u16 (uint16x4_t a)
+ {
+- uint32x2_t result;
+- __asm__ ("mls %0.2s,%2.2s,%3.2s"
++ uint32x4_t result;
++ __asm__ ("ushll %0.4s,%1.4h,#0"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-#define vmlsl_high_lane_s16(a, b, c, d) \
+- __extension__ \
+- ({ \
+- int16x4_t c_ = (c); \
+- int16x8_t b_ = (b); \
+- int32x4_t a_ = (a); \
+- int32x4_t result; \
+- __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovl_u32 (uint32x2_t a)
++{
++ uint64x2_t result;
++ __asm__ ("ushll %0.2d,%1.2s,#0"
++ : "=w"(result)
++ : "w"(a)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vmlsl_high_lane_s32(a, b, c, d) \
+- __extension__ \
+- ({ \
+- int32x2_t c_ = (c); \
+- int32x4_t b_ = (b); \
+- int64x2_t a_ = (a); \
+- int64x2_t result; \
+- __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_high_s16 (int8x8_t a, int16x8_t b)
++{
++ int8x16_t result = vcombine_s8 (a, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("xtn2 %0.16b,%1.8h"
++ : "+w"(result)
++ : "w"(b)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vmlsl_high_lane_u16(a, b, c, d) \
+- __extension__ \
+- ({ \
+- uint16x4_t c_ = (c); \
+- uint16x8_t b_ = (b); \
+- uint32x4_t a_ = (a); \
+- uint32x4_t result; \
+- __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_high_s32 (int16x4_t a, int32x4_t b)
++{
++ int16x8_t result = vcombine_s16 (a, vcreate_s16 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("xtn2 %0.8h,%1.4s"
++ : "+w"(result)
++ : "w"(b)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vmlsl_high_lane_u32(a, b, c, d) \
+- __extension__ \
+- ({ \
+- uint32x2_t c_ = (c); \
+- uint32x4_t b_ = (b); \
+- uint64x2_t a_ = (a); \
+- uint64x2_t result; \
+- __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_high_s64 (int32x2_t a, int64x2_t b)
++{
++ int32x4_t result = vcombine_s32 (a, vcreate_s32 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("xtn2 %0.4s,%1.2d"
++ : "+w"(result)
++ : "w"(b)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vmlsl_high_laneq_s16(a, b, c, d) \
+- __extension__ \
+- ({ \
+- int16x8_t c_ = (c); \
+- int16x8_t b_ = (b); \
+- int32x4_t a_ = (a); \
+- int32x4_t result; \
+- __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_high_u16 (uint8x8_t a, uint16x8_t b)
++{
++ uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("xtn2 %0.16b,%1.8h"
++ : "+w"(result)
++ : "w"(b)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vmlsl_high_laneq_s32(a, b, c, d) \
+- __extension__ \
+- ({ \
+- int32x4_t c_ = (c); \
+- int32x4_t b_ = (b); \
+- int64x2_t a_ = (a); \
+- int64x2_t result; \
+- __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vmlsl_high_laneq_u16(a, b, c, d) \
+- __extension__ \
+- ({ \
+- uint16x8_t c_ = (c); \
+- uint16x8_t b_ = (b); \
+- uint32x4_t a_ = (a); \
+- uint32x4_t result; \
+- __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vmlsl_high_laneq_u32(a, b, c, d) \
+- __extension__ \
+- ({ \
+- uint32x4_t c_ = (c); \
+- uint32x4_t b_ = (b); \
+- uint64x2_t a_ = (a); \
+- uint64x2_t result; \
+- __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[%4]" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlsl_high_n_s16 (int32x4_t a, int16x8_t b, int16_t c)
+-{
+- int32x4_t result;
+- __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[0]"
+- : "=w"(result)
+- : "0"(a), "w"(b), "x"(c)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmlsl_high_n_s32 (int64x2_t a, int32x4_t b, int32_t c)
+-{
+- int64x2_t result;
+- __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[0]"
+- : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlsl_high_n_u16 (uint32x4_t a, uint16x8_t b, uint16_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_high_u32 (uint16x4_t a, uint32x4_t b)
+ {
+- uint32x4_t result;
+- __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[0]"
+- : "=w"(result)
+- : "0"(a), "w"(b), "x"(c)
++ uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("xtn2 %0.8h,%1.4s"
++ : "+w"(result)
++ : "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmlsl_high_n_u32 (uint64x2_t a, uint32x4_t b, uint32_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_high_u64 (uint32x2_t a, uint64x2_t b)
+ {
+- uint64x2_t result;
+- __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[0]"
+- : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("xtn2 %0.4s,%1.2d"
++ : "+w"(result)
++ : "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlsl_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_s16 (int16x8_t a)
+ {
+- int16x8_t result;
+- __asm__ ("smlsl2 %0.8h,%2.16b,%3.16b"
++ int8x8_t result;
++ __asm__ ("xtn %0.8b,%1.8h"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlsl_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_s32 (int32x4_t a)
+ {
+- int32x4_t result;
+- __asm__ ("smlsl2 %0.4s,%2.8h,%3.8h"
++ int16x4_t result;
++ __asm__ ("xtn %0.4h,%1.4s"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmlsl_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_s64 (int64x2_t a)
+ {
+- int64x2_t result;
+- __asm__ ("smlsl2 %0.2d,%2.4s,%3.4s"
++ int32x2_t result;
++ __asm__ ("xtn %0.2s,%1.2d"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlsl_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_u16 (uint16x8_t a)
+ {
+- uint16x8_t result;
+- __asm__ ("umlsl2 %0.8h,%2.16b,%3.16b"
++ uint8x8_t result;
++ __asm__ ("xtn %0.8b,%1.8h"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlsl_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_u32 (uint32x4_t a)
+ {
+- uint32x4_t result;
+- __asm__ ("umlsl2 %0.4s,%2.8h,%3.8h"
++ uint16x4_t result;
++ __asm__ ("xtn %0.4h,%1.4s"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmlsl_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovn_u64 (uint64x2_t a)
+ {
+- uint64x2_t result;
+- __asm__ ("umlsl2 %0.2d,%2.4s,%3.4s"
++ uint32x2_t result;
++ __asm__ ("xtn %0.2s,%1.2d"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-#define vmlsl_lane_s16(a, b, c, d) \
++#define vmull_high_lane_s16(a, b, c) \
+ __extension__ \
+ ({ \
+- int16x4_t c_ = (c); \
+ int16x4_t b_ = (b); \
+- int32x4_t a_ = (a); \
++ int16x8_t a_ = (a); \
+ int32x4_t result; \
+- __asm__ ("smlsl %0.4s, %2.4h, %3.h[%4]" \
++ __asm__ ("smull2 %0.4s, %1.8h, %2.h[%3]" \
+ : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
++ : "w"(a_), "x"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlsl_lane_s32(a, b, c, d) \
++#define vmull_high_lane_s32(a, b, c) \
+ __extension__ \
+ ({ \
+- int32x2_t c_ = (c); \
+ int32x2_t b_ = (b); \
+- int64x2_t a_ = (a); \
++ int32x4_t a_ = (a); \
+ int64x2_t result; \
+- __asm__ ("smlsl %0.2d, %2.2s, %3.s[%4]" \
++ __asm__ ("smull2 %0.2d, %1.4s, %2.s[%3]" \
+ : "=w"(result) \
+- : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
++ : "w"(a_), "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlsl_lane_u16(a, b, c, d) \
++#define vmull_high_lane_u16(a, b, c) \
+ __extension__ \
+ ({ \
+- uint16x4_t c_ = (c); \
+ uint16x4_t b_ = (b); \
+- uint32x4_t a_ = (a); \
++ uint16x8_t a_ = (a); \
+ uint32x4_t result; \
+- __asm__ ("umlsl %0.4s, %2.4h, %3.h[%4]" \
++ __asm__ ("umull2 %0.4s, %1.8h, %2.h[%3]" \
+ : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
++ : "w"(a_), "x"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlsl_lane_u32(a, b, c, d) \
++#define vmull_high_lane_u32(a, b, c) \
+ __extension__ \
+ ({ \
+- uint32x2_t c_ = (c); \
+ uint32x2_t b_ = (b); \
+- uint64x2_t a_ = (a); \
++ uint32x4_t a_ = (a); \
+ uint64x2_t result; \
+- __asm__ ("umlsl %0.2d, %2.2s, %3.s[%4]" \
++ __asm__ ("umull2 %0.2d, %1.4s, %2.s[%3]" \
+ : "=w"(result) \
+- : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
++ : "w"(a_), "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlsl_laneq_s16(a, b, c, d) \
++#define vmull_high_laneq_s16(a, b, c) \
+ __extension__ \
+ ({ \
+- int16x8_t c_ = (c); \
+- int16x4_t b_ = (b); \
+- int32x4_t a_ = (a); \
++ int16x8_t b_ = (b); \
++ int16x8_t a_ = (a); \
+ int32x4_t result; \
+- __asm__ ("smlsl %0.4s, %2.4h, %3.h[%4]" \
++ __asm__ ("smull2 %0.4s, %1.8h, %2.h[%3]" \
+ : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
++ : "w"(a_), "x"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlsl_laneq_s32(a, b, c, d) \
++#define vmull_high_laneq_s32(a, b, c) \
+ __extension__ \
+ ({ \
+- int32x4_t c_ = (c); \
+- int32x2_t b_ = (b); \
+- int64x2_t a_ = (a); \
++ int32x4_t b_ = (b); \
++ int32x4_t a_ = (a); \
+ int64x2_t result; \
+- __asm__ ("smlsl %0.2d, %2.2s, %3.s[%4]" \
++ __asm__ ("smull2 %0.2d, %1.4s, %2.s[%3]" \
+ : "=w"(result) \
+- : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
++ : "w"(a_), "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlsl_laneq_u16(a, b, c, d) \
++#define vmull_high_laneq_u16(a, b, c) \
+ __extension__ \
+ ({ \
+- uint16x8_t c_ = (c); \
+- uint16x4_t b_ = (b); \
+- uint32x4_t a_ = (a); \
++ uint16x8_t b_ = (b); \
++ uint16x8_t a_ = (a); \
+ uint32x4_t result; \
+- __asm__ ("umlsl %0.4s, %2.4h, %3.h[%4]" \
++ __asm__ ("umull2 %0.4s, %1.8h, %2.h[%3]" \
+ : "=w"(result) \
+- : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
++ : "w"(a_), "x"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmlsl_laneq_u32(a, b, c, d) \
++#define vmull_high_laneq_u32(a, b, c) \
+ __extension__ \
+ ({ \
+- uint32x4_t c_ = (c); \
+- uint32x2_t b_ = (b); \
+- uint64x2_t a_ = (a); \
++ uint32x4_t b_ = (b); \
++ uint32x4_t a_ = (a); \
+ uint64x2_t result; \
+- __asm__ ("umlsl %0.2d, %2.2s, %3.s[%4]" \
++ __asm__ ("umull2 %0.2d, %1.4s, %2.s[%3]" \
+ : "=w"(result) \
+- : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
++ : "w"(a_), "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlsl_n_s16 (int32x4_t a, int16x4_t b, int16_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_n_s16 (int16x8_t a, int16_t b)
+ {
+ int32x4_t result;
+- __asm__ ("smlsl %0.4s, %2.4h, %3.h[0]"
++ __asm__ ("smull2 %0.4s,%1.8h,%2.h[0]"
+ : "=w"(result)
+- : "0"(a), "w"(b), "x"(c)
++ : "w"(a), "x"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmlsl_n_s32 (int64x2_t a, int32x2_t b, int32_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_n_s32 (int32x4_t a, int32_t b)
+ {
+ int64x2_t result;
+- __asm__ ("smlsl %0.2d, %2.2s, %3.s[0]"
++ __asm__ ("smull2 %0.2d,%1.4s,%2.s[0]"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlsl_n_u16 (uint32x4_t a, uint16x4_t b, uint16_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_n_u16 (uint16x8_t a, uint16_t b)
+ {
+ uint32x4_t result;
+- __asm__ ("umlsl %0.4s, %2.4h, %3.h[0]"
++ __asm__ ("umull2 %0.4s,%1.8h,%2.h[0]"
+ : "=w"(result)
+- : "0"(a), "w"(b), "x"(c)
++ : "w"(a), "x"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmlsl_n_u32 (uint64x2_t a, uint32x2_t b, uint32_t c)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_n_u32 (uint32x4_t a, uint32_t b)
+ {
+ uint64x2_t result;
+- __asm__ ("umlsl %0.2d, %2.2s, %3.s[0]"
++ __asm__ ("umull2 %0.2d,%1.4s,%2.s[0]"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlsl_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_p8 (poly8x16_t a, poly8x16_t b)
+ {
+- int16x8_t result;
+- __asm__ ("smlsl %0.8h, %2.8b, %3.8b"
++ poly16x8_t result;
++ __asm__ ("pmull2 %0.8h,%1.16b,%2.16b"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlsl_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_s8 (int8x16_t a, int8x16_t b)
+ {
+- int32x4_t result;
+- __asm__ ("smlsl %0.4s, %2.4h, %3.4h"
++ int16x8_t result;
++ __asm__ ("smull2 %0.8h,%1.16b,%2.16b"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmlsl_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_s16 (int16x8_t a, int16x8_t b)
+ {
+- int64x2_t result;
+- __asm__ ("smlsl %0.2d, %2.2s, %3.2s"
++ int32x4_t result;
++ __asm__ ("smull2 %0.4s,%1.8h,%2.8h"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlsl_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_s32 (int32x4_t a, int32x4_t b)
+ {
+- uint16x8_t result;
+- __asm__ ("umlsl %0.8h, %2.8b, %3.8b"
++ int64x2_t result;
++ __asm__ ("smull2 %0.2d,%1.4s,%2.4s"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlsl_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_u8 (uint8x16_t a, uint8x16_t b)
+ {
+- uint32x4_t result;
+- __asm__ ("umlsl %0.4s, %2.4h, %3.4h"
++ uint16x8_t result;
++ __asm__ ("umull2 %0.8h,%1.16b,%2.16b"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmlsl_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_u16 (uint16x8_t a, uint16x8_t b)
+ {
+- uint64x2_t result;
+- __asm__ ("umlsl %0.2d, %2.2s, %3.2s"
++ uint32x4_t result;
++ __asm__ ("umull2 %0.4s,%1.8h,%2.8h"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmlsq_n_f32 (float32x4_t a, float32x4_t b, float32_t c)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_u32 (uint32x4_t a, uint32x4_t b)
+ {
+- float32x4_t result;
+- float32x4_t t1;
+- __asm__ ("fmul %1.4s, %3.4s, %4.s[0]; fsub %0.4s, %0.4s, %1.4s"
+- : "=w"(result), "=w"(t1)
+- : "0"(a), "w"(b), "w"(c)
++ uint64x2_t result;
++ __asm__ ("umull2 %0.2d,%1.4s,%2.4s"
++ : "=w"(result)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlsq_n_s16 (int16x8_t a, int16x8_t b, int16_t c)
++#define vmull_lane_s16(a, b, c) \
++ __extension__ \
++ ({ \
++ int16x4_t b_ = (b); \
++ int16x4_t a_ = (a); \
++ int32x4_t result; \
++ __asm__ ("smull %0.4s,%1.4h,%2.h[%3]" \
++ : "=w"(result) \
++ : "w"(a_), "x"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmull_lane_s32(a, b, c) \
++ __extension__ \
++ ({ \
++ int32x2_t b_ = (b); \
++ int32x2_t a_ = (a); \
++ int64x2_t result; \
++ __asm__ ("smull %0.2d,%1.2s,%2.s[%3]" \
++ : "=w"(result) \
++ : "w"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmull_lane_u16(a, b, c) \
++ __extension__ \
++ ({ \
++ uint16x4_t b_ = (b); \
++ uint16x4_t a_ = (a); \
++ uint32x4_t result; \
++ __asm__ ("umull %0.4s,%1.4h,%2.h[%3]" \
++ : "=w"(result) \
++ : "w"(a_), "x"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmull_lane_u32(a, b, c) \
++ __extension__ \
++ ({ \
++ uint32x2_t b_ = (b); \
++ uint32x2_t a_ = (a); \
++ uint64x2_t result; \
++ __asm__ ("umull %0.2d, %1.2s, %2.s[%3]" \
++ : "=w"(result) \
++ : "w"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmull_laneq_s16(a, b, c) \
++ __extension__ \
++ ({ \
++ int16x8_t b_ = (b); \
++ int16x4_t a_ = (a); \
++ int32x4_t result; \
++ __asm__ ("smull %0.4s, %1.4h, %2.h[%3]" \
++ : "=w"(result) \
++ : "w"(a_), "x"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmull_laneq_s32(a, b, c) \
++ __extension__ \
++ ({ \
++ int32x4_t b_ = (b); \
++ int32x2_t a_ = (a); \
++ int64x2_t result; \
++ __asm__ ("smull %0.2d, %1.2s, %2.s[%3]" \
++ : "=w"(result) \
++ : "w"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmull_laneq_u16(a, b, c) \
++ __extension__ \
++ ({ \
++ uint16x8_t b_ = (b); \
++ uint16x4_t a_ = (a); \
++ uint32x4_t result; \
++ __asm__ ("umull %0.4s, %1.4h, %2.h[%3]" \
++ : "=w"(result) \
++ : "w"(a_), "x"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vmull_laneq_u32(a, b, c) \
++ __extension__ \
++ ({ \
++ uint32x4_t b_ = (b); \
++ uint32x2_t a_ = (a); \
++ uint64x2_t result; \
++ __asm__ ("umull %0.2d, %1.2s, %2.s[%3]" \
++ : "=w"(result) \
++ : "w"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_n_s16 (int16x4_t a, int16_t b)
+ {
+- int16x8_t result;
+- __asm__ ("mls %0.8h, %2.8h, %3.h[0]"
++ int32x4_t result;
++ __asm__ ("smull %0.4s,%1.4h,%2.h[0]"
+ : "=w"(result)
+- : "0"(a), "w"(b), "x"(c)
++ : "w"(a), "x"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlsq_n_s32 (int32x4_t a, int32x4_t b, int32_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_n_s32 (int32x2_t a, int32_t b)
+ {
+- int32x4_t result;
+- __asm__ ("mls %0.4s, %2.4s, %3.s[0]"
++ int64x2_t result;
++ __asm__ ("smull %0.2d,%1.2s,%2.s[0]"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlsq_n_u16 (uint16x8_t a, uint16x8_t b, uint16_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_n_u16 (uint16x4_t a, uint16_t b)
+ {
+- uint16x8_t result;
+- __asm__ ("mls %0.8h, %2.8h, %3.h[0]"
++ uint32x4_t result;
++ __asm__ ("umull %0.4s,%1.4h,%2.h[0]"
+ : "=w"(result)
+- : "0"(a), "w"(b), "x"(c)
++ : "w"(a), "x"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlsq_n_u32 (uint32x4_t a, uint32x4_t b, uint32_t c)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_n_u32 (uint32x2_t a, uint32_t b)
+ {
+- uint32x4_t result;
+- __asm__ ("mls %0.4s, %2.4s, %3.s[0]"
++ uint64x2_t result;
++ __asm__ ("umull %0.2d,%1.2s,%2.s[0]"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vmlsq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_p8 (poly8x8_t a, poly8x8_t b)
+ {
+- int8x16_t result;
+- __asm__ ("mls %0.16b,%2.16b,%3.16b"
++ poly16x8_t result;
++ __asm__ ("pmull %0.8h, %1.8b, %2.8b"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlsq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_s8 (int8x8_t a, int8x8_t b)
+ {
+ int16x8_t result;
+- __asm__ ("mls %0.8h,%2.8h,%3.8h"
++ __asm__ ("smull %0.8h, %1.8b, %2.8b"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlsq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_s16 (int16x4_t a, int16x4_t b)
+ {
+ int32x4_t result;
+- __asm__ ("mls %0.4s,%2.4s,%3.4s"
++ __asm__ ("smull %0.4s, %1.4h, %2.4h"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vmlsq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_s32 (int32x2_t a, int32x2_t b)
+ {
+- uint8x16_t result;
+- __asm__ ("mls %0.16b,%2.16b,%3.16b"
++ int64x2_t result;
++ __asm__ ("smull %0.2d, %1.2s, %2.2s"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlsq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_u8 (uint8x8_t a, uint8x8_t b)
+ {
+ uint16x8_t result;
+- __asm__ ("mls %0.8h,%2.8h,%3.8h"
++ __asm__ ("umull %0.8h, %1.8b, %2.8b"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlsq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_u16 (uint16x4_t a, uint16x4_t b)
+ {
+ uint32x4_t result;
+- __asm__ ("mls %0.4s,%2.4s,%3.4s"
++ __asm__ ("umull %0.4s, %1.4h, %2.4h"
+ : "=w"(result)
+- : "0"(a), "w"(b), "w"(c)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmovl_high_s8 (int8x16_t a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_u32 (uint32x2_t a, uint32x2_t b)
+ {
+- int16x8_t result;
+- __asm__ ("sshll2 %0.8h,%1.16b,#0"
++ uint64x2_t result;
++ __asm__ ("umull %0.2d, %1.2s, %2.2s"
+ : "=w"(result)
+- : "w"(a)
++ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmovl_high_s16 (int16x8_t a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadal_s8 (int16x4_t a, int8x8_t b)
+ {
+- int32x4_t result;
+- __asm__ ("sshll2 %0.4s,%1.8h,#0"
++ int16x4_t result;
++ __asm__ ("sadalp %0.4h,%2.8b"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmovl_high_s32 (int32x4_t a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadal_s16 (int32x2_t a, int16x4_t b)
+ {
+- int64x2_t result;
+- __asm__ ("sshll2 %0.2d,%1.4s,#0"
++ int32x2_t result;
++ __asm__ ("sadalp %0.2s,%2.4h"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmovl_high_u8 (uint8x16_t a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadal_s32 (int64x1_t a, int32x2_t b)
+ {
+- uint16x8_t result;
+- __asm__ ("ushll2 %0.8h,%1.16b,#0"
++ int64x1_t result;
++ __asm__ ("sadalp %0.1d,%2.2s"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmovl_high_u16 (uint16x8_t a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadal_u8 (uint16x4_t a, uint8x8_t b)
+ {
+- uint32x4_t result;
+- __asm__ ("ushll2 %0.4s,%1.8h,#0"
++ uint16x4_t result;
++ __asm__ ("uadalp %0.4h,%2.8b"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmovl_high_u32 (uint32x4_t a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadal_u16 (uint32x2_t a, uint16x4_t b)
+ {
+- uint64x2_t result;
+- __asm__ ("ushll2 %0.2d,%1.4s,#0"
++ uint32x2_t result;
++ __asm__ ("uadalp %0.2s,%2.4h"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmovl_s8 (int8x8_t a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadal_u32 (uint64x1_t a, uint32x2_t b)
++{
++ uint64x1_t result;
++ __asm__ ("uadalp %0.1d,%2.2s"
++ : "=w"(result)
++ : "0"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadalq_s8 (int16x8_t a, int8x16_t b)
+ {
+ int16x8_t result;
+- __asm__ ("sshll %0.8h,%1.8b,#0"
++ __asm__ ("sadalp %0.8h,%2.16b"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmovl_s16 (int16x4_t a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadalq_s16 (int32x4_t a, int16x8_t b)
+ {
+ int32x4_t result;
+- __asm__ ("sshll %0.4s,%1.4h,#0"
++ __asm__ ("sadalp %0.4s,%2.8h"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmovl_s32 (int32x2_t a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadalq_s32 (int64x2_t a, int32x4_t b)
+ {
+ int64x2_t result;
+- __asm__ ("sshll %0.2d,%1.2s,#0"
++ __asm__ ("sadalp %0.2d,%2.4s"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmovl_u8 (uint8x8_t a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadalq_u8 (uint16x8_t a, uint8x16_t b)
+ {
+ uint16x8_t result;
+- __asm__ ("ushll %0.8h,%1.8b,#0"
++ __asm__ ("uadalp %0.8h,%2.16b"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmovl_u16 (uint16x4_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadalq_u16 (uint32x4_t a, uint16x8_t b)
+ {
+ uint32x4_t result;
+- __asm__ ("ushll %0.4s,%1.4h,#0"
++ __asm__ ("uadalp %0.4s,%2.8h"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmovl_u32 (uint32x2_t a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadalq_u32 (uint64x2_t a, uint32x4_t b)
+ {
+ uint64x2_t result;
+- __asm__ ("ushll %0.2d,%1.2s,#0"
++ __asm__ ("uadalp %0.2d,%2.4s"
+ : "=w"(result)
+- : "w"(a)
++ : "0"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vmovn_high_s16 (int8x8_t a, int16x8_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddl_s8 (int8x8_t a)
+ {
+- int8x16_t result = vcombine_s8 (a, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("xtn2 %0.16b,%1.8h"
+- : "+w"(result)
+- : "w"(b)
++ int16x4_t result;
++ __asm__ ("saddlp %0.4h,%1.8b"
++ : "=w"(result)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmovn_high_s32 (int16x4_t a, int32x4_t b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddl_s16 (int16x4_t a)
+ {
+- int16x8_t result = vcombine_s16 (a, vcreate_s16 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("xtn2 %0.8h,%1.4s"
+- : "+w"(result)
+- : "w"(b)
++ int32x2_t result;
++ __asm__ ("saddlp %0.2s,%1.4h"
++ : "=w"(result)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmovn_high_s64 (int32x2_t a, int64x2_t b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddl_s32 (int32x2_t a)
+ {
+- int32x4_t result = vcombine_s32 (a, vcreate_s32 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("xtn2 %0.4s,%1.2d"
+- : "+w"(result)
+- : "w"(b)
++ int64x1_t result;
++ __asm__ ("saddlp %0.1d,%1.2s"
++ : "=w"(result)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vmovn_high_u16 (uint8x8_t a, uint16x8_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddl_u8 (uint8x8_t a)
+ {
+- uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("xtn2 %0.16b,%1.8h"
+- : "+w"(result)
+- : "w"(b)
++ uint16x4_t result;
++ __asm__ ("uaddlp %0.4h,%1.8b"
++ : "=w"(result)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmovn_high_u32 (uint16x4_t a, uint32x4_t b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddl_u16 (uint16x4_t a)
+ {
+- uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("xtn2 %0.8h,%1.4s"
+- : "+w"(result)
+- : "w"(b)
++ uint32x2_t result;
++ __asm__ ("uaddlp %0.2s,%1.4h"
++ : "=w"(result)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmovn_high_u64 (uint32x2_t a, uint64x2_t b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddl_u32 (uint32x2_t a)
+ {
+- uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("xtn2 %0.4s,%1.2d"
+- : "+w"(result)
+- : "w"(b)
++ uint64x1_t result;
++ __asm__ ("uaddlp %0.1d,%1.2s"
++ : "=w"(result)
++ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vmovn_s16 (int16x8_t a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddlq_s8 (int8x16_t a)
+ {
+- int8x8_t result;
+- __asm__ ("xtn %0.8b,%1.8h"
++ int16x8_t result;
++ __asm__ ("saddlp %0.8h,%1.16b"
+ : "=w"(result)
+ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmovn_s32 (int32x4_t a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddlq_s16 (int16x8_t a)
+ {
+- int16x4_t result;
+- __asm__ ("xtn %0.4h,%1.4s"
++ int32x4_t result;
++ __asm__ ("saddlp %0.4s,%1.8h"
+ : "=w"(result)
+ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmovn_s64 (int64x2_t a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddlq_s32 (int32x4_t a)
+ {
+- int32x2_t result;
+- __asm__ ("xtn %0.2s,%1.2d"
++ int64x2_t result;
++ __asm__ ("saddlp %0.2d,%1.4s"
+ : "=w"(result)
+ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vmovn_u16 (uint16x8_t a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddlq_u8 (uint8x16_t a)
+ {
+- uint8x8_t result;
+- __asm__ ("xtn %0.8b,%1.8h"
++ uint16x8_t result;
++ __asm__ ("uaddlp %0.8h,%1.16b"
+ : "=w"(result)
+ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmovn_u32 (uint32x4_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddlq_u16 (uint16x8_t a)
+ {
+- uint16x4_t result;
+- __asm__ ("xtn %0.4h,%1.4s"
++ uint32x4_t result;
++ __asm__ ("uaddlp %0.4s,%1.8h"
+ : "=w"(result)
+ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmovn_u64 (uint64x2_t a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddlq_u32 (uint32x4_t a)
+ {
+- uint32x2_t result;
+- __asm__ ("xtn %0.2s,%1.2d"
++ uint64x2_t result;
++ __asm__ ("uaddlp %0.2d,%1.4s"
+ : "=w"(result)
+ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmul_n_f32 (float32x2_t a, float32_t b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_s8 (int8x16_t a, int8x16_t b)
+ {
+- float32x2_t result;
+- __asm__ ("fmul %0.2s,%1.2s,%2.s[0]"
++ int8x16_t result;
++ __asm__ ("addp %0.16b,%1.16b,%2.16b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_s16 (int16x8_t a, int16x8_t b)
++{
++ int16x8_t result;
++ __asm__ ("addp %0.8h,%1.8h,%2.8h"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_s32 (int32x4_t a, int32x4_t b)
++{
++ int32x4_t result;
++ __asm__ ("addp %0.4s,%1.4s,%2.4s"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_s64 (int64x2_t a, int64x2_t b)
++{
++ int64x2_t result;
++ __asm__ ("addp %0.2d,%1.2d,%2.2d"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_u8 (uint8x16_t a, uint8x16_t b)
++{
++ uint8x16_t result;
++ __asm__ ("addp %0.16b,%1.16b,%2.16b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_u16 (uint16x8_t a, uint16x8_t b)
++{
++ uint16x8_t result;
++ __asm__ ("addp %0.8h,%1.8h,%2.8h"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_u32 (uint32x4_t a, uint32x4_t b)
++{
++ uint32x4_t result;
++ __asm__ ("addp %0.4s,%1.4s,%2.4s"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_u64 (uint64x2_t a, uint64x2_t b)
++{
++ uint64x2_t result;
++ __asm__ ("addp %0.2d,%1.2d,%2.2d"
+ : "=w"(result)
+ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmul_n_s16 (int16x4_t a, int16_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulh_n_s16 (int16x4_t a, int16_t b)
+ {
+ int16x4_t result;
+- __asm__ ("mul %0.4h,%1.4h,%2.h[0]"
++ __asm__ ("sqdmulh %0.4h,%1.4h,%2.h[0]"
+ : "=w"(result)
+ : "w"(a), "x"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmul_n_s32 (int32x2_t a, int32_t b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulh_n_s32 (int32x2_t a, int32_t b)
+ {
+ int32x2_t result;
+- __asm__ ("mul %0.2s,%1.2s,%2.s[0]"
++ __asm__ ("sqdmulh %0.2s,%1.2s,%2.s[0]"
+ : "=w"(result)
+ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmul_n_u16 (uint16x4_t a, uint16_t b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhq_n_s16 (int16x8_t a, int16_t b)
+ {
+- uint16x4_t result;
+- __asm__ ("mul %0.4h,%1.4h,%2.h[0]"
++ int16x8_t result;
++ __asm__ ("sqdmulh %0.8h,%1.8h,%2.h[0]"
+ : "=w"(result)
+ : "w"(a), "x"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmul_n_u32 (uint32x2_t a, uint32_t b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhq_n_s32 (int32x4_t a, int32_t b)
+ {
+- uint32x2_t result;
+- __asm__ ("mul %0.2s,%1.2s,%2.s[0]"
++ int32x4_t result;
++ __asm__ ("sqdmulh %0.4s,%1.4s,%2.s[0]"
+ : "=w"(result)
+ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-#define vmull_high_lane_s16(a, b, c) \
+- __extension__ \
+- ({ \
+- int16x4_t b_ = (b); \
+- int16x8_t a_ = (a); \
+- int32x4_t result; \
+- __asm__ ("smull2 %0.4s, %1.8h, %2.h[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "x"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_high_s16 (int8x8_t a, int16x8_t b)
++{
++ int8x16_t result = vcombine_s8 (a, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("sqxtn2 %0.16b, %1.8h"
++ : "+w"(result)
++ : "w"(b)
++ : /* No clobbers */);
++ return result;
++}
+
+-#define vmull_high_lane_s32(a, b, c) \
+- __extension__ \
+- ({ \
+- int32x2_t b_ = (b); \
+- int32x4_t a_ = (a); \
+- int64x2_t result; \
+- __asm__ ("smull2 %0.2d, %1.4s, %2.s[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vmull_high_lane_u16(a, b, c) \
+- __extension__ \
+- ({ \
+- uint16x4_t b_ = (b); \
+- uint16x8_t a_ = (a); \
+- uint32x4_t result; \
+- __asm__ ("umull2 %0.4s, %1.8h, %2.h[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "x"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vmull_high_lane_u32(a, b, c) \
+- __extension__ \
+- ({ \
+- uint32x2_t b_ = (b); \
+- uint32x4_t a_ = (a); \
+- uint64x2_t result; \
+- __asm__ ("umull2 %0.2d, %1.4s, %2.s[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vmull_high_laneq_s16(a, b, c) \
+- __extension__ \
+- ({ \
+- int16x8_t b_ = (b); \
+- int16x8_t a_ = (a); \
+- int32x4_t result; \
+- __asm__ ("smull2 %0.4s, %1.8h, %2.h[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "x"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vmull_high_laneq_s32(a, b, c) \
+- __extension__ \
+- ({ \
+- int32x4_t b_ = (b); \
+- int32x4_t a_ = (a); \
+- int64x2_t result; \
+- __asm__ ("smull2 %0.2d, %1.4s, %2.s[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vmull_high_laneq_u16(a, b, c) \
+- __extension__ \
+- ({ \
+- uint16x8_t b_ = (b); \
+- uint16x8_t a_ = (a); \
+- uint32x4_t result; \
+- __asm__ ("umull2 %0.4s, %1.8h, %2.h[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "x"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vmull_high_laneq_u32(a, b, c) \
+- __extension__ \
+- ({ \
+- uint32x4_t b_ = (b); \
+- uint32x4_t a_ = (a); \
+- uint64x2_t result; \
+- __asm__ ("umull2 %0.2d, %1.4s, %2.s[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_high_s32 (int16x4_t a, int32x4_t b)
++{
++ int16x8_t result = vcombine_s16 (a, vcreate_s16 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("sqxtn2 %0.8h, %1.4s"
++ : "+w"(result)
++ : "w"(b)
++ : /* No clobbers */);
++ return result;
++}
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmull_high_n_s16 (int16x8_t a, int16_t b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_high_s64 (int32x2_t a, int64x2_t b)
+ {
+- int32x4_t result;
+- __asm__ ("smull2 %0.4s,%1.8h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
++ int32x4_t result = vcombine_s32 (a, vcreate_s32 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("sqxtn2 %0.4s, %1.2d"
++ : "+w"(result)
++ : "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmull_high_n_s32 (int32x4_t a, int32_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_high_u16 (uint8x8_t a, uint16x8_t b)
+ {
+- int64x2_t result;
+- __asm__ ("smull2 %0.2d,%1.4s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
++ uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("uqxtn2 %0.16b, %1.8h"
++ : "+w"(result)
++ : "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmull_high_n_u16 (uint16x8_t a, uint16_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_high_u32 (uint16x4_t a, uint32x4_t b)
+ {
+- uint32x4_t result;
+- __asm__ ("umull2 %0.4s,%1.8h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
++ uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("uqxtn2 %0.8h, %1.4s"
++ : "+w"(result)
++ : "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmull_high_n_u32 (uint32x4_t a, uint32_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_high_u64 (uint32x2_t a, uint64x2_t b)
+ {
+- uint64x2_t result;
+- __asm__ ("umull2 %0.2d,%1.4s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
++ uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("uqxtn2 %0.4s, %1.2d"
++ : "+w"(result)
++ : "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vmull_high_p8 (poly8x16_t a, poly8x16_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovun_high_s16 (uint8x8_t a, int16x8_t b)
+ {
+- poly16x8_t result;
+- __asm__ ("pmull2 %0.8h,%1.16b,%2.16b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
++ uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("sqxtun2 %0.16b, %1.8h"
++ : "+w"(result)
++ : "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmull_high_s8 (int8x16_t a, int8x16_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovun_high_s32 (uint16x4_t a, int32x4_t b)
+ {
+- int16x8_t result;
+- __asm__ ("smull2 %0.8h,%1.16b,%2.16b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
++ uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("sqxtun2 %0.8h, %1.4s"
++ : "+w"(result)
++ : "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmull_high_s16 (int16x8_t a, int16x8_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovun_high_s64 (uint32x2_t a, int64x2_t b)
+ {
+- int32x4_t result;
+- __asm__ ("smull2 %0.4s,%1.8h,%2.8h"
+- : "=w"(result)
+- : "w"(a), "w"(b)
++ uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("sqxtun2 %0.4s, %1.2d"
++ : "+w"(result)
++ : "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmull_high_s32 (int32x4_t a, int32x4_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulh_n_s16 (int16x4_t a, int16_t b)
+ {
+- int64x2_t result;
+- __asm__ ("smull2 %0.2d,%1.4s,%2.4s"
++ int16x4_t result;
++ __asm__ ("sqrdmulh %0.4h,%1.4h,%2.h[0]"
+ : "=w"(result)
+- : "w"(a), "w"(b)
++ : "w"(a), "x"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmull_high_u8 (uint8x16_t a, uint8x16_t b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulh_n_s32 (int32x2_t a, int32_t b)
+ {
+- uint16x8_t result;
+- __asm__ ("umull2 %0.8h,%1.16b,%2.16b"
++ int32x2_t result;
++ __asm__ ("sqrdmulh %0.2s,%1.2s,%2.s[0]"
+ : "=w"(result)
+ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmull_high_u16 (uint16x8_t a, uint16x8_t b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhq_n_s16 (int16x8_t a, int16_t b)
+ {
+- uint32x4_t result;
+- __asm__ ("umull2 %0.4s,%1.8h,%2.8h"
++ int16x8_t result;
++ __asm__ ("sqrdmulh %0.8h,%1.8h,%2.h[0]"
+ : "=w"(result)
+- : "w"(a), "w"(b)
++ : "w"(a), "x"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmull_high_u32 (uint32x4_t a, uint32x4_t b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhq_n_s32 (int32x4_t a, int32_t b)
+ {
+- uint64x2_t result;
+- __asm__ ("umull2 %0.2d,%1.4s,%2.4s"
++ int32x4_t result;
++ __asm__ ("sqrdmulh %0.4s,%1.4s,%2.s[0]"
+ : "=w"(result)
+ : "w"(a), "w"(b)
+ : /* No clobbers */);
+ return result;
+ }
+
+-#define vmull_lane_s16(a, b, c) \
++#define vqrshrn_high_n_s16(a, b, c) \
+ __extension__ \
+ ({ \
+- int16x4_t b_ = (b); \
++ int16x8_t b_ = (b); \
++ int8x8_t a_ = (a); \
++ int8x16_t result = vcombine_s8 \
++ (a_, vcreate_s8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqrshrn2 %0.16b, %1.8h, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vqrshrn_high_n_s32(a, b, c) \
++ __extension__ \
++ ({ \
++ int32x4_t b_ = (b); \
+ int16x4_t a_ = (a); \
+- int32x4_t result; \
+- __asm__ ("smull %0.4s,%1.4h,%2.h[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "x"(b_), "i"(c) \
++ int16x8_t result = vcombine_s16 \
++ (a_, vcreate_s16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqrshrn2 %0.8h, %1.4s, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmull_lane_s32(a, b, c) \
++#define vqrshrn_high_n_s64(a, b, c) \
+ __extension__ \
+ ({ \
+- int32x2_t b_ = (b); \
++ int64x2_t b_ = (b); \
+ int32x2_t a_ = (a); \
+- int64x2_t result; \
+- __asm__ ("smull %0.2d,%1.2s,%2.s[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "w"(b_), "i"(c) \
++ int32x4_t result = vcombine_s32 \
++ (a_, vcreate_s32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqrshrn2 %0.4s, %1.2d, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmull_lane_u16(a, b, c) \
++#define vqrshrn_high_n_u16(a, b, c) \
+ __extension__ \
+ ({ \
+- uint16x4_t b_ = (b); \
+- uint16x4_t a_ = (a); \
+- uint32x4_t result; \
+- __asm__ ("umull %0.4s,%1.4h,%2.h[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "x"(b_), "i"(c) \
++ uint16x8_t b_ = (b); \
++ uint8x8_t a_ = (a); \
++ uint8x16_t result = vcombine_u8 \
++ (a_, vcreate_u8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("uqrshrn2 %0.16b, %1.8h, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmull_lane_u32(a, b, c) \
++#define vqrshrn_high_n_u32(a, b, c) \
+ __extension__ \
+ ({ \
+- uint32x2_t b_ = (b); \
++ uint32x4_t b_ = (b); \
++ uint16x4_t a_ = (a); \
++ uint16x8_t result = vcombine_u16 \
++ (a_, vcreate_u16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("uqrshrn2 %0.8h, %1.4s, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vqrshrn_high_n_u64(a, b, c) \
++ __extension__ \
++ ({ \
++ uint64x2_t b_ = (b); \
+ uint32x2_t a_ = (a); \
+- uint64x2_t result; \
+- __asm__ ("umull %0.2d, %1.2s, %2.s[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "w"(b_), "i"(c) \
++ uint32x4_t result = vcombine_u32 \
++ (a_, vcreate_u32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("uqrshrn2 %0.4s, %1.2d, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmull_laneq_s16(a, b, c) \
++#define vqrshrun_high_n_s16(a, b, c) \
+ __extension__ \
+ ({ \
+ int16x8_t b_ = (b); \
+- int16x4_t a_ = (a); \
+- int32x4_t result; \
+- __asm__ ("smull %0.4s, %1.4h, %2.h[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "x"(b_), "i"(c) \
++ uint8x8_t a_ = (a); \
++ uint8x16_t result = vcombine_u8 \
++ (a_, vcreate_u8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqrshrun2 %0.16b, %1.8h, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmull_laneq_s32(a, b, c) \
++#define vqrshrun_high_n_s32(a, b, c) \
++ __extension__ \
++ ({ \
++ int32x4_t b_ = (b); \
++ uint16x4_t a_ = (a); \
++ uint16x8_t result = vcombine_u16 \
++ (a_, vcreate_u16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqrshrun2 %0.8h, %1.4s, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vqrshrun_high_n_s64(a, b, c) \
++ __extension__ \
++ ({ \
++ int64x2_t b_ = (b); \
++ uint32x2_t a_ = (a); \
++ uint32x4_t result = vcombine_u32 \
++ (a_, vcreate_u32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqrshrun2 %0.4s, %1.2d, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vqshrn_high_n_s16(a, b, c) \
++ __extension__ \
++ ({ \
++ int16x8_t b_ = (b); \
++ int8x8_t a_ = (a); \
++ int8x16_t result = vcombine_s8 \
++ (a_, vcreate_s8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqshrn2 %0.16b, %1.8h, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vqshrn_high_n_s32(a, b, c) \
+ __extension__ \
+ ({ \
+ int32x4_t b_ = (b); \
++ int16x4_t a_ = (a); \
++ int16x8_t result = vcombine_s16 \
++ (a_, vcreate_s16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqshrn2 %0.8h, %1.4s, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vqshrn_high_n_s64(a, b, c) \
++ __extension__ \
++ ({ \
++ int64x2_t b_ = (b); \
+ int32x2_t a_ = (a); \
+- int64x2_t result; \
+- __asm__ ("smull %0.2d, %1.2s, %2.s[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "w"(b_), "i"(c) \
++ int32x4_t result = vcombine_s32 \
++ (a_, vcreate_s32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqshrn2 %0.4s, %1.2d, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmull_laneq_u16(a, b, c) \
++#define vqshrn_high_n_u16(a, b, c) \
+ __extension__ \
+ ({ \
+ uint16x8_t b_ = (b); \
+- uint16x4_t a_ = (a); \
+- uint32x4_t result; \
+- __asm__ ("umull %0.4s, %1.4h, %2.h[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "x"(b_), "i"(c) \
++ uint8x8_t a_ = (a); \
++ uint8x16_t result = vcombine_u8 \
++ (a_, vcreate_u8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("uqshrn2 %0.16b, %1.8h, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-#define vmull_laneq_u32(a, b, c) \
++#define vqshrn_high_n_u32(a, b, c) \
+ __extension__ \
+ ({ \
+ uint32x4_t b_ = (b); \
+- uint32x2_t a_ = (a); \
+- uint64x2_t result; \
+- __asm__ ("umull %0.2d, %1.2s, %2.s[%3]" \
+- : "=w"(result) \
+- : "w"(a_), "w"(b_), "i"(c) \
++ uint16x4_t a_ = (a); \
++ uint16x8_t result = vcombine_u16 \
++ (a_, vcreate_u16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("uqshrn2 %0.8h, %1.4s, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
+ : /* No clobbers */); \
+ result; \
+ })
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmull_n_s16 (int16x4_t a, int16_t b)
+-{
+- int32x4_t result;
+- __asm__ ("smull %0.4s,%1.4h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vqshrn_high_n_u64(a, b, c) \
++ __extension__ \
++ ({ \
++ uint64x2_t b_ = (b); \
++ uint32x2_t a_ = (a); \
++ uint32x4_t result = vcombine_u32 \
++ (a_, vcreate_u32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("uqshrn2 %0.4s, %1.2d, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmull_n_s32 (int32x2_t a, int32_t b)
+-{
+- int64x2_t result;
+- __asm__ ("smull %0.2d,%1.2s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vqshrun_high_n_s16(a, b, c) \
++ __extension__ \
++ ({ \
++ int16x8_t b_ = (b); \
++ uint8x8_t a_ = (a); \
++ uint8x16_t result = vcombine_u8 \
++ (a_, vcreate_u8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqshrun2 %0.16b, %1.8h, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmull_n_u16 (uint16x4_t a, uint16_t b)
+-{
+- uint32x4_t result;
+- __asm__ ("umull %0.4s,%1.4h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vqshrun_high_n_s32(a, b, c) \
++ __extension__ \
++ ({ \
++ int32x4_t b_ = (b); \
++ uint16x4_t a_ = (a); \
++ uint16x8_t result = vcombine_u16 \
++ (a_, vcreate_u16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqshrun2 %0.8h, %1.4s, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmull_n_u32 (uint32x2_t a, uint32_t b)
+-{
+- uint64x2_t result;
+- __asm__ ("umull %0.2d,%1.2s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vqshrun_high_n_s64(a, b, c) \
++ __extension__ \
++ ({ \
++ int64x2_t b_ = (b); \
++ uint32x2_t a_ = (a); \
++ uint32x4_t result = vcombine_u32 \
++ (a_, vcreate_u32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("sqshrun2 %0.4s, %1.2d, #%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vmull_p8 (poly8x8_t a, poly8x8_t b)
+-{
+- poly16x8_t result;
+- __asm__ ("pmull %0.8h, %1.8b, %2.8b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_high_n_s16(a, b, c) \
++ __extension__ \
++ ({ \
++ int16x8_t b_ = (b); \
++ int8x8_t a_ = (a); \
++ int8x16_t result = vcombine_s8 \
++ (a_, vcreate_s8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("rshrn2 %0.16b,%1.8h,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmull_s8 (int8x8_t a, int8x8_t b)
+-{
+- int16x8_t result;
+- __asm__ ("smull %0.8h, %1.8b, %2.8b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmull_s16 (int16x4_t a, int16x4_t b)
+-{
+- int32x4_t result;
+- __asm__ ("smull %0.4s, %1.4h, %2.4h"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmull_s32 (int32x2_t a, int32x2_t b)
+-{
+- int64x2_t result;
+- __asm__ ("smull %0.2d, %1.2s, %2.2s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
+-
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmull_u8 (uint8x8_t a, uint8x8_t b)
+-{
+- uint16x8_t result;
+- __asm__ ("umull %0.8h, %1.8b, %2.8b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_high_n_s32(a, b, c) \
++ __extension__ \
++ ({ \
++ int32x4_t b_ = (b); \
++ int16x4_t a_ = (a); \
++ int16x8_t result = vcombine_s16 \
++ (a_, vcreate_s16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("rshrn2 %0.8h,%1.4s,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmull_u16 (uint16x4_t a, uint16x4_t b)
+-{
+- uint32x4_t result;
+- __asm__ ("umull %0.4s, %1.4h, %2.4h"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_high_n_s64(a, b, c) \
++ __extension__ \
++ ({ \
++ int64x2_t b_ = (b); \
++ int32x2_t a_ = (a); \
++ int32x4_t result = vcombine_s32 \
++ (a_, vcreate_s32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("rshrn2 %0.4s,%1.2d,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmull_u32 (uint32x2_t a, uint32x2_t b)
+-{
+- uint64x2_t result;
+- __asm__ ("umull %0.2d, %1.2s, %2.2s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_high_n_u16(a, b, c) \
++ __extension__ \
++ ({ \
++ uint16x8_t b_ = (b); \
++ uint8x8_t a_ = (a); \
++ uint8x16_t result = vcombine_u8 \
++ (a_, vcreate_u8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("rshrn2 %0.16b,%1.8h,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmulq_n_f32 (float32x4_t a, float32_t b)
+-{
+- float32x4_t result;
+- __asm__ ("fmul %0.4s,%1.4s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_high_n_u32(a, b, c) \
++ __extension__ \
++ ({ \
++ uint32x4_t b_ = (b); \
++ uint16x4_t a_ = (a); \
++ uint16x8_t result = vcombine_u16 \
++ (a_, vcreate_u16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("rshrn2 %0.8h,%1.4s,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmulq_n_f64 (float64x2_t a, float64_t b)
+-{
+- float64x2_t result;
+- __asm__ ("fmul %0.2d,%1.2d,%2.d[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_high_n_u64(a, b, c) \
++ __extension__ \
++ ({ \
++ uint64x2_t b_ = (b); \
++ uint32x2_t a_ = (a); \
++ uint32x4_t result = vcombine_u32 \
++ (a_, vcreate_u32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("rshrn2 %0.4s,%1.2d,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmulq_n_s16 (int16x8_t a, int16_t b)
+-{
+- int16x8_t result;
+- __asm__ ("mul %0.8h,%1.8h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_n_s16(a, b) \
++ __extension__ \
++ ({ \
++ int16x8_t a_ = (a); \
++ int8x8_t result; \
++ __asm__ ("rshrn %0.8b,%1.8h,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmulq_n_s32 (int32x4_t a, int32_t b)
+-{
+- int32x4_t result;
+- __asm__ ("mul %0.4s,%1.4s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_n_s32(a, b) \
++ __extension__ \
++ ({ \
++ int32x4_t a_ = (a); \
++ int16x4_t result; \
++ __asm__ ("rshrn %0.4h,%1.4s,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmulq_n_u16 (uint16x8_t a, uint16_t b)
+-{
+- uint16x8_t result;
+- __asm__ ("mul %0.8h,%1.8h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_n_s64(a, b) \
++ __extension__ \
++ ({ \
++ int64x2_t a_ = (a); \
++ int32x2_t result; \
++ __asm__ ("rshrn %0.2s,%1.2d,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmulq_n_u32 (uint32x4_t a, uint32_t b)
+-{
+- uint32x4_t result;
+- __asm__ ("mul %0.4s,%1.4s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_n_u16(a, b) \
++ __extension__ \
++ ({ \
++ uint16x8_t a_ = (a); \
++ uint8x8_t result; \
++ __asm__ ("rshrn %0.8b,%1.8h,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vmvn_p8 (poly8x8_t a)
+-{
+- poly8x8_t result;
+- __asm__ ("mvn %0.8b,%1.8b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_n_u32(a, b) \
++ __extension__ \
++ ({ \
++ uint32x4_t a_ = (a); \
++ uint16x4_t result; \
++ __asm__ ("rshrn %0.4h,%1.4s,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vmvn_s8 (int8x8_t a)
+-{
+- int8x8_t result;
+- __asm__ ("mvn %0.8b,%1.8b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
+-}
++#define vrshrn_n_u64(a, b) \
++ __extension__ \
++ ({ \
++ uint64x2_t a_ = (a); \
++ uint32x2_t result; \
++ __asm__ ("rshrn %0.2s,%1.2d,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmvn_s16 (int16x4_t a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrte_u32 (uint32x2_t a)
+ {
+- int16x4_t result;
+- __asm__ ("mvn %0.8b,%1.8b"
++ uint32x2_t result;
++ __asm__ ("ursqrte %0.2s,%1.2s"
+ : "=w"(result)
+ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmvn_s32 (int32x2_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrteq_u32 (uint32x4_t a)
+ {
+- int32x2_t result;
+- __asm__ ("mvn %0.8b,%1.8b"
++ uint32x4_t result;
++ __asm__ ("ursqrte %0.4s,%1.4s"
+ : "=w"(result)
+ : "w"(a)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vmvn_u8 (uint8x8_t a)
+-{
++#define vshrn_high_n_s16(a, b, c) \
++ __extension__ \
++ ({ \
++ int16x8_t b_ = (b); \
++ int8x8_t a_ = (a); \
++ int8x16_t result = vcombine_s8 \
++ (a_, vcreate_s8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("shrn2 %0.16b,%1.8h,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_high_n_s32(a, b, c) \
++ __extension__ \
++ ({ \
++ int32x4_t b_ = (b); \
++ int16x4_t a_ = (a); \
++ int16x8_t result = vcombine_s16 \
++ (a_, vcreate_s16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("shrn2 %0.8h,%1.4s,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_high_n_s64(a, b, c) \
++ __extension__ \
++ ({ \
++ int64x2_t b_ = (b); \
++ int32x2_t a_ = (a); \
++ int32x4_t result = vcombine_s32 \
++ (a_, vcreate_s32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("shrn2 %0.4s,%1.2d,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_high_n_u16(a, b, c) \
++ __extension__ \
++ ({ \
++ uint16x8_t b_ = (b); \
++ uint8x8_t a_ = (a); \
++ uint8x16_t result = vcombine_u8 \
++ (a_, vcreate_u8 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("shrn2 %0.16b,%1.8h,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_high_n_u32(a, b, c) \
++ __extension__ \
++ ({ \
++ uint32x4_t b_ = (b); \
++ uint16x4_t a_ = (a); \
++ uint16x8_t result = vcombine_u16 \
++ (a_, vcreate_u16 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("shrn2 %0.8h,%1.4s,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_high_n_u64(a, b, c) \
++ __extension__ \
++ ({ \
++ uint64x2_t b_ = (b); \
++ uint32x2_t a_ = (a); \
++ uint32x4_t result = vcombine_u32 \
++ (a_, vcreate_u32 \
++ (__AARCH64_UINT64_C (0x0))); \
++ __asm__ ("shrn2 %0.4s,%1.2d,#%2" \
++ : "+w"(result) \
++ : "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_n_s16(a, b) \
++ __extension__ \
++ ({ \
++ int16x8_t a_ = (a); \
++ int8x8_t result; \
++ __asm__ ("shrn %0.8b,%1.8h,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_n_s32(a, b) \
++ __extension__ \
++ ({ \
++ int32x4_t a_ = (a); \
++ int16x4_t result; \
++ __asm__ ("shrn %0.4h,%1.4s,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_n_s64(a, b) \
++ __extension__ \
++ ({ \
++ int64x2_t a_ = (a); \
++ int32x2_t result; \
++ __asm__ ("shrn %0.2s,%1.2d,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_n_u16(a, b) \
++ __extension__ \
++ ({ \
++ uint16x8_t a_ = (a); \
++ uint8x8_t result; \
++ __asm__ ("shrn %0.8b,%1.8h,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_n_u32(a, b) \
++ __extension__ \
++ ({ \
++ uint32x4_t a_ = (a); \
++ uint16x4_t result; \
++ __asm__ ("shrn %0.4h,%1.4s,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vshrn_n_u64(a, b) \
++ __extension__ \
++ ({ \
++ uint64x2_t a_ = (a); \
++ uint32x2_t result; \
++ __asm__ ("shrn %0.2s,%1.2d,%2" \
++ : "=w"(result) \
++ : "w"(a_), "i"(b) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vsli_n_p8(a, b, c) \
++ __extension__ \
++ ({ \
++ poly8x8_t b_ = (b); \
++ poly8x8_t a_ = (a); \
++ poly8x8_t result; \
++ __asm__ ("sli %0.8b,%2.8b,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vsli_n_p16(a, b, c) \
++ __extension__ \
++ ({ \
++ poly16x4_t b_ = (b); \
++ poly16x4_t a_ = (a); \
++ poly16x4_t result; \
++ __asm__ ("sli %0.4h,%2.4h,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vsliq_n_p8(a, b, c) \
++ __extension__ \
++ ({ \
++ poly8x16_t b_ = (b); \
++ poly8x16_t a_ = (a); \
++ poly8x16_t result; \
++ __asm__ ("sli %0.16b,%2.16b,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vsliq_n_p16(a, b, c) \
++ __extension__ \
++ ({ \
++ poly16x8_t b_ = (b); \
++ poly16x8_t a_ = (a); \
++ poly16x8_t result; \
++ __asm__ ("sli %0.8h,%2.8h,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vsri_n_p8(a, b, c) \
++ __extension__ \
++ ({ \
++ poly8x8_t b_ = (b); \
++ poly8x8_t a_ = (a); \
++ poly8x8_t result; \
++ __asm__ ("sri %0.8b,%2.8b,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vsri_n_p16(a, b, c) \
++ __extension__ \
++ ({ \
++ poly16x4_t b_ = (b); \
++ poly16x4_t a_ = (a); \
++ poly16x4_t result; \
++ __asm__ ("sri %0.4h,%2.4h,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vsri_n_p64(a, b, c) \
++ __extension__ \
++ ({ \
++ poly64x1_t b_ = (b); \
++ poly64x1_t a_ = (a); \
++ poly64x1_t result; \
++ __asm__ ("sri %d0,%d2,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers. */); \
++ result; \
++ })
++
++#define vsriq_n_p8(a, b, c) \
++ __extension__ \
++ ({ \
++ poly8x16_t b_ = (b); \
++ poly8x16_t a_ = (a); \
++ poly8x16_t result; \
++ __asm__ ("sri %0.16b,%2.16b,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vsriq_n_p16(a, b, c) \
++ __extension__ \
++ ({ \
++ poly16x8_t b_ = (b); \
++ poly16x8_t a_ = (a); \
++ poly16x8_t result; \
++ __asm__ ("sri %0.8h,%2.8h,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers */); \
++ result; \
++ })
++
++#define vsriq_n_p64(a, b, c) \
++ __extension__ \
++ ({ \
++ poly64x2_t b_ = (b); \
++ poly64x2_t a_ = (a); \
++ poly64x2_t result; \
++ __asm__ ("sri %0.2d,%2.2d,%3" \
++ : "=w"(result) \
++ : "0"(a_), "w"(b_), "i"(c) \
++ : /* No clobbers. */); \
++ result; \
++ })
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_p8 (poly8x8_t a, poly8x8_t b)
++{
++ uint8x8_t result;
++ __asm__ ("cmtst %0.8b, %1.8b, %2.8b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_p16 (poly16x4_t a, poly16x4_t b)
++{
++ uint16x4_t result;
++ __asm__ ("cmtst %0.4h, %1.4h, %2.4h"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_p8 (poly8x16_t a, poly8x16_t b)
++{
++ uint8x16_t result;
++ __asm__ ("cmtst %0.16b, %1.16b, %2.16b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_p16 (poly16x8_t a, poly16x8_t b)
++{
++ uint16x8_t result;
++ __asm__ ("cmtst %0.8h, %1.8h, %2.8h"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++/* End of temporary inline asm implementations. */
++
++/* Start of temporary inline asm for vldn, vstn and friends. */
++
++/* Create struct element types for duplicating loads.
++
++ Create 2 element structures of:
++
++ +------+----+----+----+----+
++ | | 8 | 16 | 32 | 64 |
++ +------+----+----+----+----+
++ |int | Y | Y | N | N |
++ +------+----+----+----+----+
++ |uint | Y | Y | N | N |
++ +------+----+----+----+----+
++ |float | - | Y | N | N |
++ +------+----+----+----+----+
++ |poly | Y | Y | - | - |
++ +------+----+----+----+----+
++
++ Create 3 element structures of:
++
++ +------+----+----+----+----+
++ | | 8 | 16 | 32 | 64 |
++ +------+----+----+----+----+
++ |int | Y | Y | Y | Y |
++ +------+----+----+----+----+
++ |uint | Y | Y | Y | Y |
++ +------+----+----+----+----+
++ |float | - | Y | Y | Y |
++ +------+----+----+----+----+
++ |poly | Y | Y | - | - |
++ +------+----+----+----+----+
++
++ Create 4 element structures of:
++
++ +------+----+----+----+----+
++ | | 8 | 16 | 32 | 64 |
++ +------+----+----+----+----+
++ |int | Y | N | N | Y |
++ +------+----+----+----+----+
++ |uint | Y | N | N | Y |
++ +------+----+----+----+----+
++ |float | - | N | N | Y |
++ +------+----+----+----+----+
++ |poly | Y | N | - | - |
++ +------+----+----+----+----+
++
++ This is required for casting memory reference. */
++#define __STRUCTN(t, sz, nelem) \
++ typedef struct t ## sz ## x ## nelem ## _t { \
++ t ## sz ## _t val[nelem]; \
++ } t ## sz ## x ## nelem ## _t;
++
++/* 2-element structs. */
++__STRUCTN (int, 8, 2)
++__STRUCTN (int, 16, 2)
++__STRUCTN (uint, 8, 2)
++__STRUCTN (uint, 16, 2)
++__STRUCTN (float, 16, 2)
++__STRUCTN (poly, 8, 2)
++__STRUCTN (poly, 16, 2)
++/* 3-element structs. */
++__STRUCTN (int, 8, 3)
++__STRUCTN (int, 16, 3)
++__STRUCTN (int, 32, 3)
++__STRUCTN (int, 64, 3)
++__STRUCTN (uint, 8, 3)
++__STRUCTN (uint, 16, 3)
++__STRUCTN (uint, 32, 3)
++__STRUCTN (uint, 64, 3)
++__STRUCTN (float, 16, 3)
++__STRUCTN (float, 32, 3)
++__STRUCTN (float, 64, 3)
++__STRUCTN (poly, 8, 3)
++__STRUCTN (poly, 16, 3)
++/* 4-element structs. */
++__STRUCTN (int, 8, 4)
++__STRUCTN (int, 64, 4)
++__STRUCTN (uint, 8, 4)
++__STRUCTN (uint, 64, 4)
++__STRUCTN (poly, 8, 4)
++__STRUCTN (float, 64, 4)
++#undef __STRUCTN
++
++
++#define __ST2_LANE_FUNC(intype, largetype, ptrtype, mode, \
++ qmode, ptr_mode, funcsuffix, signedtype) \
++__extension__ extern __inline void \
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
++vst2_lane_ ## funcsuffix (ptrtype *__ptr, \
++ intype __b, const int __c) \
++{ \
++ __builtin_aarch64_simd_oi __o; \
++ largetype __temp; \
++ __temp.val[0] \
++ = vcombine_##funcsuffix (__b.val[0], \
++ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
++ __temp.val[1] \
++ = vcombine_##funcsuffix (__b.val[1], \
++ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
++ __o = __builtin_aarch64_set_qregoi##qmode (__o, \
++ (signedtype) __temp.val[0], 0); \
++ __o = __builtin_aarch64_set_qregoi##qmode (__o, \
++ (signedtype) __temp.val[1], 1); \
++ __builtin_aarch64_st2_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
++ __ptr, __o, __c); \
++}
++
++__ST2_LANE_FUNC (float16x4x2_t, float16x8x2_t, float16_t, v4hf, v8hf, hf, f16,
++ float16x8_t)
++__ST2_LANE_FUNC (float32x2x2_t, float32x4x2_t, float32_t, v2sf, v4sf, sf, f32,
++ float32x4_t)
++__ST2_LANE_FUNC (float64x1x2_t, float64x2x2_t, float64_t, df, v2df, df, f64,
++ float64x2_t)
++__ST2_LANE_FUNC (poly8x8x2_t, poly8x16x2_t, poly8_t, v8qi, v16qi, qi, p8,
++ int8x16_t)
++__ST2_LANE_FUNC (poly16x4x2_t, poly16x8x2_t, poly16_t, v4hi, v8hi, hi, p16,
++ int16x8_t)
++__ST2_LANE_FUNC (poly64x1x2_t, poly64x2x2_t, poly64_t, di, v2di_ssps, di, p64,
++ poly64x2_t)
++__ST2_LANE_FUNC (int8x8x2_t, int8x16x2_t, int8_t, v8qi, v16qi, qi, s8,
++ int8x16_t)
++__ST2_LANE_FUNC (int16x4x2_t, int16x8x2_t, int16_t, v4hi, v8hi, hi, s16,
++ int16x8_t)
++__ST2_LANE_FUNC (int32x2x2_t, int32x4x2_t, int32_t, v2si, v4si, si, s32,
++ int32x4_t)
++__ST2_LANE_FUNC (int64x1x2_t, int64x2x2_t, int64_t, di, v2di, di, s64,
++ int64x2_t)
++__ST2_LANE_FUNC (uint8x8x2_t, uint8x16x2_t, uint8_t, v8qi, v16qi, qi, u8,
++ int8x16_t)
++__ST2_LANE_FUNC (uint16x4x2_t, uint16x8x2_t, uint16_t, v4hi, v8hi, hi, u16,
++ int16x8_t)
++__ST2_LANE_FUNC (uint32x2x2_t, uint32x4x2_t, uint32_t, v2si, v4si, si, u32,
++ int32x4_t)
++__ST2_LANE_FUNC (uint64x1x2_t, uint64x2x2_t, uint64_t, di, v2di, di, u64,
++ int64x2_t)
++
++#undef __ST2_LANE_FUNC
++#define __ST2_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix) \
++__extension__ extern __inline void \
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
++vst2q_lane_ ## funcsuffix (ptrtype *__ptr, \
++ intype __b, const int __c) \
++{ \
++ union { intype __i; \
++ __builtin_aarch64_simd_oi __o; } __temp = { __b }; \
++ __builtin_aarch64_st2_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
++ __ptr, __temp.__o, __c); \
++}
++
++__ST2_LANE_FUNC (float16x8x2_t, float16_t, v8hf, hf, f16)
++__ST2_LANE_FUNC (float32x4x2_t, float32_t, v4sf, sf, f32)
++__ST2_LANE_FUNC (float64x2x2_t, float64_t, v2df, df, f64)
++__ST2_LANE_FUNC (poly8x16x2_t, poly8_t, v16qi, qi, p8)
++__ST2_LANE_FUNC (poly16x8x2_t, poly16_t, v8hi, hi, p16)
++__ST2_LANE_FUNC (poly64x2x2_t, poly64_t, v2di, di, p64)
++__ST2_LANE_FUNC (int8x16x2_t, int8_t, v16qi, qi, s8)
++__ST2_LANE_FUNC (int16x8x2_t, int16_t, v8hi, hi, s16)
++__ST2_LANE_FUNC (int32x4x2_t, int32_t, v4si, si, s32)
++__ST2_LANE_FUNC (int64x2x2_t, int64_t, v2di, di, s64)
++__ST2_LANE_FUNC (uint8x16x2_t, uint8_t, v16qi, qi, u8)
++__ST2_LANE_FUNC (uint16x8x2_t, uint16_t, v8hi, hi, u16)
++__ST2_LANE_FUNC (uint32x4x2_t, uint32_t, v4si, si, u32)
++__ST2_LANE_FUNC (uint64x2x2_t, uint64_t, v2di, di, u64)
++
++#define __ST3_LANE_FUNC(intype, largetype, ptrtype, mode, \
++ qmode, ptr_mode, funcsuffix, signedtype) \
++__extension__ extern __inline void \
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
++vst3_lane_ ## funcsuffix (ptrtype *__ptr, \
++ intype __b, const int __c) \
++{ \
++ __builtin_aarch64_simd_ci __o; \
++ largetype __temp; \
++ __temp.val[0] \
++ = vcombine_##funcsuffix (__b.val[0], \
++ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
++ __temp.val[1] \
++ = vcombine_##funcsuffix (__b.val[1], \
++ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
++ __temp.val[2] \
++ = vcombine_##funcsuffix (__b.val[2], \
++ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
++ __o = __builtin_aarch64_set_qregci##qmode (__o, \
++ (signedtype) __temp.val[0], 0); \
++ __o = __builtin_aarch64_set_qregci##qmode (__o, \
++ (signedtype) __temp.val[1], 1); \
++ __o = __builtin_aarch64_set_qregci##qmode (__o, \
++ (signedtype) __temp.val[2], 2); \
++ __builtin_aarch64_st3_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
++ __ptr, __o, __c); \
++}
++
++__ST3_LANE_FUNC (float16x4x3_t, float16x8x3_t, float16_t, v4hf, v8hf, hf, f16,
++ float16x8_t)
++__ST3_LANE_FUNC (float32x2x3_t, float32x4x3_t, float32_t, v2sf, v4sf, sf, f32,
++ float32x4_t)
++__ST3_LANE_FUNC (float64x1x3_t, float64x2x3_t, float64_t, df, v2df, df, f64,
++ float64x2_t)
++__ST3_LANE_FUNC (poly8x8x3_t, poly8x16x3_t, poly8_t, v8qi, v16qi, qi, p8,
++ int8x16_t)
++__ST3_LANE_FUNC (poly16x4x3_t, poly16x8x3_t, poly16_t, v4hi, v8hi, hi, p16,
++ int16x8_t)
++__ST3_LANE_FUNC (poly64x1x3_t, poly64x2x3_t, poly64_t, di, v2di_ssps, di, p64,
++ poly64x2_t)
++__ST3_LANE_FUNC (int8x8x3_t, int8x16x3_t, int8_t, v8qi, v16qi, qi, s8,
++ int8x16_t)
++__ST3_LANE_FUNC (int16x4x3_t, int16x8x3_t, int16_t, v4hi, v8hi, hi, s16,
++ int16x8_t)
++__ST3_LANE_FUNC (int32x2x3_t, int32x4x3_t, int32_t, v2si, v4si, si, s32,
++ int32x4_t)
++__ST3_LANE_FUNC (int64x1x3_t, int64x2x3_t, int64_t, di, v2di, di, s64,
++ int64x2_t)
++__ST3_LANE_FUNC (uint8x8x3_t, uint8x16x3_t, uint8_t, v8qi, v16qi, qi, u8,
++ int8x16_t)
++__ST3_LANE_FUNC (uint16x4x3_t, uint16x8x3_t, uint16_t, v4hi, v8hi, hi, u16,
++ int16x8_t)
++__ST3_LANE_FUNC (uint32x2x3_t, uint32x4x3_t, uint32_t, v2si, v4si, si, u32,
++ int32x4_t)
++__ST3_LANE_FUNC (uint64x1x3_t, uint64x2x3_t, uint64_t, di, v2di, di, u64,
++ int64x2_t)
++
++#undef __ST3_LANE_FUNC
++#define __ST3_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix) \
++__extension__ extern __inline void \
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
++vst3q_lane_ ## funcsuffix (ptrtype *__ptr, \
++ intype __b, const int __c) \
++{ \
++ union { intype __i; \
++ __builtin_aarch64_simd_ci __o; } __temp = { __b }; \
++ __builtin_aarch64_st3_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
++ __ptr, __temp.__o, __c); \
++}
++
++__ST3_LANE_FUNC (float16x8x3_t, float16_t, v8hf, hf, f16)
++__ST3_LANE_FUNC (float32x4x3_t, float32_t, v4sf, sf, f32)
++__ST3_LANE_FUNC (float64x2x3_t, float64_t, v2df, df, f64)
++__ST3_LANE_FUNC (poly8x16x3_t, poly8_t, v16qi, qi, p8)
++__ST3_LANE_FUNC (poly16x8x3_t, poly16_t, v8hi, hi, p16)
++__ST3_LANE_FUNC (poly64x2x3_t, poly64_t, v2di, di, p64)
++__ST3_LANE_FUNC (int8x16x3_t, int8_t, v16qi, qi, s8)
++__ST3_LANE_FUNC (int16x8x3_t, int16_t, v8hi, hi, s16)
++__ST3_LANE_FUNC (int32x4x3_t, int32_t, v4si, si, s32)
++__ST3_LANE_FUNC (int64x2x3_t, int64_t, v2di, di, s64)
++__ST3_LANE_FUNC (uint8x16x3_t, uint8_t, v16qi, qi, u8)
++__ST3_LANE_FUNC (uint16x8x3_t, uint16_t, v8hi, hi, u16)
++__ST3_LANE_FUNC (uint32x4x3_t, uint32_t, v4si, si, u32)
++__ST3_LANE_FUNC (uint64x2x3_t, uint64_t, v2di, di, u64)
++
++#define __ST4_LANE_FUNC(intype, largetype, ptrtype, mode, \
++ qmode, ptr_mode, funcsuffix, signedtype) \
++__extension__ extern __inline void \
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
++vst4_lane_ ## funcsuffix (ptrtype *__ptr, \
++ intype __b, const int __c) \
++{ \
++ __builtin_aarch64_simd_xi __o; \
++ largetype __temp; \
++ __temp.val[0] \
++ = vcombine_##funcsuffix (__b.val[0], \
++ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
++ __temp.val[1] \
++ = vcombine_##funcsuffix (__b.val[1], \
++ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
++ __temp.val[2] \
++ = vcombine_##funcsuffix (__b.val[2], \
++ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
++ __temp.val[3] \
++ = vcombine_##funcsuffix (__b.val[3], \
++ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
++ __o = __builtin_aarch64_set_qregxi##qmode (__o, \
++ (signedtype) __temp.val[0], 0); \
++ __o = __builtin_aarch64_set_qregxi##qmode (__o, \
++ (signedtype) __temp.val[1], 1); \
++ __o = __builtin_aarch64_set_qregxi##qmode (__o, \
++ (signedtype) __temp.val[2], 2); \
++ __o = __builtin_aarch64_set_qregxi##qmode (__o, \
++ (signedtype) __temp.val[3], 3); \
++ __builtin_aarch64_st4_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
++ __ptr, __o, __c); \
++}
++
++__ST4_LANE_FUNC (float16x4x4_t, float16x8x4_t, float16_t, v4hf, v8hf, hf, f16,
++ float16x8_t)
++__ST4_LANE_FUNC (float32x2x4_t, float32x4x4_t, float32_t, v2sf, v4sf, sf, f32,
++ float32x4_t)
++__ST4_LANE_FUNC (float64x1x4_t, float64x2x4_t, float64_t, df, v2df, df, f64,
++ float64x2_t)
++__ST4_LANE_FUNC (poly8x8x4_t, poly8x16x4_t, poly8_t, v8qi, v16qi, qi, p8,
++ int8x16_t)
++__ST4_LANE_FUNC (poly16x4x4_t, poly16x8x4_t, poly16_t, v4hi, v8hi, hi, p16,
++ int16x8_t)
++__ST4_LANE_FUNC (poly64x1x4_t, poly64x2x4_t, poly64_t, di, v2di_ssps, di, p64,
++ poly64x2_t)
++__ST4_LANE_FUNC (int8x8x4_t, int8x16x4_t, int8_t, v8qi, v16qi, qi, s8,
++ int8x16_t)
++__ST4_LANE_FUNC (int16x4x4_t, int16x8x4_t, int16_t, v4hi, v8hi, hi, s16,
++ int16x8_t)
++__ST4_LANE_FUNC (int32x2x4_t, int32x4x4_t, int32_t, v2si, v4si, si, s32,
++ int32x4_t)
++__ST4_LANE_FUNC (int64x1x4_t, int64x2x4_t, int64_t, di, v2di, di, s64,
++ int64x2_t)
++__ST4_LANE_FUNC (uint8x8x4_t, uint8x16x4_t, uint8_t, v8qi, v16qi, qi, u8,
++ int8x16_t)
++__ST4_LANE_FUNC (uint16x4x4_t, uint16x8x4_t, uint16_t, v4hi, v8hi, hi, u16,
++ int16x8_t)
++__ST4_LANE_FUNC (uint32x2x4_t, uint32x4x4_t, uint32_t, v2si, v4si, si, u32,
++ int32x4_t)
++__ST4_LANE_FUNC (uint64x1x4_t, uint64x2x4_t, uint64_t, di, v2di, di, u64,
++ int64x2_t)
++
++#undef __ST4_LANE_FUNC
++#define __ST4_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix) \
++__extension__ extern __inline void \
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
++vst4q_lane_ ## funcsuffix (ptrtype *__ptr, \
++ intype __b, const int __c) \
++{ \
++ union { intype __i; \
++ __builtin_aarch64_simd_xi __o; } __temp = { __b }; \
++ __builtin_aarch64_st4_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
++ __ptr, __temp.__o, __c); \
++}
++
++__ST4_LANE_FUNC (float16x8x4_t, float16_t, v8hf, hf, f16)
++__ST4_LANE_FUNC (float32x4x4_t, float32_t, v4sf, sf, f32)
++__ST4_LANE_FUNC (float64x2x4_t, float64_t, v2df, df, f64)
++__ST4_LANE_FUNC (poly8x16x4_t, poly8_t, v16qi, qi, p8)
++__ST4_LANE_FUNC (poly16x8x4_t, poly16_t, v8hi, hi, p16)
++__ST4_LANE_FUNC (poly64x2x4_t, poly64_t, v2di, di, p64)
++__ST4_LANE_FUNC (int8x16x4_t, int8_t, v16qi, qi, s8)
++__ST4_LANE_FUNC (int16x8x4_t, int16_t, v8hi, hi, s16)
++__ST4_LANE_FUNC (int32x4x4_t, int32_t, v4si, si, s32)
++__ST4_LANE_FUNC (int64x2x4_t, int64_t, v2di, di, s64)
++__ST4_LANE_FUNC (uint8x16x4_t, uint8_t, v16qi, qi, u8)
++__ST4_LANE_FUNC (uint16x8x4_t, uint16_t, v8hi, hi, u16)
++__ST4_LANE_FUNC (uint32x4x4_t, uint32_t, v4si, si, u32)
++__ST4_LANE_FUNC (uint64x2x4_t, uint64_t, v2di, di, u64)
++
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddlv_s32 (int32x2_t a)
++{
++ int64_t result;
++ __asm__ ("saddlp %0.1d, %1.2s" : "=w"(result) : "w"(a) : );
++ return result;
++}
++
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddlv_u32 (uint32x2_t a)
++{
++ uint64_t result;
++ __asm__ ("uaddlp %0.1d, %1.2s" : "=w"(result) : "w"(a) : );
++ return result;
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulh_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __c)
++{
++ return __builtin_aarch64_sqdmulh_laneqv4hi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulh_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __c)
++{
++ return __builtin_aarch64_sqdmulh_laneqv2si (__a, __b, __c);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __c)
++{
++ return __builtin_aarch64_sqdmulh_laneqv8hi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __c)
++{
++ return __builtin_aarch64_sqdmulh_laneqv4si (__a, __b, __c);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulh_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __c)
++{
++ return __builtin_aarch64_sqrdmulh_laneqv4hi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulh_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __c)
++{
++ return __builtin_aarch64_sqrdmulh_laneqv2si (__a, __b, __c);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __c)
++{
++ return __builtin_aarch64_sqrdmulh_laneqv8hi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __c)
++{
++ return __builtin_aarch64_sqrdmulh_laneqv4si (__a, __b, __c);
++}
++
++/* Table intrinsics. */
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl1_p8 (poly8x16_t a, uint8x8_t b)
++{
++ poly8x8_t result;
++ __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl1_s8 (int8x16_t a, uint8x8_t b)
++{
++ int8x8_t result;
++ __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl1_u8 (uint8x16_t a, uint8x8_t b)
++{
++ uint8x8_t result;
++ __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl1q_p8 (poly8x16_t a, uint8x16_t b)
++{
++ poly8x16_t result;
++ __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl1q_s8 (int8x16_t a, uint8x16_t b)
++{
++ int8x16_t result;
++ __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl1q_u8 (uint8x16_t a, uint8x16_t b)
++{
++ uint8x16_t result;
++ __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
++ : "=w"(result)
++ : "w"(a), "w"(b)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx1_s8 (int8x8_t r, int8x16_t tab, uint8x8_t idx)
++{
++ int8x8_t result = r;
++ __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
++ : "+w"(result)
++ : "w"(tab), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx1_u8 (uint8x8_t r, uint8x16_t tab, uint8x8_t idx)
++{
++ uint8x8_t result = r;
++ __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
++ : "+w"(result)
++ : "w"(tab), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx1_p8 (poly8x8_t r, poly8x16_t tab, uint8x8_t idx)
++{
++ poly8x8_t result = r;
++ __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
++ : "+w"(result)
++ : "w"(tab), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx1q_s8 (int8x16_t r, int8x16_t tab, uint8x16_t idx)
++{
++ int8x16_t result = r;
++ __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
++ : "+w"(result)
++ : "w"(tab), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx1q_u8 (uint8x16_t r, uint8x16_t tab, uint8x16_t idx)
++{
++ uint8x16_t result = r;
++ __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
++ : "+w"(result)
++ : "w"(tab), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx1q_p8 (poly8x16_t r, poly8x16_t tab, uint8x16_t idx)
++{
++ poly8x16_t result = r;
++ __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
++ : "+w"(result)
++ : "w"(tab), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++/* V7 legacy table intrinsics. */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl1_s8 (int8x8_t tab, int8x8_t idx)
++{
++ int8x8_t result;
++ int8x16_t temp = vcombine_s8 (tab, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
++ : "=w"(result)
++ : "w"(temp), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl1_u8 (uint8x8_t tab, uint8x8_t idx)
++{
+ uint8x8_t result;
+- __asm__ ("mvn %0.8b,%1.8b"
++ uint8x16_t temp = vcombine_u8 (tab, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+ : "=w"(result)
+- : "w"(a)
++ : "w"(temp), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl1_p8 (poly8x8_t tab, uint8x8_t idx)
++{
++ poly8x8_t result;
++ poly8x16_t temp = vcombine_p8 (tab, vcreate_p8 (__AARCH64_UINT64_C (0x0)));
++ __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
++ : "=w"(result)
++ : "w"(temp), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl2_s8 (int8x8x2_t tab, int8x8_t idx)
++{
++ int8x8_t result;
++ int8x16_t temp = vcombine_s8 (tab.val[0], tab.val[1]);
++ __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
++ : "=w"(result)
++ : "w"(temp), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl2_u8 (uint8x8x2_t tab, uint8x8_t idx)
++{
++ uint8x8_t result;
++ uint8x16_t temp = vcombine_u8 (tab.val[0], tab.val[1]);
++ __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
++ : "=w"(result)
++ : "w"(temp), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl2_p8 (poly8x8x2_t tab, uint8x8_t idx)
++{
++ poly8x8_t result;
++ poly8x16_t temp = vcombine_p8 (tab.val[0], tab.val[1]);
++ __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
++ : "=w"(result)
++ : "w"(temp), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl3_s8 (int8x8x3_t tab, int8x8_t idx)
++{
++ int8x8_t result;
++ int8x16x2_t temp;
++ __builtin_aarch64_simd_oi __o;
++ temp.val[0] = vcombine_s8 (tab.val[0], tab.val[1]);
++ temp.val[1] = vcombine_s8 (tab.val[2], vcreate_s8 (__AARCH64_UINT64_C (0x0)));
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[1], 1);
++ result = __builtin_aarch64_tbl3v8qi (__o, idx);
++ return result;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl3_u8 (uint8x8x3_t tab, uint8x8_t idx)
++{
++ uint8x8_t result;
++ uint8x16x2_t temp;
++ __builtin_aarch64_simd_oi __o;
++ temp.val[0] = vcombine_u8 (tab.val[0], tab.val[1]);
++ temp.val[1] = vcombine_u8 (tab.val[2], vcreate_u8 (__AARCH64_UINT64_C (0x0)));
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[1], 1);
++ result = (uint8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
++ return result;
++}
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl3_p8 (poly8x8x3_t tab, uint8x8_t idx)
++{
++ poly8x8_t result;
++ poly8x16x2_t temp;
++ __builtin_aarch64_simd_oi __o;
++ temp.val[0] = vcombine_p8 (tab.val[0], tab.val[1]);
++ temp.val[1] = vcombine_p8 (tab.val[2], vcreate_p8 (__AARCH64_UINT64_C (0x0)));
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[1], 1);
++ result = (poly8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
++ return result;
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl4_s8 (int8x8x4_t tab, int8x8_t idx)
++{
++ int8x8_t result;
++ int8x16x2_t temp;
++ __builtin_aarch64_simd_oi __o;
++ temp.val[0] = vcombine_s8 (tab.val[0], tab.val[1]);
++ temp.val[1] = vcombine_s8 (tab.val[2], tab.val[3]);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[1], 1);
++ result = __builtin_aarch64_tbl3v8qi (__o, idx);
++ return result;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl4_u8 (uint8x8x4_t tab, uint8x8_t idx)
++{
++ uint8x8_t result;
++ uint8x16x2_t temp;
++ __builtin_aarch64_simd_oi __o;
++ temp.val[0] = vcombine_u8 (tab.val[0], tab.val[1]);
++ temp.val[1] = vcombine_u8 (tab.val[2], tab.val[3]);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[1], 1);
++ result = (uint8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
++ return result;
++}
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbl4_p8 (poly8x8x4_t tab, uint8x8_t idx)
++{
++ poly8x8_t result;
++ poly8x16x2_t temp;
++ __builtin_aarch64_simd_oi __o;
++ temp.val[0] = vcombine_p8 (tab.val[0], tab.val[1]);
++ temp.val[1] = vcombine_p8 (tab.val[2], tab.val[3]);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[1], 1);
++ result = (poly8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
++ return result;
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx2_s8 (int8x8_t r, int8x8x2_t tab, int8x8_t idx)
++{
++ int8x8_t result = r;
++ int8x16_t temp = vcombine_s8 (tab.val[0], tab.val[1]);
++ __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
++ : "+w"(result)
++ : "w"(temp), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx2_u8 (uint8x8_t r, uint8x8x2_t tab, uint8x8_t idx)
++{
++ uint8x8_t result = r;
++ uint8x16_t temp = vcombine_u8 (tab.val[0], tab.val[1]);
++ __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
++ : "+w"(result)
++ : "w"(temp), "w"(idx)
++ : /* No clobbers */);
++ return result;
++}
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx2_p8 (poly8x8_t r, poly8x8x2_t tab, uint8x8_t idx)
++{
++ poly8x8_t result = r;
++ poly8x16_t temp = vcombine_p8 (tab.val[0], tab.val[1]);
++ __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
++ : "+w"(result)
++ : "w"(temp), "w"(idx)
+ : /* No clobbers */);
+ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmvn_u16 (uint16x4_t a)
++/* End of temporary inline asm. */
++
++/* Start of optimal implementations in approved order. */
++
++/* vabd. */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabds_f32 (float32_t __a, float32_t __b)
++{
++ return __builtin_aarch64_fabdsf (__a, __b);
++}
++
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabdd_f64 (float64_t __a, float64_t __b)
++{
++ return __builtin_aarch64_fabddf (__a, __b);
++}
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabd_f32 (float32x2_t __a, float32x2_t __b)
++{
++ return __builtin_aarch64_fabdv2sf (__a, __b);
++}
++
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabd_f64 (float64x1_t __a, float64x1_t __b)
++{
++ return (float64x1_t) {vabdd_f64 (vget_lane_f64 (__a, 0),
++ vget_lane_f64 (__b, 0))};
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabdq_f32 (float32x4_t __a, float32x4_t __b)
++{
++ return __builtin_aarch64_fabdv4sf (__a, __b);
++}
++
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabdq_f64 (float64x2_t __a, float64x2_t __b)
++{
++ return __builtin_aarch64_fabdv2df (__a, __b);
++}
++
++/* vabs */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabs_f32 (float32x2_t __a)
++{
++ return __builtin_aarch64_absv2sf (__a);
++}
++
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabs_f64 (float64x1_t __a)
++{
++ return (float64x1_t) {__builtin_fabs (__a[0])};
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabs_s8 (int8x8_t __a)
++{
++ return __builtin_aarch64_absv8qi (__a);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabs_s16 (int16x4_t __a)
++{
++ return __builtin_aarch64_absv4hi (__a);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabs_s32 (int32x2_t __a)
++{
++ return __builtin_aarch64_absv2si (__a);
++}
++
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabs_s64 (int64x1_t __a)
++{
++ return (int64x1_t) {__builtin_aarch64_absdi (__a[0])};
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabsq_f32 (float32x4_t __a)
++{
++ return __builtin_aarch64_absv4sf (__a);
++}
++
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabsq_f64 (float64x2_t __a)
++{
++ return __builtin_aarch64_absv2df (__a);
++}
++
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabsq_s8 (int8x16_t __a)
++{
++ return __builtin_aarch64_absv16qi (__a);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabsq_s16 (int16x8_t __a)
++{
++ return __builtin_aarch64_absv8hi (__a);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabsq_s32 (int32x4_t __a)
++{
++ return __builtin_aarch64_absv4si (__a);
++}
++
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabsq_s64 (int64x2_t __a)
++{
++ return __builtin_aarch64_absv2di (__a);
++}
++
++/* vadd */
++
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddd_s64 (int64_t __a, int64_t __b)
++{
++ return __a + __b;
++}
++
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddd_u64 (uint64_t __a, uint64_t __b)
++{
++ return __a + __b;
++}
++
++/* vaddv */
++
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddv_s8 (int8x8_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v8qi (__a);
++}
++
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddv_s16 (int16x4_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v4hi (__a);
++}
++
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddv_s32 (int32x2_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v2si (__a);
++}
++
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddv_u8 (uint8x8_t __a)
++{
++ return (uint8_t) __builtin_aarch64_reduc_plus_scal_v8qi ((int8x8_t) __a);
++}
++
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddv_u16 (uint16x4_t __a)
++{
++ return (uint16_t) __builtin_aarch64_reduc_plus_scal_v4hi ((int16x4_t) __a);
++}
++
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddv_u32 (uint32x2_t __a)
++{
++ return (int32_t) __builtin_aarch64_reduc_plus_scal_v2si ((int32x2_t) __a);
++}
++
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_s8 (int8x16_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v16qi (__a);
++}
++
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_s16 (int16x8_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v8hi (__a);
++}
++
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_s32 (int32x4_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v4si (__a);
++}
++
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_s64 (int64x2_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v2di (__a);
++}
++
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_u8 (uint8x16_t __a)
++{
++ return (uint8_t) __builtin_aarch64_reduc_plus_scal_v16qi ((int8x16_t) __a);
++}
++
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_u16 (uint16x8_t __a)
++{
++ return (uint16_t) __builtin_aarch64_reduc_plus_scal_v8hi ((int16x8_t) __a);
++}
++
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_u32 (uint32x4_t __a)
++{
++ return (uint32_t) __builtin_aarch64_reduc_plus_scal_v4si ((int32x4_t) __a);
++}
++
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_u64 (uint64x2_t __a)
++{
++ return (uint64_t) __builtin_aarch64_reduc_plus_scal_v2di ((int64x2_t) __a);
++}
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddv_f32 (float32x2_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v2sf (__a);
++}
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_f32 (float32x4_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v4sf (__a);
++}
++
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddvq_f64 (float64x2_t __a)
++{
++ return __builtin_aarch64_reduc_plus_scal_v2df (__a);
++}
++
++/* vbsl */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_f16 (uint16x4_t __a, float16x4_t __b, float16x4_t __c)
++{
++ return __builtin_aarch64_simd_bslv4hf_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_f32 (uint32x2_t __a, float32x2_t __b, float32x2_t __c)
++{
++ return __builtin_aarch64_simd_bslv2sf_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_f64 (uint64x1_t __a, float64x1_t __b, float64x1_t __c)
++{
++ return (float64x1_t)
++ { __builtin_aarch64_simd_bsldf_suss (__a[0], __b[0], __c[0]) };
++}
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_p8 (uint8x8_t __a, poly8x8_t __b, poly8x8_t __c)
++{
++ return __builtin_aarch64_simd_bslv8qi_pupp (__a, __b, __c);
++}
++
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_p16 (uint16x4_t __a, poly16x4_t __b, poly16x4_t __c)
++{
++ return __builtin_aarch64_simd_bslv4hi_pupp (__a, __b, __c);
++}
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_p64 (uint64x1_t __a, poly64x1_t __b, poly64x1_t __c)
++{
++ return (poly64x1_t)
++ {__builtin_aarch64_simd_bsldi_pupp (__a[0], __b[0], __c[0])};
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_s8 (uint8x8_t __a, int8x8_t __b, int8x8_t __c)
++{
++ return __builtin_aarch64_simd_bslv8qi_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_s16 (uint16x4_t __a, int16x4_t __b, int16x4_t __c)
++{
++ return __builtin_aarch64_simd_bslv4hi_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_s32 (uint32x2_t __a, int32x2_t __b, int32x2_t __c)
++{
++ return __builtin_aarch64_simd_bslv2si_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_s64 (uint64x1_t __a, int64x1_t __b, int64x1_t __c)
++{
++ return (int64x1_t)
++ {__builtin_aarch64_simd_bsldi_suss (__a[0], __b[0], __c[0])};
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
++{
++ return __builtin_aarch64_simd_bslv8qi_uuuu (__a, __b, __c);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c)
++{
++ return __builtin_aarch64_simd_bslv4hi_uuuu (__a, __b, __c);
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c)
++{
++ return __builtin_aarch64_simd_bslv2si_uuuu (__a, __b, __c);
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_u64 (uint64x1_t __a, uint64x1_t __b, uint64x1_t __c)
++{
++ return (uint64x1_t)
++ {__builtin_aarch64_simd_bsldi_uuuu (__a[0], __b[0], __c[0])};
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_f16 (uint16x8_t __a, float16x8_t __b, float16x8_t __c)
++{
++ return __builtin_aarch64_simd_bslv8hf_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_f32 (uint32x4_t __a, float32x4_t __b, float32x4_t __c)
++{
++ return __builtin_aarch64_simd_bslv4sf_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_f64 (uint64x2_t __a, float64x2_t __b, float64x2_t __c)
++{
++ return __builtin_aarch64_simd_bslv2df_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_p8 (uint8x16_t __a, poly8x16_t __b, poly8x16_t __c)
++{
++ return __builtin_aarch64_simd_bslv16qi_pupp (__a, __b, __c);
++}
++
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_p16 (uint16x8_t __a, poly16x8_t __b, poly16x8_t __c)
++{
++ return __builtin_aarch64_simd_bslv8hi_pupp (__a, __b, __c);
++}
++
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_s8 (uint8x16_t __a, int8x16_t __b, int8x16_t __c)
++{
++ return __builtin_aarch64_simd_bslv16qi_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_s16 (uint16x8_t __a, int16x8_t __b, int16x8_t __c)
++{
++ return __builtin_aarch64_simd_bslv8hi_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_p64 (uint64x2_t __a, poly64x2_t __b, poly64x2_t __c)
++{
++ return __builtin_aarch64_simd_bslv2di_pupp (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_s32 (uint32x4_t __a, int32x4_t __b, int32x4_t __c)
++{
++ return __builtin_aarch64_simd_bslv4si_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_s64 (uint64x2_t __a, int64x2_t __b, int64x2_t __c)
++{
++ return __builtin_aarch64_simd_bslv2di_suss (__a, __b, __c);
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
++{
++ return __builtin_aarch64_simd_bslv16qi_uuuu (__a, __b, __c);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
++{
++ return __builtin_aarch64_simd_bslv8hi_uuuu (__a, __b, __c);
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
++{
++ return __builtin_aarch64_simd_bslv4si_uuuu (__a, __b, __c);
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
++{
++ return __builtin_aarch64_simd_bslv2di_uuuu (__a, __b, __c);
++}
++
++/* ARMv8.1-A instrinsics. */
++#pragma GCC push_options
++#pragma GCC target ("arch=armv8.1-a")
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlah_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
++{
++ return __builtin_aarch64_sqrdmlahv4hi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlah_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
++{
++ return __builtin_aarch64_sqrdmlahv2si (__a, __b, __c);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
++{
++ return __builtin_aarch64_sqrdmlahv8hi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
++{
++ return __builtin_aarch64_sqrdmlahv4si (__a, __b, __c);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlsh_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
++{
++ return __builtin_aarch64_sqrdmlshv4hi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlsh_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
++{
++ return __builtin_aarch64_sqrdmlshv2si (__a, __b, __c);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
++{
++ return __builtin_aarch64_sqrdmlshv8hi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
++{
++ return __builtin_aarch64_sqrdmlshv4si (__a, __b, __c);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlah_laneq_s16 (int16x4_t __a, int16x4_t __b, int16x8_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_laneqv4hi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlah_laneq_s32 (int32x2_t __a, int32x2_t __b, int32x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_laneqv2si (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahq_laneq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_laneqv8hi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahq_laneq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_laneqv4si (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlsh_laneq_s16 (int16x4_t __a, int16x4_t __b, int16x8_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_laneqv4hi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlsh_laneq_s32 (int32x2_t __a, int32x2_t __b, int32x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_laneqv2si (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshq_laneq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_laneqv8hi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshq_laneq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_laneqv4si (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlah_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_lanev4hi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlah_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_lanev2si (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_lanev8hi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_lanev4si (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahh_s16 (int16_t __a, int16_t __b, int16_t __c)
++{
++ return (int16_t) __builtin_aarch64_sqrdmlahhi (__a, __b, __c);
++}
++
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahh_lane_s16 (int16_t __a, int16_t __b, int16x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_lanehi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahh_laneq_s16 (int16_t __a, int16_t __b, int16x8_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_laneqhi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahs_s32 (int32_t __a, int32_t __b, int32_t __c)
++{
++ return (int32_t) __builtin_aarch64_sqrdmlahsi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahs_lane_s32 (int32_t __a, int32_t __b, int32x2_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_lanesi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlahs_laneq_s32 (int32_t __a, int32_t __b, int32x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlah_laneqsi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlsh_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_lanev4hi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlsh_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_lanev2si (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_lanev8hi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_lanev4si (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshh_s16 (int16_t __a, int16_t __b, int16_t __c)
++{
++ return (int16_t) __builtin_aarch64_sqrdmlshhi (__a, __b, __c);
++}
++
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshh_lane_s16 (int16_t __a, int16_t __b, int16x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_lanehi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshh_laneq_s16 (int16_t __a, int16_t __b, int16x8_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_laneqhi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshs_s32 (int32_t __a, int32_t __b, int32_t __c)
++{
++ return (int32_t) __builtin_aarch64_sqrdmlshsi (__a, __b, __c);
++}
++
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshs_lane_s32 (int32_t __a, int32_t __b, int32x2_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_lanesi (__a, __b, __c, __d);
++}
++
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmlshs_laneq_s32 (int32_t __a, int32_t __b, int32x4_t __c, const int __d)
++{
++ return __builtin_aarch64_sqrdmlsh_laneqsi (__a, __b, __c, __d);
++}
++#pragma GCC pop_options
++
++#pragma GCC push_options
++#pragma GCC target ("+nothing+crypto")
++/* vaes */
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaeseq_u8 (uint8x16_t data, uint8x16_t key)
+ {
+- uint16x4_t result;
+- __asm__ ("mvn %0.8b,%1.8b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return __builtin_aarch64_crypto_aesev16qi_uuu (data, key);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmvn_u32 (uint32x2_t a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaesdq_u8 (uint8x16_t data, uint8x16_t key)
+ {
+- uint32x2_t result;
+- __asm__ ("mvn %0.8b,%1.8b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return __builtin_aarch64_crypto_aesdv16qi_uuu (data, key);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vmvnq_p8 (poly8x16_t a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaesmcq_u8 (uint8x16_t data)
+ {
+- poly8x16_t result;
+- __asm__ ("mvn %0.16b,%1.16b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return __builtin_aarch64_crypto_aesmcv16qi_uu (data);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vmvnq_s8 (int8x16_t a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaesimcq_u8 (uint8x16_t data)
+ {
+- int8x16_t result;
+- __asm__ ("mvn %0.16b,%1.16b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return __builtin_aarch64_crypto_aesimcv16qi_uu (data);
+ }
++#pragma GCC pop_options
++
++/* vcage */
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmvnq_s16 (int16x8_t a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcage_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- int16x8_t result;
+- __asm__ ("mvn %0.16b,%1.16b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return vabs_f64 (__a) >= vabs_f64 (__b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmvnq_s32 (int32x4_t a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcages_f32 (float32_t __a, float32_t __b)
+ {
+- int32x4_t result;
+- __asm__ ("mvn %0.16b,%1.16b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return __builtin_fabsf (__a) >= __builtin_fabsf (__b) ? -1 : 0;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vmvnq_u8 (uint8x16_t a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcage_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- uint8x16_t result;
+- __asm__ ("mvn %0.16b,%1.16b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return vabs_f32 (__a) >= vabs_f32 (__b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmvnq_u16 (uint16x8_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcageq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- uint16x8_t result;
+- __asm__ ("mvn %0.16b,%1.16b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return vabsq_f32 (__a) >= vabsq_f32 (__b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmvnq_u32 (uint32x4_t a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaged_f64 (float64_t __a, float64_t __b)
+ {
+- uint32x4_t result;
+- __asm__ ("mvn %0.16b,%1.16b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return __builtin_fabs (__a) >= __builtin_fabs (__b) ? -1 : 0;
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcageq_f64 (float64x2_t __a, float64x2_t __b)
++{
++ return vabsq_f64 (__a) >= vabsq_f64 (__b);
+ }
+
++/* vcagt */
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vpadal_s8 (int16x4_t a, int8x8_t b)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagts_f32 (float32_t __a, float32_t __b)
+ {
+- int16x4_t result;
+- __asm__ ("sadalp %0.4h,%2.8b"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return __builtin_fabsf (__a) > __builtin_fabsf (__b) ? -1 : 0;
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagt_f32 (float32x2_t __a, float32x2_t __b)
++{
++ return vabs_f32 (__a) > vabs_f32 (__b);
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagt_f64 (float64x1_t __a, float64x1_t __b)
++{
++ return vabs_f64 (__a) > vabs_f64 (__b);
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagtq_f32 (float32x4_t __a, float32x4_t __b)
++{
++ return vabsq_f32 (__a) > vabsq_f32 (__b);
++}
++
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagtd_f64 (float64_t __a, float64_t __b)
++{
++ return __builtin_fabs (__a) > __builtin_fabs (__b) ? -1 : 0;
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagtq_f64 (float64x2_t __a, float64x2_t __b)
++{
++ return vabsq_f64 (__a) > vabsq_f64 (__b);
++}
++
++/* vcale */
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcale_f32 (float32x2_t __a, float32x2_t __b)
++{
++ return vabs_f32 (__a) <= vabs_f32 (__b);
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcale_f64 (float64x1_t __a, float64x1_t __b)
++{
++ return vabs_f64 (__a) <= vabs_f64 (__b);
++}
++
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaled_f64 (float64_t __a, float64_t __b)
++{
++ return __builtin_fabs (__a) <= __builtin_fabs (__b) ? -1 : 0;
++}
++
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcales_f32 (float32_t __a, float32_t __b)
++{
++ return __builtin_fabsf (__a) <= __builtin_fabsf (__b) ? -1 : 0;
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaleq_f32 (float32x4_t __a, float32x4_t __b)
++{
++ return vabsq_f32 (__a) <= vabsq_f32 (__b);
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaleq_f64 (float64x2_t __a, float64x2_t __b)
++{
++ return vabsq_f64 (__a) <= vabsq_f64 (__b);
++}
++
++/* vcalt */
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcalt_f32 (float32x2_t __a, float32x2_t __b)
++{
++ return vabs_f32 (__a) < vabs_f32 (__b);
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcalt_f64 (float64x1_t __a, float64x1_t __b)
++{
++ return vabs_f64 (__a) < vabs_f64 (__b);
++}
++
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaltd_f64 (float64_t __a, float64_t __b)
++{
++ return __builtin_fabs (__a) < __builtin_fabs (__b) ? -1 : 0;
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaltq_f32 (float32x4_t __a, float32x4_t __b)
++{
++ return vabsq_f32 (__a) < vabsq_f32 (__b);
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaltq_f64 (float64x2_t __a, float64x2_t __b)
++{
++ return vabsq_f64 (__a) < vabsq_f64 (__b);
++}
++
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcalts_f32 (float32_t __a, float32_t __b)
++{
++ return __builtin_fabsf (__a) < __builtin_fabsf (__b) ? -1 : 0;
++}
++
++/* vceq - vector. */
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_f32 (float32x2_t __a, float32x2_t __b)
++{
++ return (uint32x2_t) (__a == __b);
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_f64 (float64x1_t __a, float64x1_t __b)
++{
++ return (uint64x1_t) (__a == __b);
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_p8 (poly8x8_t __a, poly8x8_t __b)
++{
++ return (uint8x8_t) (__a == __b);
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_p64 (poly64x1_t __a, poly64x1_t __b)
++{
++ return (uint64x1_t) (__a == __b);
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_s8 (int8x8_t __a, int8x8_t __b)
++{
++ return (uint8x8_t) (__a == __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_s16 (int16x4_t __a, int16x4_t __b)
++{
++ return (uint16x4_t) (__a == __b);
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_s32 (int32x2_t __a, int32x2_t __b)
++{
++ return (uint32x2_t) (__a == __b);
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_s64 (int64x1_t __a, int64x1_t __b)
++{
++ return (uint64x1_t) (__a == __b);
++}
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_u8 (uint8x8_t __a, uint8x8_t __b)
++{
++ return (__a == __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_u16 (uint16x4_t __a, uint16x4_t __b)
++{
++ return (__a == __b);
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_u32 (uint32x2_t __a, uint32x2_t __b)
++{
++ return (__a == __b);
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_u64 (uint64x1_t __a, uint64x1_t __b)
++{
++ return (__a == __b);
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_f32 (float32x4_t __a, float32x4_t __b)
++{
++ return (uint32x4_t) (__a == __b);
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_f64 (float64x2_t __a, float64x2_t __b)
++{
++ return (uint64x2_t) (__a == __b);
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_p8 (poly8x16_t __a, poly8x16_t __b)
++{
++ return (uint8x16_t) (__a == __b);
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_s8 (int8x16_t __a, int8x16_t __b)
++{
++ return (uint8x16_t) (__a == __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vpadal_s16 (int32x2_t a, int16x4_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- int32x2_t result;
+- __asm__ ("sadalp %0.2s,%2.4h"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint16x8_t) (__a == __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vpadal_s32 (int64x1_t a, int32x2_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- int64x1_t result;
+- __asm__ ("sadalp %0.1d,%2.2s"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a == __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vpadal_u8 (uint16x4_t a, uint8x8_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- uint16x4_t result;
+- __asm__ ("uadalp %0.4h,%2.8b"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint64x2_t) (__a == __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vpadal_u16 (uint32x2_t a, uint16x4_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- uint32x2_t result;
+- __asm__ ("uadalp %0.2s,%2.4h"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a == __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vpadal_u32 (uint64x1_t a, uint32x2_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+- uint64x1_t result;
+- __asm__ ("uadalp %0.1d,%2.2s"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a == __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vpadalq_s8 (int16x8_t a, int8x16_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+- int16x8_t result;
+- __asm__ ("sadalp %0.8h,%2.16b"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a == __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vpadalq_s16 (int32x4_t a, int16x8_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+- int32x4_t result;
+- __asm__ ("sadalp %0.4s,%2.8h"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a == __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vpadalq_s32 (int64x2_t a, int32x4_t b)
++/* vceq - scalar. */
++
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqs_f32 (float32_t __a, float32_t __b)
+ {
+- int64x2_t result;
+- __asm__ ("sadalp %0.2d,%2.4s"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return __a == __b ? -1 : 0;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vpadalq_u8 (uint16x8_t a, uint8x16_t b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqd_s64 (int64_t __a, int64_t __b)
+ {
+- uint16x8_t result;
+- __asm__ ("uadalp %0.8h,%2.16b"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return __a == __b ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vpadalq_u16 (uint32x4_t a, uint16x8_t b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqd_u64 (uint64_t __a, uint64_t __b)
+ {
+- uint32x4_t result;
+- __asm__ ("uadalp %0.4s,%2.8h"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return __a == __b ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vpadalq_u32 (uint64x2_t a, uint32x4_t b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqd_f64 (float64_t __a, float64_t __b)
+ {
+- uint64x2_t result;
+- __asm__ ("uadalp %0.2d,%2.4s"
+- : "=w"(result)
+- : "0"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return __a == __b ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vpadd_f32 (float32x2_t a, float32x2_t b)
++/* vceqz - vector. */
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_f32 (float32x2_t __a)
+ {
+- float32x2_t result;
+- __asm__ ("faddp %0.2s,%1.2s,%2.2s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x2_t) (__a == 0.0f);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vpaddl_s8 (int8x8_t a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_f64 (float64x1_t __a)
+ {
+- int16x4_t result;
+- __asm__ ("saddlp %0.4h,%1.8b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint64x1_t) (__a == (float64x1_t) {0.0});
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vpaddl_s16 (int16x4_t a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_p8 (poly8x8_t __a)
+ {
+- int32x2_t result;
+- __asm__ ("saddlp %0.2s,%1.4h"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint8x8_t) (__a == 0);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vpaddl_s32 (int32x2_t a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_s8 (int8x8_t __a)
+ {
+- int64x1_t result;
+- __asm__ ("saddlp %0.1d,%1.2s"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint8x8_t) (__a == 0);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vpaddl_u8 (uint8x8_t a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_s16 (int16x4_t __a)
+ {
+- uint16x4_t result;
+- __asm__ ("uaddlp %0.4h,%1.8b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint16x4_t) (__a == 0);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vpaddl_u16 (uint16x4_t a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_s32 (int32x2_t __a)
+ {
+- uint32x2_t result;
+- __asm__ ("uaddlp %0.2s,%1.4h"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint32x2_t) (__a == 0);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vpaddl_u32 (uint32x2_t a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_s64 (int64x1_t __a)
+ {
+- uint64x1_t result;
+- __asm__ ("uaddlp %0.1d,%1.2s"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint64x1_t) (__a == __AARCH64_INT64_C (0));
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vpaddlq_s8 (int8x16_t a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_u8 (uint8x8_t __a)
+ {
+- int16x8_t result;
+- __asm__ ("saddlp %0.8h,%1.16b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (__a == 0);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vpaddlq_s16 (int16x8_t a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_u16 (uint16x4_t __a)
+ {
+- int32x4_t result;
+- __asm__ ("saddlp %0.4s,%1.8h"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (__a == 0);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vpaddlq_s32 (int32x4_t a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_u32 (uint32x2_t __a)
+ {
+- int64x2_t result;
+- __asm__ ("saddlp %0.2d,%1.4s"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (__a == 0);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vpaddlq_u8 (uint8x16_t a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_u64 (uint64x1_t __a)
+ {
+- uint16x8_t result;
+- __asm__ ("uaddlp %0.8h,%1.16b"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (__a == __AARCH64_UINT64_C (0));
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vpaddlq_u16 (uint16x8_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_f32 (float32x4_t __a)
+ {
+- uint32x4_t result;
+- __asm__ ("uaddlp %0.4s,%1.8h"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a == 0.0f);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vpaddlq_u32 (uint32x4_t a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_f64 (float64x2_t __a)
+ {
+- uint64x2_t result;
+- __asm__ ("uaddlp %0.2d,%1.4s"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint64x2_t) (__a == 0.0f);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vpaddq_f32 (float32x4_t a, float32x4_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_p8 (poly8x16_t __a)
+ {
+- float32x4_t result;
+- __asm__ ("faddp %0.4s,%1.4s,%2.4s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint8x16_t) (__a == 0);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vpaddq_f64 (float64x2_t a, float64x2_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_s8 (int8x16_t __a)
+ {
+- float64x2_t result;
+- __asm__ ("faddp %0.2d,%1.2d,%2.2d"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint8x16_t) (__a == 0);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vpaddq_s8 (int8x16_t a, int8x16_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_s16 (int16x8_t __a)
+ {
+- int8x16_t result;
+- __asm__ ("addp %0.16b,%1.16b,%2.16b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint16x8_t) (__a == 0);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vpaddq_s16 (int16x8_t a, int16x8_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_s32 (int32x4_t __a)
+ {
+- int16x8_t result;
+- __asm__ ("addp %0.8h,%1.8h,%2.8h"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a == 0);
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_s64 (int64x2_t __a)
++{
++ return (uint64x2_t) (__a == __AARCH64_INT64_C (0));
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_u8 (uint8x16_t __a)
++{
++ return (__a == 0);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vpaddq_s32 (int32x4_t a, int32x4_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_u16 (uint16x8_t __a)
+ {
+- int32x4_t result;
+- __asm__ ("addp %0.4s,%1.4s,%2.4s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a == 0);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vpaddq_s64 (int64x2_t a, int64x2_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_u32 (uint32x4_t __a)
+ {
+- int64x2_t result;
+- __asm__ ("addp %0.2d,%1.2d,%2.2d"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a == 0);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vpaddq_u8 (uint8x16_t a, uint8x16_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_u64 (uint64x2_t __a)
+ {
+- uint8x16_t result;
+- __asm__ ("addp %0.16b,%1.16b,%2.16b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a == __AARCH64_UINT64_C (0));
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vpaddq_u16 (uint16x8_t a, uint16x8_t b)
++/* vceqz - scalar. */
++
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzs_f32 (float32_t __a)
+ {
+- uint16x8_t result;
+- __asm__ ("addp %0.8h,%1.8h,%2.8h"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return __a == 0.0f ? -1 : 0;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vpaddq_u32 (uint32x4_t a, uint32x4_t b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzd_s64 (int64_t __a)
+ {
+- uint32x4_t result;
+- __asm__ ("addp %0.4s,%1.4s,%2.4s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return __a == 0 ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vpaddq_u64 (uint64x2_t a, uint64x2_t b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzd_u64 (uint64_t __a)
+ {
+- uint64x2_t result;
+- __asm__ ("addp %0.2d,%1.2d,%2.2d"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return __a == 0 ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vpadds_f32 (float32x2_t a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzd_f64 (float64_t __a)
+ {
+- float32_t result;
+- __asm__ ("faddp %s0,%1.2s"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return __a == 0.0 ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqdmulh_n_s16 (int16x4_t a, int16_t b)
++/* vcge - vector. */
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- int16x4_t result;
+- __asm__ ("sqdmulh %0.4h,%1.4h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x2_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqdmulh_n_s32 (int32x2_t a, int32_t b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- int32x2_t result;
+- __asm__ ("sqdmulh %0.2s,%1.2s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint64x1_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqdmulhq_n_s16 (int16x8_t a, int16_t b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- int16x8_t result;
+- __asm__ ("sqdmulh %0.8h,%1.8h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint8x8_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmulhq_n_s32 (int32x4_t a, int32_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- int32x4_t result;
+- __asm__ ("sqdmulh %0.4s,%1.4s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint16x4_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqmovn_high_s16 (int8x8_t a, int16x8_t b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- int8x16_t result = vcombine_s8 (a, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("sqxtn2 %0.16b, %1.8h"
+- : "+w"(result)
+- : "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x2_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqmovn_high_s32 (int16x4_t a, int32x4_t b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_s64 (int64x1_t __a, int64x1_t __b)
+ {
+- int16x8_t result = vcombine_s16 (a, vcreate_s16 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("sqxtn2 %0.8h, %1.4s"
+- : "+w"(result)
+- : "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint64x1_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqmovn_high_s64 (int32x2_t a, int64x2_t b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- int32x4_t result = vcombine_s32 (a, vcreate_s32 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("sqxtn2 %0.4s, %1.2d"
+- : "+w"(result)
+- : "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a >= __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqmovn_high_u16 (uint8x8_t a, uint16x8_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("uqxtn2 %0.16b, %1.8h"
+- : "+w"(result)
+- : "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a >= __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vqmovn_high_u32 (uint16x4_t a, uint32x4_t b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("uqxtn2 %0.8h, %1.4s"
+- : "+w"(result)
+- : "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a >= __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vqmovn_high_u64 (uint32x2_t a, uint64x2_t b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+- uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("uqxtn2 %0.4s, %1.2d"
+- : "+w"(result)
+- : "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a >= __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqmovun_high_s16 (uint8x8_t a, int16x8_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("sqxtun2 %0.16b, %1.8h"
+- : "+w"(result)
+- : "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a >= __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vqmovun_high_s32 (uint16x4_t a, int32x4_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("sqxtun2 %0.8h, %1.4s"
+- : "+w"(result)
+- : "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint64x2_t) (__a >= __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vqmovun_high_s64 (uint32x2_t a, int64x2_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("sqxtun2 %0.4s, %1.2d"
+- : "+w"(result)
+- : "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint8x16_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrdmulh_n_s16 (int16x4_t a, int16_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- int16x4_t result;
+- __asm__ ("sqrdmulh %0.4h,%1.4h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint16x8_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrdmulh_n_s32 (int32x2_t a, int32_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- int32x2_t result;
+- __asm__ ("sqrdmulh %0.2s,%1.2s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrdmulhq_n_s16 (int16x8_t a, int16_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- int16x8_t result;
+- __asm__ ("sqrdmulh %0.8h,%1.8h,%2.h[0]"
+- : "=w"(result)
+- : "w"(a), "x"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint64x2_t) (__a >= __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrdmulhq_n_s32 (int32x4_t a, int32_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- int32x4_t result;
+- __asm__ ("sqrdmulh %0.4s,%1.4s,%2.s[0]"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a >= __b);
+ }
+
+-#define vqrshrn_high_n_s16(a, b, c) \
+- __extension__ \
+- ({ \
+- int16x8_t b_ = (b); \
+- int8x8_t a_ = (a); \
+- int8x16_t result = vcombine_s8 \
+- (a_, vcreate_s8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqrshrn2 %0.16b, %1.8h, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
++{
++ return (__a >= __b);
++}
+
+-#define vqrshrn_high_n_s32(a, b, c) \
+- __extension__ \
+- ({ \
+- int32x4_t b_ = (b); \
+- int16x4_t a_ = (a); \
+- int16x8_t result = vcombine_s16 \
+- (a_, vcreate_s16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqrshrn2 %0.8h, %1.4s, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
++{
++ return (__a >= __b);
++}
+
+-#define vqrshrn_high_n_s64(a, b, c) \
+- __extension__ \
+- ({ \
+- int64x2_t b_ = (b); \
+- int32x2_t a_ = (a); \
+- int32x4_t result = vcombine_s32 \
+- (a_, vcreate_s32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqrshrn2 %0.4s, %1.2d, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
++{
++ return (__a >= __b);
++}
+
+-#define vqrshrn_high_n_u16(a, b, c) \
+- __extension__ \
+- ({ \
+- uint16x8_t b_ = (b); \
+- uint8x8_t a_ = (a); \
+- uint8x16_t result = vcombine_u8 \
+- (a_, vcreate_u8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("uqrshrn2 %0.16b, %1.8h, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++/* vcge - scalar. */
+
+-#define vqrshrn_high_n_u32(a, b, c) \
+- __extension__ \
+- ({ \
+- uint32x4_t b_ = (b); \
+- uint16x4_t a_ = (a); \
+- uint16x8_t result = vcombine_u16 \
+- (a_, vcreate_u16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("uqrshrn2 %0.8h, %1.4s, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcges_f32 (float32_t __a, float32_t __b)
++{
++ return __a >= __b ? -1 : 0;
++}
+
+-#define vqrshrn_high_n_u64(a, b, c) \
+- __extension__ \
+- ({ \
+- uint64x2_t b_ = (b); \
+- uint32x2_t a_ = (a); \
+- uint32x4_t result = vcombine_u32 \
+- (a_, vcreate_u32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("uqrshrn2 %0.4s, %1.2d, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcged_s64 (int64_t __a, int64_t __b)
++{
++ return __a >= __b ? -1ll : 0ll;
++}
+
+-#define vqrshrun_high_n_s16(a, b, c) \
+- __extension__ \
+- ({ \
+- int16x8_t b_ = (b); \
+- uint8x8_t a_ = (a); \
+- uint8x16_t result = vcombine_u8 \
+- (a_, vcreate_u8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqrshrun2 %0.16b, %1.8h, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcged_u64 (uint64_t __a, uint64_t __b)
++{
++ return __a >= __b ? -1ll : 0ll;
++}
+
+-#define vqrshrun_high_n_s32(a, b, c) \
+- __extension__ \
+- ({ \
+- int32x4_t b_ = (b); \
+- uint16x4_t a_ = (a); \
+- uint16x8_t result = vcombine_u16 \
+- (a_, vcreate_u16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqrshrun2 %0.8h, %1.4s, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcged_f64 (float64_t __a, float64_t __b)
++{
++ return __a >= __b ? -1ll : 0ll;
++}
+
+-#define vqrshrun_high_n_s64(a, b, c) \
+- __extension__ \
+- ({ \
+- int64x2_t b_ = (b); \
+- uint32x2_t a_ = (a); \
+- uint32x4_t result = vcombine_u32 \
+- (a_, vcreate_u32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqrshrun2 %0.4s, %1.2d, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++/* vcgez - vector. */
+
+-#define vqshrn_high_n_s16(a, b, c) \
+- __extension__ \
+- ({ \
+- int16x8_t b_ = (b); \
+- int8x8_t a_ = (a); \
+- int8x16_t result = vcombine_s8 \
+- (a_, vcreate_s8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqshrn2 %0.16b, %1.8h, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgez_f32 (float32x2_t __a)
++{
++ return (uint32x2_t) (__a >= 0.0f);
++}
+
+-#define vqshrn_high_n_s32(a, b, c) \
+- __extension__ \
+- ({ \
+- int32x4_t b_ = (b); \
+- int16x4_t a_ = (a); \
+- int16x8_t result = vcombine_s16 \
+- (a_, vcreate_s16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqshrn2 %0.8h, %1.4s, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgez_f64 (float64x1_t __a)
++{
++ return (uint64x1_t) (__a[0] >= (float64x1_t) {0.0});
++}
+
+-#define vqshrn_high_n_s64(a, b, c) \
+- __extension__ \
+- ({ \
+- int64x2_t b_ = (b); \
+- int32x2_t a_ = (a); \
+- int32x4_t result = vcombine_s32 \
+- (a_, vcreate_s32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqshrn2 %0.4s, %1.2d, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgez_s8 (int8x8_t __a)
++{
++ return (uint8x8_t) (__a >= 0);
++}
+
+-#define vqshrn_high_n_u16(a, b, c) \
+- __extension__ \
+- ({ \
+- uint16x8_t b_ = (b); \
+- uint8x8_t a_ = (a); \
+- uint8x16_t result = vcombine_u8 \
+- (a_, vcreate_u8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("uqshrn2 %0.16b, %1.8h, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgez_s16 (int16x4_t __a)
++{
++ return (uint16x4_t) (__a >= 0);
++}
+
+-#define vqshrn_high_n_u32(a, b, c) \
+- __extension__ \
+- ({ \
+- uint32x4_t b_ = (b); \
+- uint16x4_t a_ = (a); \
+- uint16x8_t result = vcombine_u16 \
+- (a_, vcreate_u16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("uqshrn2 %0.8h, %1.4s, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgez_s32 (int32x2_t __a)
++{
++ return (uint32x2_t) (__a >= 0);
++}
+
+-#define vqshrn_high_n_u64(a, b, c) \
+- __extension__ \
+- ({ \
+- uint64x2_t b_ = (b); \
+- uint32x2_t a_ = (a); \
+- uint32x4_t result = vcombine_u32 \
+- (a_, vcreate_u32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("uqshrn2 %0.4s, %1.2d, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgez_s64 (int64x1_t __a)
++{
++ return (uint64x1_t) (__a >= __AARCH64_INT64_C (0));
++}
+
+-#define vqshrun_high_n_s16(a, b, c) \
+- __extension__ \
+- ({ \
+- int16x8_t b_ = (b); \
+- uint8x8_t a_ = (a); \
+- uint8x16_t result = vcombine_u8 \
+- (a_, vcreate_u8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqshrun2 %0.16b, %1.8h, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezq_f32 (float32x4_t __a)
++{
++ return (uint32x4_t) (__a >= 0.0f);
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezq_f64 (float64x2_t __a)
++{
++ return (uint64x2_t) (__a >= 0.0);
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezq_s8 (int8x16_t __a)
++{
++ return (uint8x16_t) (__a >= 0);
++}
+
+-#define vqshrun_high_n_s32(a, b, c) \
+- __extension__ \
+- ({ \
+- int32x4_t b_ = (b); \
+- uint16x4_t a_ = (a); \
+- uint16x8_t result = vcombine_u16 \
+- (a_, vcreate_u16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqshrun2 %0.8h, %1.4s, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezq_s16 (int16x8_t __a)
++{
++ return (uint16x8_t) (__a >= 0);
++}
+
+-#define vqshrun_high_n_s64(a, b, c) \
+- __extension__ \
+- ({ \
+- int64x2_t b_ = (b); \
+- uint32x2_t a_ = (a); \
+- uint32x4_t result = vcombine_u32 \
+- (a_, vcreate_u32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("sqshrun2 %0.4s, %1.2d, #%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezq_s32 (int32x4_t __a)
++{
++ return (uint32x4_t) (__a >= 0);
++}
+
+-#define vrshrn_high_n_s16(a, b, c) \
+- __extension__ \
+- ({ \
+- int16x8_t b_ = (b); \
+- int8x8_t a_ = (a); \
+- int8x16_t result = vcombine_s8 \
+- (a_, vcreate_s8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("rshrn2 %0.16b,%1.8h,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezq_s64 (int64x2_t __a)
++{
++ return (uint64x2_t) (__a >= __AARCH64_INT64_C (0));
++}
+
+-#define vrshrn_high_n_s32(a, b, c) \
+- __extension__ \
+- ({ \
+- int32x4_t b_ = (b); \
+- int16x4_t a_ = (a); \
+- int16x8_t result = vcombine_s16 \
+- (a_, vcreate_s16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("rshrn2 %0.8h,%1.4s,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++/* vcgez - scalar. */
+
+-#define vrshrn_high_n_s64(a, b, c) \
+- __extension__ \
+- ({ \
+- int64x2_t b_ = (b); \
+- int32x2_t a_ = (a); \
+- int32x4_t result = vcombine_s32 \
+- (a_, vcreate_s32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("rshrn2 %0.4s,%1.2d,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezs_f32 (float32_t __a)
++{
++ return __a >= 0.0f ? -1 : 0;
++}
+
+-#define vrshrn_high_n_u16(a, b, c) \
+- __extension__ \
+- ({ \
+- uint16x8_t b_ = (b); \
+- uint8x8_t a_ = (a); \
+- uint8x16_t result = vcombine_u8 \
+- (a_, vcreate_u8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("rshrn2 %0.16b,%1.8h,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezd_s64 (int64_t __a)
++{
++ return __a >= 0 ? -1ll : 0ll;
++}
+
+-#define vrshrn_high_n_u32(a, b, c) \
+- __extension__ \
+- ({ \
+- uint32x4_t b_ = (b); \
+- uint16x4_t a_ = (a); \
+- uint16x8_t result = vcombine_u16 \
+- (a_, vcreate_u16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("rshrn2 %0.8h,%1.4s,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezd_f64 (float64_t __a)
++{
++ return __a >= 0.0 ? -1ll : 0ll;
++}
+
+-#define vrshrn_high_n_u64(a, b, c) \
+- __extension__ \
+- ({ \
+- uint64x2_t b_ = (b); \
+- uint32x2_t a_ = (a); \
+- uint32x4_t result = vcombine_u32 \
+- (a_, vcreate_u32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("rshrn2 %0.4s,%1.2d,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++/* vcgt - vector. */
+
+-#define vrshrn_n_s16(a, b) \
+- __extension__ \
+- ({ \
+- int16x8_t a_ = (a); \
+- int8x8_t result; \
+- __asm__ ("rshrn %0.8b,%1.8h,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_f32 (float32x2_t __a, float32x2_t __b)
++{
++ return (uint32x2_t) (__a > __b);
++}
+
+-#define vrshrn_n_s32(a, b) \
+- __extension__ \
+- ({ \
+- int32x4_t a_ = (a); \
+- int16x4_t result; \
+- __asm__ ("rshrn %0.4h,%1.4s,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_f64 (float64x1_t __a, float64x1_t __b)
++{
++ return (uint64x1_t) (__a > __b);
++}
+
+-#define vrshrn_n_s64(a, b) \
+- __extension__ \
+- ({ \
+- int64x2_t a_ = (a); \
+- int32x2_t result; \
+- __asm__ ("rshrn %0.2s,%1.2d,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_s8 (int8x8_t __a, int8x8_t __b)
++{
++ return (uint8x8_t) (__a > __b);
++}
+
+-#define vrshrn_n_u16(a, b) \
+- __extension__ \
+- ({ \
+- uint16x8_t a_ = (a); \
+- uint8x8_t result; \
+- __asm__ ("rshrn %0.8b,%1.8h,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_s16 (int16x4_t __a, int16x4_t __b)
++{
++ return (uint16x4_t) (__a > __b);
++}
+
+-#define vrshrn_n_u32(a, b) \
+- __extension__ \
+- ({ \
+- uint32x4_t a_ = (a); \
+- uint16x4_t result; \
+- __asm__ ("rshrn %0.4h,%1.4s,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_s32 (int32x2_t __a, int32x2_t __b)
++{
++ return (uint32x2_t) (__a > __b);
++}
+
+-#define vrshrn_n_u64(a, b) \
+- __extension__ \
+- ({ \
+- uint64x2_t a_ = (a); \
+- uint32x2_t result; \
+- __asm__ ("rshrn %0.2s,%1.2d,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_s64 (int64x1_t __a, int64x1_t __b)
++{
++ return (uint64x1_t) (__a > __b);
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrsqrte_f32 (float32x2_t a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- float32x2_t result;
+- __asm__ ("frsqrte %0.2s,%1.2s"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (__a > __b);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vrsqrte_f64 (float64x1_t a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- float64x1_t result;
+- __asm__ ("frsqrte %d0,%d1"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (__a > __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vrsqrte_u32 (uint32x2_t a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- uint32x2_t result;
+- __asm__ ("ursqrte %0.2s,%1.2s"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (__a > __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vrsqrted_f64 (float64_t a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+- float64_t result;
+- __asm__ ("frsqrte %d0,%d1"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (__a > __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrsqrteq_f32 (float32x4_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- float32x4_t result;
+- __asm__ ("frsqrte %0.4s,%1.4s"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a > __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrsqrteq_f64 (float64x2_t a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- float64x2_t result;
+- __asm__ ("frsqrte %0.2d,%1.2d"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint64x2_t) (__a > __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vrsqrteq_u32 (uint32x4_t a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- uint32x4_t result;
+- __asm__ ("ursqrte %0.4s,%1.4s"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint8x16_t) (__a > __b);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vrsqrtes_f32 (float32_t a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- float32_t result;
+- __asm__ ("frsqrte %s0,%s1"
+- : "=w"(result)
+- : "w"(a)
+- : /* No clobbers */);
+- return result;
++ return (uint16x8_t) (__a > __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrsqrts_f32 (float32x2_t a, float32x2_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- float32x2_t result;
+- __asm__ ("frsqrts %0.2s,%1.2s,%2.2s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a > __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vrsqrtsd_f64 (float64_t a, float64_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- float64_t result;
+- __asm__ ("frsqrts %d0,%d1,%d2"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint64x2_t) (__a > __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrsqrtsq_f32 (float32x4_t a, float32x4_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- float32x4_t result;
+- __asm__ ("frsqrts %0.4s,%1.4s,%2.4s"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a > __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrsqrtsq_f64 (float64x2_t a, float64x2_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+- float64x2_t result;
+- __asm__ ("frsqrts %0.2d,%1.2d,%2.2d"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a > __b);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vrsqrtss_f32 (float32_t a, float32_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+- float32_t result;
+- __asm__ ("frsqrts %s0,%s1,%s2"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (__a > __b);
+ }
+
+-#define vshrn_high_n_s16(a, b, c) \
+- __extension__ \
+- ({ \
+- int16x8_t b_ = (b); \
+- int8x8_t a_ = (a); \
+- int8x16_t result = vcombine_s8 \
+- (a_, vcreate_s8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("shrn2 %0.16b,%1.8h,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vshrn_high_n_s32(a, b, c) \
+- __extension__ \
+- ({ \
+- int32x4_t b_ = (b); \
+- int16x4_t a_ = (a); \
+- int16x8_t result = vcombine_s16 \
+- (a_, vcreate_s16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("shrn2 %0.8h,%1.4s,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vshrn_high_n_s64(a, b, c) \
+- __extension__ \
+- ({ \
+- int64x2_t b_ = (b); \
+- int32x2_t a_ = (a); \
+- int32x4_t result = vcombine_s32 \
+- (a_, vcreate_s32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("shrn2 %0.4s,%1.2d,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vshrn_high_n_u16(a, b, c) \
+- __extension__ \
+- ({ \
+- uint16x8_t b_ = (b); \
+- uint8x8_t a_ = (a); \
+- uint8x16_t result = vcombine_u8 \
+- (a_, vcreate_u8 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("shrn2 %0.16b,%1.8h,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vshrn_high_n_u32(a, b, c) \
+- __extension__ \
+- ({ \
+- uint32x4_t b_ = (b); \
+- uint16x4_t a_ = (a); \
+- uint16x8_t result = vcombine_u16 \
+- (a_, vcreate_u16 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("shrn2 %0.8h,%1.4s,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
+-
+-#define vshrn_high_n_u64(a, b, c) \
+- __extension__ \
+- ({ \
+- uint64x2_t b_ = (b); \
+- uint32x2_t a_ = (a); \
+- uint32x4_t result = vcombine_u32 \
+- (a_, vcreate_u32 \
+- (__AARCH64_UINT64_C (0x0))); \
+- __asm__ ("shrn2 %0.4s,%1.2d,#%2" \
+- : "+w"(result) \
+- : "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
++{
++ return (__a > __b);
++}
+
+-#define vshrn_n_s16(a, b) \
+- __extension__ \
+- ({ \
+- int16x8_t a_ = (a); \
+- int8x8_t result; \
+- __asm__ ("shrn %0.8b,%1.8h,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++/* vcgt - scalar. */
+
+-#define vshrn_n_s32(a, b) \
+- __extension__ \
+- ({ \
+- int32x4_t a_ = (a); \
+- int16x4_t result; \
+- __asm__ ("shrn %0.4h,%1.4s,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgts_f32 (float32_t __a, float32_t __b)
++{
++ return __a > __b ? -1 : 0;
++}
+
+-#define vshrn_n_s64(a, b) \
+- __extension__ \
+- ({ \
+- int64x2_t a_ = (a); \
+- int32x2_t result; \
+- __asm__ ("shrn %0.2s,%1.2d,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtd_s64 (int64_t __a, int64_t __b)
++{
++ return __a > __b ? -1ll : 0ll;
++}
+
+-#define vshrn_n_u16(a, b) \
+- __extension__ \
+- ({ \
+- uint16x8_t a_ = (a); \
+- uint8x8_t result; \
+- __asm__ ("shrn %0.8b,%1.8h,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtd_u64 (uint64_t __a, uint64_t __b)
++{
++ return __a > __b ? -1ll : 0ll;
++}
+
+-#define vshrn_n_u32(a, b) \
+- __extension__ \
+- ({ \
+- uint32x4_t a_ = (a); \
+- uint16x4_t result; \
+- __asm__ ("shrn %0.4h,%1.4s,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtd_f64 (float64_t __a, float64_t __b)
++{
++ return __a > __b ? -1ll : 0ll;
++}
+
+-#define vshrn_n_u64(a, b) \
+- __extension__ \
+- ({ \
+- uint64x2_t a_ = (a); \
+- uint32x2_t result; \
+- __asm__ ("shrn %0.2s,%1.2d,%2" \
+- : "=w"(result) \
+- : "w"(a_), "i"(b) \
+- : /* No clobbers */); \
+- result; \
+- })
++/* vcgtz - vector. */
+
+-#define vsli_n_p8(a, b, c) \
+- __extension__ \
+- ({ \
+- poly8x8_t b_ = (b); \
+- poly8x8_t a_ = (a); \
+- poly8x8_t result; \
+- __asm__ ("sli %0.8b,%2.8b,%3" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtz_f32 (float32x2_t __a)
++{
++ return (uint32x2_t) (__a > 0.0f);
++}
+
+-#define vsli_n_p16(a, b, c) \
+- __extension__ \
+- ({ \
+- poly16x4_t b_ = (b); \
+- poly16x4_t a_ = (a); \
+- poly16x4_t result; \
+- __asm__ ("sli %0.4h,%2.4h,%3" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtz_f64 (float64x1_t __a)
++{
++ return (uint64x1_t) (__a > (float64x1_t) {0.0});
++}
+
+-#define vsliq_n_p8(a, b, c) \
+- __extension__ \
+- ({ \
+- poly8x16_t b_ = (b); \
+- poly8x16_t a_ = (a); \
+- poly8x16_t result; \
+- __asm__ ("sli %0.16b,%2.16b,%3" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtz_s8 (int8x8_t __a)
++{
++ return (uint8x8_t) (__a > 0);
++}
+
+-#define vsliq_n_p16(a, b, c) \
+- __extension__ \
+- ({ \
+- poly16x8_t b_ = (b); \
+- poly16x8_t a_ = (a); \
+- poly16x8_t result; \
+- __asm__ ("sli %0.8h,%2.8h,%3" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtz_s16 (int16x4_t __a)
++{
++ return (uint16x4_t) (__a > 0);
++}
+
+-#define vsri_n_p8(a, b, c) \
+- __extension__ \
+- ({ \
+- poly8x8_t b_ = (b); \
+- poly8x8_t a_ = (a); \
+- poly8x8_t result; \
+- __asm__ ("sri %0.8b,%2.8b,%3" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtz_s32 (int32x2_t __a)
++{
++ return (uint32x2_t) (__a > 0);
++}
+
+-#define vsri_n_p16(a, b, c) \
+- __extension__ \
+- ({ \
+- poly16x4_t b_ = (b); \
+- poly16x4_t a_ = (a); \
+- poly16x4_t result; \
+- __asm__ ("sri %0.4h,%2.4h,%3" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtz_s64 (int64x1_t __a)
++{
++ return (uint64x1_t) (__a > __AARCH64_INT64_C (0));
++}
+
+-#define vsriq_n_p8(a, b, c) \
+- __extension__ \
+- ({ \
+- poly8x16_t b_ = (b); \
+- poly8x16_t a_ = (a); \
+- poly8x16_t result; \
+- __asm__ ("sri %0.16b,%2.16b,%3" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzq_f32 (float32x4_t __a)
++{
++ return (uint32x4_t) (__a > 0.0f);
++}
+
+-#define vsriq_n_p16(a, b, c) \
+- __extension__ \
+- ({ \
+- poly16x8_t b_ = (b); \
+- poly16x8_t a_ = (a); \
+- poly16x8_t result; \
+- __asm__ ("sri %0.8h,%2.8h,%3" \
+- : "=w"(result) \
+- : "0"(a_), "w"(b_), "i"(c) \
+- : /* No clobbers */); \
+- result; \
+- })
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzq_f64 (float64x2_t __a)
++{
++ return (uint64x2_t) (__a > 0.0);
++}
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtst_p8 (poly8x8_t a, poly8x8_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzq_s8 (int8x16_t __a)
+ {
+- uint8x8_t result;
+- __asm__ ("cmtst %0.8b, %1.8b, %2.8b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint8x16_t) (__a > 0);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vtst_p16 (poly16x4_t a, poly16x4_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzq_s16 (int16x8_t __a)
+ {
+- uint16x4_t result;
+- __asm__ ("cmtst %0.4h, %1.4h, %2.4h"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint16x8_t) (__a > 0);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vtstq_p8 (poly8x16_t a, poly8x16_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzq_s32 (int32x4_t __a)
+ {
+- uint8x16_t result;
+- __asm__ ("cmtst %0.16b, %1.16b, %2.16b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a > 0);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vtstq_p16 (poly16x8_t a, poly16x8_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzq_s64 (int64x2_t __a)
+ {
+- uint16x8_t result;
+- __asm__ ("cmtst %0.8h, %1.8h, %2.8h"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint64x2_t) (__a > __AARCH64_INT64_C (0));
+ }
+
+-/* End of temporary inline asm implementations. */
++/* vcgtz - scalar. */
+
+-/* Start of temporary inline asm for vldn, vstn and friends. */
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzs_f32 (float32_t __a)
++{
++ return __a > 0.0f ? -1 : 0;
++}
+
+-/* Create struct element types for duplicating loads.
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzd_s64 (int64_t __a)
++{
++ return __a > 0 ? -1ll : 0ll;
++}
+
+- Create 2 element structures of:
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzd_f64 (float64_t __a)
++{
++ return __a > 0.0 ? -1ll : 0ll;
++}
+
+- +------+----+----+----+----+
+- | | 8 | 16 | 32 | 64 |
+- +------+----+----+----+----+
+- |int | Y | Y | N | N |
+- +------+----+----+----+----+
+- |uint | Y | Y | N | N |
+- +------+----+----+----+----+
+- |float | - | Y | N | N |
+- +------+----+----+----+----+
+- |poly | Y | Y | - | - |
+- +------+----+----+----+----+
++/* vcle - vector. */
+
+- Create 3 element structures of:
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_f32 (float32x2_t __a, float32x2_t __b)
++{
++ return (uint32x2_t) (__a <= __b);
++}
+
+- +------+----+----+----+----+
+- | | 8 | 16 | 32 | 64 |
+- +------+----+----+----+----+
+- |int | Y | Y | Y | Y |
+- +------+----+----+----+----+
+- |uint | Y | Y | Y | Y |
+- +------+----+----+----+----+
+- |float | - | Y | Y | Y |
+- +------+----+----+----+----+
+- |poly | Y | Y | - | - |
+- +------+----+----+----+----+
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_f64 (float64x1_t __a, float64x1_t __b)
++{
++ return (uint64x1_t) (__a <= __b);
++}
+
+- Create 4 element structures of:
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_s8 (int8x8_t __a, int8x8_t __b)
++{
++ return (uint8x8_t) (__a <= __b);
++}
+
+- +------+----+----+----+----+
+- | | 8 | 16 | 32 | 64 |
+- +------+----+----+----+----+
+- |int | Y | N | N | Y |
+- +------+----+----+----+----+
+- |uint | Y | N | N | Y |
+- +------+----+----+----+----+
+- |float | - | N | N | Y |
+- +------+----+----+----+----+
+- |poly | Y | N | - | - |
+- +------+----+----+----+----+
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_s16 (int16x4_t __a, int16x4_t __b)
++{
++ return (uint16x4_t) (__a <= __b);
++}
+
+- This is required for casting memory reference. */
+-#define __STRUCTN(t, sz, nelem) \
+- typedef struct t ## sz ## x ## nelem ## _t { \
+- t ## sz ## _t val[nelem]; \
+- } t ## sz ## x ## nelem ## _t;
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_s32 (int32x2_t __a, int32x2_t __b)
++{
++ return (uint32x2_t) (__a <= __b);
++}
+
+-/* 2-element structs. */
+-__STRUCTN (int, 8, 2)
+-__STRUCTN (int, 16, 2)
+-__STRUCTN (uint, 8, 2)
+-__STRUCTN (uint, 16, 2)
+-__STRUCTN (float, 16, 2)
+-__STRUCTN (poly, 8, 2)
+-__STRUCTN (poly, 16, 2)
+-/* 3-element structs. */
+-__STRUCTN (int, 8, 3)
+-__STRUCTN (int, 16, 3)
+-__STRUCTN (int, 32, 3)
+-__STRUCTN (int, 64, 3)
+-__STRUCTN (uint, 8, 3)
+-__STRUCTN (uint, 16, 3)
+-__STRUCTN (uint, 32, 3)
+-__STRUCTN (uint, 64, 3)
+-__STRUCTN (float, 16, 3)
+-__STRUCTN (float, 32, 3)
+-__STRUCTN (float, 64, 3)
+-__STRUCTN (poly, 8, 3)
+-__STRUCTN (poly, 16, 3)
+-/* 4-element structs. */
+-__STRUCTN (int, 8, 4)
+-__STRUCTN (int, 64, 4)
+-__STRUCTN (uint, 8, 4)
+-__STRUCTN (uint, 64, 4)
+-__STRUCTN (poly, 8, 4)
+-__STRUCTN (float, 64, 4)
+-#undef __STRUCTN
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_s64 (int64x1_t __a, int64x1_t __b)
++{
++ return (uint64x1_t) (__a <= __b);
++}
+
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_u8 (uint8x8_t __a, uint8x8_t __b)
++{
++ return (__a <= __b);
++}
+
+-#define __ST2_LANE_FUNC(intype, largetype, ptrtype, mode, \
+- qmode, ptr_mode, funcsuffix, signedtype) \
+-__extension__ static __inline void \
+-__attribute__ ((__always_inline__)) \
+-vst2_lane_ ## funcsuffix (ptrtype *__ptr, \
+- intype __b, const int __c) \
+-{ \
+- __builtin_aarch64_simd_oi __o; \
+- largetype __temp; \
+- __temp.val[0] \
+- = vcombine_##funcsuffix (__b.val[0], \
+- vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+- __temp.val[1] \
+- = vcombine_##funcsuffix (__b.val[1], \
+- vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+- __o = __builtin_aarch64_set_qregoi##qmode (__o, \
+- (signedtype) __temp.val[0], 0); \
+- __o = __builtin_aarch64_set_qregoi##qmode (__o, \
+- (signedtype) __temp.val[1], 1); \
+- __builtin_aarch64_st2_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
+- __ptr, __o, __c); \
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_u16 (uint16x4_t __a, uint16x4_t __b)
++{
++ return (__a <= __b);
+ }
+
+-__ST2_LANE_FUNC (float16x4x2_t, float16x8x2_t, float16_t, v4hf, v8hf, hf, f16,
+- float16x8_t)
+-__ST2_LANE_FUNC (float32x2x2_t, float32x4x2_t, float32_t, v2sf, v4sf, sf, f32,
+- float32x4_t)
+-__ST2_LANE_FUNC (float64x1x2_t, float64x2x2_t, float64_t, df, v2df, df, f64,
+- float64x2_t)
+-__ST2_LANE_FUNC (poly8x8x2_t, poly8x16x2_t, poly8_t, v8qi, v16qi, qi, p8,
+- int8x16_t)
+-__ST2_LANE_FUNC (poly16x4x2_t, poly16x8x2_t, poly16_t, v4hi, v8hi, hi, p16,
+- int16x8_t)
+-__ST2_LANE_FUNC (int8x8x2_t, int8x16x2_t, int8_t, v8qi, v16qi, qi, s8,
+- int8x16_t)
+-__ST2_LANE_FUNC (int16x4x2_t, int16x8x2_t, int16_t, v4hi, v8hi, hi, s16,
+- int16x8_t)
+-__ST2_LANE_FUNC (int32x2x2_t, int32x4x2_t, int32_t, v2si, v4si, si, s32,
+- int32x4_t)
+-__ST2_LANE_FUNC (int64x1x2_t, int64x2x2_t, int64_t, di, v2di, di, s64,
+- int64x2_t)
+-__ST2_LANE_FUNC (uint8x8x2_t, uint8x16x2_t, uint8_t, v8qi, v16qi, qi, u8,
+- int8x16_t)
+-__ST2_LANE_FUNC (uint16x4x2_t, uint16x8x2_t, uint16_t, v4hi, v8hi, hi, u16,
+- int16x8_t)
+-__ST2_LANE_FUNC (uint32x2x2_t, uint32x4x2_t, uint32_t, v2si, v4si, si, u32,
+- int32x4_t)
+-__ST2_LANE_FUNC (uint64x1x2_t, uint64x2x2_t, uint64_t, di, v2di, di, u64,
+- int64x2_t)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_u32 (uint32x2_t __a, uint32x2_t __b)
++{
++ return (__a <= __b);
++}
+
+-#undef __ST2_LANE_FUNC
+-#define __ST2_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix) \
+-__extension__ static __inline void \
+-__attribute__ ((__always_inline__)) \
+-vst2q_lane_ ## funcsuffix (ptrtype *__ptr, \
+- intype __b, const int __c) \
+-{ \
+- union { intype __i; \
+- __builtin_aarch64_simd_oi __o; } __temp = { __b }; \
+- __builtin_aarch64_st2_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
+- __ptr, __temp.__o, __c); \
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_u64 (uint64x1_t __a, uint64x1_t __b)
++{
++ return (__a <= __b);
+ }
+
+-__ST2_LANE_FUNC (float16x8x2_t, float16_t, v8hf, hf, f16)
+-__ST2_LANE_FUNC (float32x4x2_t, float32_t, v4sf, sf, f32)
+-__ST2_LANE_FUNC (float64x2x2_t, float64_t, v2df, df, f64)
+-__ST2_LANE_FUNC (poly8x16x2_t, poly8_t, v16qi, qi, p8)
+-__ST2_LANE_FUNC (poly16x8x2_t, poly16_t, v8hi, hi, p16)
+-__ST2_LANE_FUNC (int8x16x2_t, int8_t, v16qi, qi, s8)
+-__ST2_LANE_FUNC (int16x8x2_t, int16_t, v8hi, hi, s16)
+-__ST2_LANE_FUNC (int32x4x2_t, int32_t, v4si, si, s32)
+-__ST2_LANE_FUNC (int64x2x2_t, int64_t, v2di, di, s64)
+-__ST2_LANE_FUNC (uint8x16x2_t, uint8_t, v16qi, qi, u8)
+-__ST2_LANE_FUNC (uint16x8x2_t, uint16_t, v8hi, hi, u16)
+-__ST2_LANE_FUNC (uint32x4x2_t, uint32_t, v4si, si, u32)
+-__ST2_LANE_FUNC (uint64x2x2_t, uint64_t, v2di, di, u64)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_f32 (float32x4_t __a, float32x4_t __b)
++{
++ return (uint32x4_t) (__a <= __b);
++}
+
+-#define __ST3_LANE_FUNC(intype, largetype, ptrtype, mode, \
+- qmode, ptr_mode, funcsuffix, signedtype) \
+-__extension__ static __inline void \
+-__attribute__ ((__always_inline__)) \
+-vst3_lane_ ## funcsuffix (ptrtype *__ptr, \
+- intype __b, const int __c) \
+-{ \
+- __builtin_aarch64_simd_ci __o; \
+- largetype __temp; \
+- __temp.val[0] \
+- = vcombine_##funcsuffix (__b.val[0], \
+- vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+- __temp.val[1] \
+- = vcombine_##funcsuffix (__b.val[1], \
+- vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+- __temp.val[2] \
+- = vcombine_##funcsuffix (__b.val[2], \
+- vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+- __o = __builtin_aarch64_set_qregci##qmode (__o, \
+- (signedtype) __temp.val[0], 0); \
+- __o = __builtin_aarch64_set_qregci##qmode (__o, \
+- (signedtype) __temp.val[1], 1); \
+- __o = __builtin_aarch64_set_qregci##qmode (__o, \
+- (signedtype) __temp.val[2], 2); \
+- __builtin_aarch64_st3_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
+- __ptr, __o, __c); \
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_f64 (float64x2_t __a, float64x2_t __b)
++{
++ return (uint64x2_t) (__a <= __b);
+ }
+
+-__ST3_LANE_FUNC (float16x4x3_t, float16x8x3_t, float16_t, v4hf, v8hf, hf, f16,
+- float16x8_t)
+-__ST3_LANE_FUNC (float32x2x3_t, float32x4x3_t, float32_t, v2sf, v4sf, sf, f32,
+- float32x4_t)
+-__ST3_LANE_FUNC (float64x1x3_t, float64x2x3_t, float64_t, df, v2df, df, f64,
+- float64x2_t)
+-__ST3_LANE_FUNC (poly8x8x3_t, poly8x16x3_t, poly8_t, v8qi, v16qi, qi, p8,
+- int8x16_t)
+-__ST3_LANE_FUNC (poly16x4x3_t, poly16x8x3_t, poly16_t, v4hi, v8hi, hi, p16,
+- int16x8_t)
+-__ST3_LANE_FUNC (int8x8x3_t, int8x16x3_t, int8_t, v8qi, v16qi, qi, s8,
+- int8x16_t)
+-__ST3_LANE_FUNC (int16x4x3_t, int16x8x3_t, int16_t, v4hi, v8hi, hi, s16,
+- int16x8_t)
+-__ST3_LANE_FUNC (int32x2x3_t, int32x4x3_t, int32_t, v2si, v4si, si, s32,
+- int32x4_t)
+-__ST3_LANE_FUNC (int64x1x3_t, int64x2x3_t, int64_t, di, v2di, di, s64,
+- int64x2_t)
+-__ST3_LANE_FUNC (uint8x8x3_t, uint8x16x3_t, uint8_t, v8qi, v16qi, qi, u8,
+- int8x16_t)
+-__ST3_LANE_FUNC (uint16x4x3_t, uint16x8x3_t, uint16_t, v4hi, v8hi, hi, u16,
+- int16x8_t)
+-__ST3_LANE_FUNC (uint32x2x3_t, uint32x4x3_t, uint32_t, v2si, v4si, si, u32,
+- int32x4_t)
+-__ST3_LANE_FUNC (uint64x1x3_t, uint64x2x3_t, uint64_t, di, v2di, di, u64,
+- int64x2_t)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_s8 (int8x16_t __a, int8x16_t __b)
++{
++ return (uint8x16_t) (__a <= __b);
++}
+
+-#undef __ST3_LANE_FUNC
+-#define __ST3_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix) \
+-__extension__ static __inline void \
+-__attribute__ ((__always_inline__)) \
+-vst3q_lane_ ## funcsuffix (ptrtype *__ptr, \
+- intype __b, const int __c) \
+-{ \
+- union { intype __i; \
+- __builtin_aarch64_simd_ci __o; } __temp = { __b }; \
+- __builtin_aarch64_st3_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
+- __ptr, __temp.__o, __c); \
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_s16 (int16x8_t __a, int16x8_t __b)
++{
++ return (uint16x8_t) (__a <= __b);
+ }
+
+-__ST3_LANE_FUNC (float16x8x3_t, float16_t, v8hf, hf, f16)
+-__ST3_LANE_FUNC (float32x4x3_t, float32_t, v4sf, sf, f32)
+-__ST3_LANE_FUNC (float64x2x3_t, float64_t, v2df, df, f64)
+-__ST3_LANE_FUNC (poly8x16x3_t, poly8_t, v16qi, qi, p8)
+-__ST3_LANE_FUNC (poly16x8x3_t, poly16_t, v8hi, hi, p16)
+-__ST3_LANE_FUNC (int8x16x3_t, int8_t, v16qi, qi, s8)
+-__ST3_LANE_FUNC (int16x8x3_t, int16_t, v8hi, hi, s16)
+-__ST3_LANE_FUNC (int32x4x3_t, int32_t, v4si, si, s32)
+-__ST3_LANE_FUNC (int64x2x3_t, int64_t, v2di, di, s64)
+-__ST3_LANE_FUNC (uint8x16x3_t, uint8_t, v16qi, qi, u8)
+-__ST3_LANE_FUNC (uint16x8x3_t, uint16_t, v8hi, hi, u16)
+-__ST3_LANE_FUNC (uint32x4x3_t, uint32_t, v4si, si, u32)
+-__ST3_LANE_FUNC (uint64x2x3_t, uint64_t, v2di, di, u64)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_s32 (int32x4_t __a, int32x4_t __b)
++{
++ return (uint32x4_t) (__a <= __b);
++}
+
+-#define __ST4_LANE_FUNC(intype, largetype, ptrtype, mode, \
+- qmode, ptr_mode, funcsuffix, signedtype) \
+-__extension__ static __inline void \
+-__attribute__ ((__always_inline__)) \
+-vst4_lane_ ## funcsuffix (ptrtype *__ptr, \
+- intype __b, const int __c) \
+-{ \
+- __builtin_aarch64_simd_xi __o; \
+- largetype __temp; \
+- __temp.val[0] \
+- = vcombine_##funcsuffix (__b.val[0], \
+- vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+- __temp.val[1] \
+- = vcombine_##funcsuffix (__b.val[1], \
+- vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+- __temp.val[2] \
+- = vcombine_##funcsuffix (__b.val[2], \
+- vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+- __temp.val[3] \
+- = vcombine_##funcsuffix (__b.val[3], \
+- vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+- __o = __builtin_aarch64_set_qregxi##qmode (__o, \
+- (signedtype) __temp.val[0], 0); \
+- __o = __builtin_aarch64_set_qregxi##qmode (__o, \
+- (signedtype) __temp.val[1], 1); \
+- __o = __builtin_aarch64_set_qregxi##qmode (__o, \
+- (signedtype) __temp.val[2], 2); \
+- __o = __builtin_aarch64_set_qregxi##qmode (__o, \
+- (signedtype) __temp.val[3], 3); \
+- __builtin_aarch64_st4_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
+- __ptr, __o, __c); \
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_s64 (int64x2_t __a, int64x2_t __b)
++{
++ return (uint64x2_t) (__a <= __b);
+ }
+
+-__ST4_LANE_FUNC (float16x4x4_t, float16x8x4_t, float16_t, v4hf, v8hf, hf, f16,
+- float16x8_t)
+-__ST4_LANE_FUNC (float32x2x4_t, float32x4x4_t, float32_t, v2sf, v4sf, sf, f32,
+- float32x4_t)
+-__ST4_LANE_FUNC (float64x1x4_t, float64x2x4_t, float64_t, df, v2df, df, f64,
+- float64x2_t)
+-__ST4_LANE_FUNC (poly8x8x4_t, poly8x16x4_t, poly8_t, v8qi, v16qi, qi, p8,
+- int8x16_t)
+-__ST4_LANE_FUNC (poly16x4x4_t, poly16x8x4_t, poly16_t, v4hi, v8hi, hi, p16,
+- int16x8_t)
+-__ST4_LANE_FUNC (int8x8x4_t, int8x16x4_t, int8_t, v8qi, v16qi, qi, s8,
+- int8x16_t)
+-__ST4_LANE_FUNC (int16x4x4_t, int16x8x4_t, int16_t, v4hi, v8hi, hi, s16,
+- int16x8_t)
+-__ST4_LANE_FUNC (int32x2x4_t, int32x4x4_t, int32_t, v2si, v4si, si, s32,
+- int32x4_t)
+-__ST4_LANE_FUNC (int64x1x4_t, int64x2x4_t, int64_t, di, v2di, di, s64,
+- int64x2_t)
+-__ST4_LANE_FUNC (uint8x8x4_t, uint8x16x4_t, uint8_t, v8qi, v16qi, qi, u8,
+- int8x16_t)
+-__ST4_LANE_FUNC (uint16x4x4_t, uint16x8x4_t, uint16_t, v4hi, v8hi, hi, u16,
+- int16x8_t)
+-__ST4_LANE_FUNC (uint32x2x4_t, uint32x4x4_t, uint32_t, v2si, v4si, si, u32,
+- int32x4_t)
+-__ST4_LANE_FUNC (uint64x1x4_t, uint64x2x4_t, uint64_t, di, v2di, di, u64,
+- int64x2_t)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
++{
++ return (__a <= __b);
++}
+
+-#undef __ST4_LANE_FUNC
+-#define __ST4_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix) \
+-__extension__ static __inline void \
+-__attribute__ ((__always_inline__)) \
+-vst4q_lane_ ## funcsuffix (ptrtype *__ptr, \
+- intype __b, const int __c) \
+-{ \
+- union { intype __i; \
+- __builtin_aarch64_simd_xi __o; } __temp = { __b }; \
+- __builtin_aarch64_st4_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
+- __ptr, __temp.__o, __c); \
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
++{
++ return (__a <= __b);
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
++{
++ return (__a <= __b);
++}
++
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
++{
++ return (__a <= __b);
+ }
+
+-__ST4_LANE_FUNC (float16x8x4_t, float16_t, v8hf, hf, f16)
+-__ST4_LANE_FUNC (float32x4x4_t, float32_t, v4sf, sf, f32)
+-__ST4_LANE_FUNC (float64x2x4_t, float64_t, v2df, df, f64)
+-__ST4_LANE_FUNC (poly8x16x4_t, poly8_t, v16qi, qi, p8)
+-__ST4_LANE_FUNC (poly16x8x4_t, poly16_t, v8hi, hi, p16)
+-__ST4_LANE_FUNC (int8x16x4_t, int8_t, v16qi, qi, s8)
+-__ST4_LANE_FUNC (int16x8x4_t, int16_t, v8hi, hi, s16)
+-__ST4_LANE_FUNC (int32x4x4_t, int32_t, v4si, si, s32)
+-__ST4_LANE_FUNC (int64x2x4_t, int64_t, v2di, di, s64)
+-__ST4_LANE_FUNC (uint8x16x4_t, uint8_t, v16qi, qi, u8)
+-__ST4_LANE_FUNC (uint16x8x4_t, uint16_t, v8hi, hi, u16)
+-__ST4_LANE_FUNC (uint32x4x4_t, uint32_t, v4si, si, u32)
+-__ST4_LANE_FUNC (uint64x2x4_t, uint64_t, v2di, di, u64)
++/* vcle - scalar. */
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vaddlv_s32 (int32x2_t a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcles_f32 (float32_t __a, float32_t __b)
+ {
+- int64_t result;
+- __asm__ ("saddlp %0.1d, %1.2s" : "=w"(result) : "w"(a) : );
+- return result;
++ return __a <= __b ? -1 : 0;
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vaddlv_u32 (uint32x2_t a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcled_s64 (int64_t __a, int64_t __b)
+ {
+- uint64_t result;
+- __asm__ ("uaddlp %0.1d, %1.2s" : "=w"(result) : "w"(a) : );
+- return result;
++ return __a <= __b ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqdmulh_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __c)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcled_u64 (uint64_t __a, uint64_t __b)
+ {
+- return __builtin_aarch64_sqdmulh_laneqv4hi (__a, __b, __c);
++ return __a <= __b ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqdmulh_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcled_f64 (float64_t __a, float64_t __b)
+ {
+- return __builtin_aarch64_sqdmulh_laneqv2si (__a, __b, __c);
++ return __a <= __b ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqdmulhq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __c)
++/* vclez - vector. */
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclez_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_sqdmulh_laneqv8hi (__a, __b, __c);
++ return (uint32x2_t) (__a <= 0.0f);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmulhq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclez_f64 (float64x1_t __a)
+ {
+- return __builtin_aarch64_sqdmulh_laneqv4si (__a, __b, __c);
++ return (uint64x1_t) (__a <= (float64x1_t) {0.0});
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrdmulh_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclez_s8 (int8x8_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_laneqv4hi (__a, __b, __c);
++ return (uint8x8_t) (__a <= 0);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrdmulh_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclez_s16 (int16x4_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_laneqv2si (__a, __b, __c);
++ return (uint16x4_t) (__a <= 0);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrdmulhq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __c)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclez_s32 (int32x2_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_laneqv8hi (__a, __b, __c);
++ return (uint32x2_t) (__a <= 0);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrdmulhq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclez_s64 (int64x1_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_laneqv4si (__a, __b, __c);
++ return (uint64x1_t) (__a <= __AARCH64_INT64_C (0));
+ }
+
+-/* Table intrinsics. */
+-
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vqtbl1_p8 (poly8x16_t a, uint8x8_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezq_f32 (float32x4_t __a)
+ {
+- poly8x8_t result;
+- __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a <= 0.0f);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqtbl1_s8 (int8x16_t a, uint8x8_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezq_f64 (float64x2_t __a)
+ {
+- int8x8_t result;
+- __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint64x2_t) (__a <= 0.0);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqtbl1_u8 (uint8x16_t a, uint8x8_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezq_s8 (int8x16_t __a)
+ {
+- uint8x8_t result;
+- __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint8x16_t) (__a <= 0);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vqtbl1q_p8 (poly8x16_t a, uint8x16_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezq_s16 (int16x8_t __a)
+ {
+- poly8x16_t result;
+- __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint16x8_t) (__a <= 0);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqtbl1q_s8 (int8x16_t a, uint8x16_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezq_s32 (int32x4_t __a)
+ {
+- int8x16_t result;
+- __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint32x4_t) (__a <= 0);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqtbl1q_u8 (uint8x16_t a, uint8x16_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezq_s64 (int64x2_t __a)
+ {
+- uint8x16_t result;
+- __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
+- : "=w"(result)
+- : "w"(a), "w"(b)
+- : /* No clobbers */);
+- return result;
++ return (uint64x2_t) (__a <= __AARCH64_INT64_C (0));
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqtbx1_s8 (int8x8_t r, int8x16_t tab, uint8x8_t idx)
++/* vclez - scalar. */
++
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezs_f32 (float32_t __a)
+ {
+- int8x8_t result = r;
+- __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
+- : "+w"(result)
+- : "w"(tab), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return __a <= 0.0f ? -1 : 0;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqtbx1_u8 (uint8x8_t r, uint8x16_t tab, uint8x8_t idx)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezd_s64 (int64_t __a)
+ {
+- uint8x8_t result = r;
+- __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
+- : "+w"(result)
+- : "w"(tab), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return __a <= 0 ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vqtbx1_p8 (poly8x8_t r, poly8x16_t tab, uint8x8_t idx)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezd_f64 (float64_t __a)
+ {
+- poly8x8_t result = r;
+- __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
+- : "+w"(result)
+- : "w"(tab), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return __a <= 0.0 ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqtbx1q_s8 (int8x16_t r, int8x16_t tab, uint8x16_t idx)
++/* vclt - vector. */
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- int8x16_t result = r;
+- __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
+- : "+w"(result)
+- : "w"(tab), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (uint32x2_t) (__a < __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqtbx1q_u8 (uint8x16_t r, uint8x16_t tab, uint8x16_t idx)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- uint8x16_t result = r;
+- __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
+- : "+w"(result)
+- : "w"(tab), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (uint64x1_t) (__a < __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vqtbx1q_p8 (poly8x16_t r, poly8x16_t tab, uint8x16_t idx)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- poly8x16_t result = r;
+- __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
+- : "+w"(result)
+- : "w"(tab), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (uint8x8_t) (__a < __b);
+ }
+
+-/* V7 legacy table intrinsics. */
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_s16 (int16x4_t __a, int16x4_t __b)
++{
++ return (uint16x4_t) (__a < __b);
++}
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtbl1_s8 (int8x8_t tab, int8x8_t idx)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- int8x8_t result;
+- int8x16_t temp = vcombine_s8 (tab, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+- : "=w"(result)
+- : "w"(temp), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (uint32x2_t) (__a < __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtbl1_u8 (uint8x8_t tab, uint8x8_t idx)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_s64 (int64x1_t __a, int64x1_t __b)
+ {
+- uint8x8_t result;
+- uint8x16_t temp = vcombine_u8 (tab, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+- : "=w"(result)
+- : "w"(temp), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (uint64x1_t) (__a < __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtbl1_p8 (poly8x8_t tab, uint8x8_t idx)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- poly8x8_t result;
+- poly8x16_t temp = vcombine_p8 (tab, vcreate_p8 (__AARCH64_UINT64_C (0x0)));
+- __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+- : "=w"(result)
+- : "w"(temp), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (__a < __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtbl2_s8 (int8x8x2_t tab, int8x8_t idx)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- int8x8_t result;
+- int8x16_t temp = vcombine_s8 (tab.val[0], tab.val[1]);
+- __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+- : "=w"(result)
+- : "w"(temp), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (__a < __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtbl2_u8 (uint8x8x2_t tab, uint8x8_t idx)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- uint8x8_t result;
+- uint8x16_t temp = vcombine_u8 (tab.val[0], tab.val[1]);
+- __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+- : "=w"(result)
+- : "w"(temp), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (__a < __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtbl2_p8 (poly8x8x2_t tab, uint8x8_t idx)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+- poly8x8_t result;
+- poly8x16_t temp = vcombine_p8 (tab.val[0], tab.val[1]);
+- __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+- : "=w"(result)
+- : "w"(temp), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (__a < __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtbl3_s8 (int8x8x3_t tab, int8x8_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- int8x8_t result;
+- int8x16x2_t temp;
+- __builtin_aarch64_simd_oi __o;
+- temp.val[0] = vcombine_s8 (tab.val[0], tab.val[1]);
+- temp.val[1] = vcombine_s8 (tab.val[2], vcreate_s8 (__AARCH64_UINT64_C (0x0)));
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[1], 1);
+- result = __builtin_aarch64_tbl3v8qi (__o, idx);
+- return result;
++ return (uint32x4_t) (__a < __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtbl3_u8 (uint8x8x3_t tab, uint8x8_t idx)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- uint8x8_t result;
+- uint8x16x2_t temp;
+- __builtin_aarch64_simd_oi __o;
+- temp.val[0] = vcombine_u8 (tab.val[0], tab.val[1]);
+- temp.val[1] = vcombine_u8 (tab.val[2], vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[1], 1);
+- result = (uint8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+- return result;
++ return (uint64x2_t) (__a < __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtbl3_p8 (poly8x8x3_t tab, uint8x8_t idx)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- poly8x8_t result;
+- poly8x16x2_t temp;
+- __builtin_aarch64_simd_oi __o;
+- temp.val[0] = vcombine_p8 (tab.val[0], tab.val[1]);
+- temp.val[1] = vcombine_p8 (tab.val[2], vcreate_p8 (__AARCH64_UINT64_C (0x0)));
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[1], 1);
+- result = (poly8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+- return result;
++ return (uint8x16_t) (__a < __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtbl4_s8 (int8x8x4_t tab, int8x8_t idx)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- int8x8_t result;
+- int8x16x2_t temp;
+- __builtin_aarch64_simd_oi __o;
+- temp.val[0] = vcombine_s8 (tab.val[0], tab.val[1]);
+- temp.val[1] = vcombine_s8 (tab.val[2], tab.val[3]);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[1], 1);
+- result = __builtin_aarch64_tbl3v8qi (__o, idx);
+- return result;
++ return (uint16x8_t) (__a < __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtbl4_u8 (uint8x8x4_t tab, uint8x8_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- uint8x8_t result;
+- uint8x16x2_t temp;
+- __builtin_aarch64_simd_oi __o;
+- temp.val[0] = vcombine_u8 (tab.val[0], tab.val[1]);
+- temp.val[1] = vcombine_u8 (tab.val[2], tab.val[3]);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[1], 1);
+- result = (uint8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+- return result;
++ return (uint32x4_t) (__a < __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtbl4_p8 (poly8x8x4_t tab, uint8x8_t idx)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- poly8x8_t result;
+- poly8x16x2_t temp;
+- __builtin_aarch64_simd_oi __o;
+- temp.val[0] = vcombine_p8 (tab.val[0], tab.val[1]);
+- temp.val[1] = vcombine_p8 (tab.val[2], tab.val[3]);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[1], 1);
+- result = (poly8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+- return result;
++ return (uint64x2_t) (__a < __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtbx2_s8 (int8x8_t r, int8x8x2_t tab, int8x8_t idx)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- int8x8_t result = r;
+- int8x16_t temp = vcombine_s8 (tab.val[0], tab.val[1]);
+- __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
+- : "+w"(result)
+- : "w"(temp), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (__a < __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtbx2_u8 (uint8x8_t r, uint8x8x2_t tab, uint8x8_t idx)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+- uint8x8_t result = r;
+- uint8x16_t temp = vcombine_u8 (tab.val[0], tab.val[1]);
+- __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
+- : "+w"(result)
+- : "w"(temp), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (__a < __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtbx2_p8 (poly8x8_t r, poly8x8x2_t tab, uint8x8_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+- poly8x8_t result = r;
+- poly8x16_t temp = vcombine_p8 (tab.val[0], tab.val[1]);
+- __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
+- : "+w"(result)
+- : "w"(temp), "w"(idx)
+- : /* No clobbers */);
+- return result;
++ return (__a < __b);
+ }
+
+-/* End of temporary inline asm. */
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
++{
++ return (__a < __b);
++}
+
+-/* Start of optimal implementations in approved order. */
++/* vclt - scalar. */
+
+-/* vabs */
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclts_f32 (float32_t __a, float32_t __b)
++{
++ return __a < __b ? -1 : 0;
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vabs_f32 (float32x2_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltd_s64 (int64_t __a, int64_t __b)
+ {
+- return __builtin_aarch64_absv2sf (__a);
++ return __a < __b ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vabs_f64 (float64x1_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltd_u64 (uint64_t __a, uint64_t __b)
+ {
+- return (float64x1_t) {__builtin_fabs (__a[0])};
++ return __a < __b ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vabs_s8 (int8x8_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltd_f64 (float64_t __a, float64_t __b)
+ {
+- return __builtin_aarch64_absv8qi (__a);
++ return __a < __b ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vabs_s16 (int16x4_t __a)
++/* vcltz - vector. */
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltz_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_absv4hi (__a);
++ return (uint32x2_t) (__a < 0.0f);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vabs_s32 (int32x2_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltz_f64 (float64x1_t __a)
+ {
+- return __builtin_aarch64_absv2si (__a);
++ return (uint64x1_t) (__a < (float64x1_t) {0.0});
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vabs_s64 (int64x1_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltz_s8 (int8x8_t __a)
+ {
+- return (int64x1_t) {__builtin_aarch64_absdi (__a[0])};
++ return (uint8x8_t) (__a < 0);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vabsq_f32 (float32x4_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltz_s16 (int16x4_t __a)
+ {
+- return __builtin_aarch64_absv4sf (__a);
++ return (uint16x4_t) (__a < 0);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vabsq_f64 (float64x2_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltz_s32 (int32x2_t __a)
+ {
+- return __builtin_aarch64_absv2df (__a);
++ return (uint32x2_t) (__a < 0);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vabsq_s8 (int8x16_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltz_s64 (int64x1_t __a)
+ {
+- return __builtin_aarch64_absv16qi (__a);
++ return (uint64x1_t) (__a < __AARCH64_INT64_C (0));
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vabsq_s16 (int16x8_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzq_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_absv8hi (__a);
++ return (uint32x4_t) (__a < 0.0f);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vabsq_s32 (int32x4_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_absv4si (__a);
++ return (uint64x2_t) (__a < 0.0);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vabsq_s64 (int64x2_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzq_s8 (int8x16_t __a)
+ {
+- return __builtin_aarch64_absv2di (__a);
++ return (uint8x16_t) (__a < 0);
+ }
+
+-/* vadd */
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzq_s16 (int16x8_t __a)
++{
++ return (uint16x8_t) (__a < 0);
++}
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vaddd_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzq_s32 (int32x4_t __a)
+ {
+- return __a + __b;
++ return (uint32x4_t) (__a < 0);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vaddd_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzq_s64 (int64x2_t __a)
+ {
+- return __a + __b;
++ return (uint64x2_t) (__a < __AARCH64_INT64_C (0));
+ }
+
+-/* vaddv */
++/* vcltz - scalar. */
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vaddv_s8 (int8x8_t __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzs_f32 (float32_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v8qi (__a);
++ return __a < 0.0f ? -1 : 0;
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vaddv_s16 (int16x4_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzd_s64 (int64_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v4hi (__a);
++ return __a < 0 ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vaddv_s32 (int32x2_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzd_f64 (float64_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v2si (__a);
++ return __a < 0.0 ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vaddv_u8 (uint8x8_t __a)
++/* vcls. */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcls_s8 (int8x8_t __a)
+ {
+- return (uint8_t) __builtin_aarch64_reduc_plus_scal_v8qi ((int8x8_t) __a);
++ return __builtin_aarch64_clrsbv8qi (__a);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vaddv_u16 (uint16x4_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcls_s16 (int16x4_t __a)
+ {
+- return (uint16_t) __builtin_aarch64_reduc_plus_scal_v4hi ((int16x4_t) __a);
++ return __builtin_aarch64_clrsbv4hi (__a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vaddv_u32 (uint32x2_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcls_s32 (int32x2_t __a)
+ {
+- return (int32_t) __builtin_aarch64_reduc_plus_scal_v2si ((int32x2_t) __a);
++ return __builtin_aarch64_clrsbv2si (__a);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vaddvq_s8 (int8x16_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclsq_s8 (int8x16_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v16qi (__a);
++ return __builtin_aarch64_clrsbv16qi (__a);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vaddvq_s16 (int16x8_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclsq_s16 (int16x8_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v8hi (__a);
++ return __builtin_aarch64_clrsbv8hi (__a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vaddvq_s32 (int32x4_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclsq_s32 (int32x4_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v4si (__a);
++ return __builtin_aarch64_clrsbv4si (__a);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vaddvq_s64 (int64x2_t __a)
++/* vclz. */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclz_s8 (int8x8_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v2di (__a);
++ return __builtin_aarch64_clzv8qi (__a);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vaddvq_u8 (uint8x16_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclz_s16 (int16x4_t __a)
+ {
+- return (uint8_t) __builtin_aarch64_reduc_plus_scal_v16qi ((int8x16_t) __a);
++ return __builtin_aarch64_clzv4hi (__a);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vaddvq_u16 (uint16x8_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclz_s32 (int32x2_t __a)
+ {
+- return (uint16_t) __builtin_aarch64_reduc_plus_scal_v8hi ((int16x8_t) __a);
++ return __builtin_aarch64_clzv2si (__a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vaddvq_u32 (uint32x4_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclz_u8 (uint8x8_t __a)
+ {
+- return (uint32_t) __builtin_aarch64_reduc_plus_scal_v4si ((int32x4_t) __a);
++ return (uint8x8_t)__builtin_aarch64_clzv8qi ((int8x8_t)__a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vaddvq_u64 (uint64x2_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclz_u16 (uint16x4_t __a)
+ {
+- return (uint64_t) __builtin_aarch64_reduc_plus_scal_v2di ((int64x2_t) __a);
++ return (uint16x4_t)__builtin_aarch64_clzv4hi ((int16x4_t)__a);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vaddv_f32 (float32x2_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclz_u32 (uint32x2_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v2sf (__a);
++ return (uint32x2_t)__builtin_aarch64_clzv2si ((int32x2_t)__a);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vaddvq_f32 (float32x4_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclzq_s8 (int8x16_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v4sf (__a);
++ return __builtin_aarch64_clzv16qi (__a);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vaddvq_f64 (float64x2_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclzq_s16 (int16x8_t __a)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v2df (__a);
++ return __builtin_aarch64_clzv8hi (__a);
+ }
+
+-/* vbsl */
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclzq_s32 (int32x4_t __a)
++{
++ return __builtin_aarch64_clzv4si (__a);
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vbsl_f32 (uint32x2_t __a, float32x2_t __b, float32x2_t __c)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclzq_u8 (uint8x16_t __a)
+ {
+- return __builtin_aarch64_simd_bslv2sf_suss (__a, __b, __c);
++ return (uint8x16_t)__builtin_aarch64_clzv16qi ((int8x16_t)__a);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vbsl_f64 (uint64x1_t __a, float64x1_t __b, float64x1_t __c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclzq_u16 (uint16x8_t __a)
+ {
+- return (float64x1_t)
+- { __builtin_aarch64_simd_bsldf_suss (__a[0], __b[0], __c[0]) };
++ return (uint16x8_t)__builtin_aarch64_clzv8hi ((int16x8_t)__a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vbsl_p8 (uint8x8_t __a, poly8x8_t __b, poly8x8_t __c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclzq_u32 (uint32x4_t __a)
+ {
+- return __builtin_aarch64_simd_bslv8qi_pupp (__a, __b, __c);
++ return (uint32x4_t)__builtin_aarch64_clzv4si ((int32x4_t)__a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vbsl_p16 (uint16x4_t __a, poly16x4_t __b, poly16x4_t __c)
++/* vcnt. */
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcnt_p8 (poly8x8_t __a)
+ {
+- return __builtin_aarch64_simd_bslv4hi_pupp (__a, __b, __c);
++ return (poly8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vbsl_s8 (uint8x8_t __a, int8x8_t __b, int8x8_t __c)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcnt_s8 (int8x8_t __a)
+ {
+- return __builtin_aarch64_simd_bslv8qi_suss (__a, __b, __c);
++ return __builtin_aarch64_popcountv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vbsl_s16 (uint16x4_t __a, int16x4_t __b, int16x4_t __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcnt_u8 (uint8x8_t __a)
+ {
+- return __builtin_aarch64_simd_bslv4hi_suss (__a, __b, __c);
++ return (uint8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vbsl_s32 (uint32x2_t __a, int32x2_t __b, int32x2_t __c)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcntq_p8 (poly8x16_t __a)
+ {
+- return __builtin_aarch64_simd_bslv2si_suss (__a, __b, __c);
++ return (poly8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vbsl_s64 (uint64x1_t __a, int64x1_t __b, int64x1_t __c)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcntq_s8 (int8x16_t __a)
+ {
+- return (int64x1_t)
+- {__builtin_aarch64_simd_bsldi_suss (__a[0], __b[0], __c[0])};
++ return __builtin_aarch64_popcountv16qi (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vbsl_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcntq_u8 (uint8x16_t __a)
+ {
+- return __builtin_aarch64_simd_bslv8qi_uuuu (__a, __b, __c);
++ return (uint8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vbsl_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c)
++/* vcopy_lane. */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_f32 (float32x2_t __a, const int __lane1,
++ float32x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv4hi_uuuu (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vbsl_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_f64 (float64x1_t __a, const int __lane1,
++ float64x1_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv2si_uuuu (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vbsl_u64 (uint64x1_t __a, uint64x1_t __b, uint64x1_t __c)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_p8 (poly8x8_t __a, const int __lane1,
++ poly8x8_t __b, const int __lane2)
+ {
+- return (uint64x1_t)
+- {__builtin_aarch64_simd_bsldi_uuuu (__a[0], __b[0], __c[0])};
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vbslq_f32 (uint32x4_t __a, float32x4_t __b, float32x4_t __c)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_p16 (poly16x4_t __a, const int __lane1,
++ poly16x4_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv4sf_suss (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vbslq_f64 (uint64x2_t __a, float64x2_t __b, float64x2_t __c)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_p64 (poly64x1_t __a, const int __lane1,
++ poly64x1_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv2df_suss (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vbslq_p8 (uint8x16_t __a, poly8x16_t __b, poly8x16_t __c)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_s8 (int8x8_t __a, const int __lane1,
++ int8x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv16qi_pupp (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vbslq_p16 (uint16x8_t __a, poly16x8_t __b, poly16x8_t __c)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_s16 (int16x4_t __a, const int __lane1,
++ int16x4_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv8hi_pupp (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vbslq_s8 (uint8x16_t __a, int8x16_t __b, int8x16_t __c)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_s32 (int32x2_t __a, const int __lane1,
++ int32x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv16qi_suss (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vbslq_s16 (uint16x8_t __a, int16x8_t __b, int16x8_t __c)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_s64 (int64x1_t __a, const int __lane1,
++ int64x1_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv8hi_suss (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vbslq_s32 (uint32x4_t __a, int32x4_t __b, int32x4_t __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_u8 (uint8x8_t __a, const int __lane1,
++ uint8x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv4si_suss (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vbslq_s64 (uint64x2_t __a, int64x2_t __b, int64x2_t __c)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_u16 (uint16x4_t __a, const int __lane1,
++ uint16x4_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv2di_suss (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vbslq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_u32 (uint32x2_t __a, const int __lane1,
++ uint32x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv16qi_uuuu (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vbslq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_lane_u64 (uint64x1_t __a, const int __lane1,
++ uint64x1_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv8hi_uuuu (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vbslq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
++/* vcopy_laneq. */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_f32 (float32x2_t __a, const int __lane1,
++ float32x4_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv4si_uuuu (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vbslq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_f64 (float64x1_t __a, const int __lane1,
++ float64x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_simd_bslv2di_uuuu (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-/* ARMv8.1 instrinsics. */
+-#pragma GCC push_options
+-#pragma GCC target ("arch=armv8.1-a")
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_p8 (poly8x8_t __a, const int __lane1,
++ poly8x16_t __b, const int __lane2)
++{
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
++}
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrdmlah_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_p16 (poly16x4_t __a, const int __lane1,
++ poly16x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlahv4hi (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrdmlah_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_p64 (poly64x1_t __a, const int __lane1,
++ poly64x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlahv2si (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrdmlahq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_s8 (int8x8_t __a, const int __lane1,
++ int8x16_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlahv8hi (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrdmlahq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_s16 (int16x4_t __a, const int __lane1,
++ int16x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlahv4si (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrdmlsh_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_s32 (int32x2_t __a, const int __lane1,
++ int32x4_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlshv4hi (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrdmlsh_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_s64 (int64x1_t __a, const int __lane1,
++ int64x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlshv2si (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrdmlshq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_u8 (uint8x8_t __a, const int __lane1,
++ uint8x16_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlshv8hi (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrdmlshq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_u16 (uint16x4_t __a, const int __lane1,
++ uint16x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlshv4si (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrdmlah_laneq_s16 (int16x4_t __a, int16x4_t __b, int16x8_t __c, const int __d)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_u32 (uint32x2_t __a, const int __lane1,
++ uint32x4_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_laneqv4hi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrdmlah_laneq_s32 (int32x2_t __a, int32x2_t __b, int32x4_t __c, const int __d)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopy_laneq_u64 (uint64x1_t __a, const int __lane1,
++ uint64x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_laneqv2si (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrdmlahq_laneq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c, const int __d)
++/* vcopyq_lane. */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_f32 (float32x4_t __a, const int __lane1,
++ float32x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_laneqv8hi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrdmlahq_laneq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c, const int __d)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_f64 (float64x2_t __a, const int __lane1,
++ float64x1_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_laneqv4si (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrdmlsh_laneq_s16 (int16x4_t __a, int16x4_t __b, int16x8_t __c, const int __d)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_p8 (poly8x16_t __a, const int __lane1,
++ poly8x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_laneqv4hi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrdmlsh_laneq_s32 (int32x2_t __a, int32x2_t __b, int32x4_t __c, const int __d)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_p16 (poly16x8_t __a, const int __lane1,
++ poly16x4_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_laneqv2si (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrdmlshq_laneq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c, const int __d)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_p64 (poly64x2_t __a, const int __lane1,
++ poly64x1_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_laneqv8hi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrdmlshq_laneq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c, const int __d)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_s8 (int8x16_t __a, const int __lane1,
++ int8x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_laneqv4si (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrdmlah_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_s16 (int16x8_t __a, const int __lane1,
++ int16x4_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_lanev4hi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrdmlah_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_s32 (int32x4_t __a, const int __lane1,
++ int32x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_lanev2si (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrdmlahq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_s64 (int64x2_t __a, const int __lane1,
++ int64x1_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_lanev8hi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrdmlahq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_u8 (uint8x16_t __a, const int __lane1,
++ uint8x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_lanev4si (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrdmlahh_s16 (int16_t __a, int16_t __b, int16_t __c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_u16 (uint16x8_t __a, const int __lane1,
++ uint16x4_t __b, const int __lane2)
+ {
+- return (int16_t) __builtin_aarch64_sqrdmlahhi (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrdmlahh_lane_s16 (int16_t __a, int16_t __b, int16x4_t __c, const int __d)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_u32 (uint32x4_t __a, const int __lane1,
++ uint32x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_lanehi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrdmlahh_laneq_s16 (int16_t __a, int16_t __b, int16x8_t __c, const int __d)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_lane_u64 (uint64x2_t __a, const int __lane1,
++ uint64x1_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_laneqhi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrdmlahs_s32 (int32_t __a, int32_t __b, int32_t __c)
++/* vcopyq_laneq. */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_f32 (float32x4_t __a, const int __lane1,
++ float32x4_t __b, const int __lane2)
+ {
+- return (int32_t) __builtin_aarch64_sqrdmlahsi (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrdmlahs_lane_s32 (int32_t __a, int32_t __b, int32x2_t __c, const int __d)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_f64 (float64x2_t __a, const int __lane1,
++ float64x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_lanesi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrdmlahs_laneq_s32 (int32_t __a, int32_t __b, int32x4_t __c, const int __d)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_p8 (poly8x16_t __a, const int __lane1,
++ poly8x16_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlah_laneqsi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrdmlsh_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_p16 (poly16x8_t __a, const int __lane1,
++ poly16x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_lanev4hi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrdmlsh_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_p64 (poly64x2_t __a, const int __lane1,
++ poly64x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_lanev2si (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrdmlshq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_s8 (int8x16_t __a, const int __lane1,
++ int8x16_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_lanev8hi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrdmlshq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_s16 (int16x8_t __a, const int __lane1,
++ int16x8_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_lanev4si (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrdmlshh_s16 (int16_t __a, int16_t __b, int16_t __c)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_s32 (int32x4_t __a, const int __lane1,
++ int32x4_t __b, const int __lane2)
+ {
+- return (int16_t) __builtin_aarch64_sqrdmlshhi (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrdmlshh_lane_s16 (int16_t __a, int16_t __b, int16x4_t __c, const int __d)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_s64 (int64x2_t __a, const int __lane1,
++ int64x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_lanehi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrdmlshh_laneq_s16 (int16_t __a, int16_t __b, int16x8_t __c, const int __d)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_u8 (uint8x16_t __a, const int __lane1,
++ uint8x16_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_laneqhi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrdmlshs_s32 (int32_t __a, int32_t __b, int32_t __c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_u16 (uint16x8_t __a, const int __lane1,
++ uint16x8_t __b, const int __lane2)
+ {
+- return (int32_t) __builtin_aarch64_sqrdmlshsi (__a, __b, __c);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrdmlshs_lane_s32 (int32_t __a, int32_t __b, int32x2_t __c, const int __d)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_u32 (uint32x4_t __a, const int __lane1,
++ uint32x4_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_lanesi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrdmlshs_laneq_s32 (int32_t __a, int32_t __b, int32x4_t __c, const int __d)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcopyq_laneq_u64 (uint64x2_t __a, const int __lane1,
++ uint64x2_t __b, const int __lane2)
+ {
+- return __builtin_aarch64_sqrdmlsh_laneqsi (__a, __b, __c, __d);
++ return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
++ __a, __lane1);
+ }
+-#pragma GCC pop_options
+
+-#pragma GCC push_options
+-#pragma GCC target ("+nothing+crypto")
+-/* vaes */
++/* vcvt (double -> float). */
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vaeseq_u8 (uint8x16_t data, uint8x16_t key)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f16_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_crypto_aesev16qi_uuu (data, key);
++ return __builtin_aarch64_float_truncate_lo_v4hf (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vaesdq_u8 (uint8x16_t data, uint8x16_t key)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_high_f16_f32 (float16x4_t __a, float32x4_t __b)
+ {
+- return __builtin_aarch64_crypto_aesdv16qi_uuu (data, key);
++ return __builtin_aarch64_float_truncate_hi_v8hf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vaesmcq_u8 (uint8x16_t data)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f32_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_crypto_aesmcv16qi_uu (data);
++ return __builtin_aarch64_float_truncate_lo_v2sf (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vaesimcq_u8 (uint8x16_t data)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_high_f32_f64 (float32x2_t __a, float64x2_t __b)
+ {
+- return __builtin_aarch64_crypto_aesimcv16qi_uu (data);
++ return __builtin_aarch64_float_truncate_hi_v4sf (__a, __b);
+ }
+-#pragma GCC pop_options
+
+-/* vcage */
++/* vcvt (float -> double). */
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcage_f64 (float64x1_t __a, float64x1_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f32_f16 (float16x4_t __a)
+ {
+- return vabs_f64 (__a) >= vabs_f64 (__b);
++ return __builtin_aarch64_float_extend_lo_v4sf (__a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcages_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f64_f32 (float32x2_t __a)
+ {
+- return __builtin_fabsf (__a) >= __builtin_fabsf (__b) ? -1 : 0;
++
++ return __builtin_aarch64_float_extend_lo_v2df (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcage_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_high_f32_f16 (float16x8_t __a)
+ {
+- return vabs_f32 (__a) >= vabs_f32 (__b);
++ return __builtin_aarch64_vec_unpacks_hi_v8hf (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcageq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_high_f64_f32 (float32x4_t __a)
+ {
+- return vabsq_f32 (__a) >= vabsq_f32 (__b);
++ return __builtin_aarch64_vec_unpacks_hi_v4sf (__a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcaged_f64 (float64_t __a, float64_t __b)
++/* vcvt (<u>fixed-point -> float). */
++
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtd_n_f64_s64 (int64_t __a, const int __b)
+ {
+- return __builtin_fabs (__a) >= __builtin_fabs (__b) ? -1 : 0;
++ return __builtin_aarch64_scvtfdi (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcageq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtd_n_f64_u64 (uint64_t __a, const int __b)
+ {
+- return vabsq_f64 (__a) >= vabsq_f64 (__b);
++ return __builtin_aarch64_ucvtfdi_sus (__a, __b);
+ }
+
+-/* vcagt */
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcagts_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvts_n_f32_s32 (int32_t __a, const int __b)
+ {
+- return __builtin_fabsf (__a) > __builtin_fabsf (__b) ? -1 : 0;
++ return __builtin_aarch64_scvtfsi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcagt_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvts_n_f32_u32 (uint32_t __a, const int __b)
+ {
+- return vabs_f32 (__a) > vabs_f32 (__b);
++ return __builtin_aarch64_ucvtfsi_sus (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcagt_f64 (float64x1_t __a, float64x1_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_f32_s32 (int32x2_t __a, const int __b)
+ {
+- return vabs_f64 (__a) > vabs_f64 (__b);
++ return __builtin_aarch64_scvtfv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcagtq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_f32_u32 (uint32x2_t __a, const int __b)
+ {
+- return vabsq_f32 (__a) > vabsq_f32 (__b);
++ return __builtin_aarch64_ucvtfv2si_sus (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcagtd_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_f64_s64 (int64x1_t __a, const int __b)
+ {
+- return __builtin_fabs (__a) > __builtin_fabs (__b) ? -1 : 0;
++ return (float64x1_t)
++ { __builtin_aarch64_scvtfdi (vget_lane_s64 (__a, 0), __b) };
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcagtq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_f64_u64 (uint64x1_t __a, const int __b)
+ {
+- return vabsq_f64 (__a) > vabsq_f64 (__b);
++ return (float64x1_t)
++ { __builtin_aarch64_ucvtfdi_sus (vget_lane_u64 (__a, 0), __b) };
+ }
+
+-/* vcale */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcale_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_f32_s32 (int32x4_t __a, const int __b)
+ {
+- return vabs_f32 (__a) <= vabs_f32 (__b);
++ return __builtin_aarch64_scvtfv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcale_f64 (float64x1_t __a, float64x1_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_f32_u32 (uint32x4_t __a, const int __b)
+ {
+- return vabs_f64 (__a) <= vabs_f64 (__b);
++ return __builtin_aarch64_ucvtfv4si_sus (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcaled_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_f64_s64 (int64x2_t __a, const int __b)
+ {
+- return __builtin_fabs (__a) <= __builtin_fabs (__b) ? -1 : 0;
++ return __builtin_aarch64_scvtfv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcales_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_f64_u64 (uint64x2_t __a, const int __b)
+ {
+- return __builtin_fabsf (__a) <= __builtin_fabsf (__b) ? -1 : 0;
++ return __builtin_aarch64_ucvtfv2di_sus (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcaleq_f32 (float32x4_t __a, float32x4_t __b)
++/* vcvt (float -> <u>fixed-point). */
++
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtd_n_s64_f64 (float64_t __a, const int __b)
+ {
+- return vabsq_f32 (__a) <= vabsq_f32 (__b);
++ return __builtin_aarch64_fcvtzsdf (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcaleq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtd_n_u64_f64 (float64_t __a, const int __b)
+ {
+- return vabsq_f64 (__a) <= vabsq_f64 (__b);
++ return __builtin_aarch64_fcvtzudf_uss (__a, __b);
+ }
+
+-/* vcalt */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcalt_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvts_n_s32_f32 (float32_t __a, const int __b)
+ {
+- return vabs_f32 (__a) < vabs_f32 (__b);
++ return __builtin_aarch64_fcvtzssf (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcalt_f64 (float64x1_t __a, float64x1_t __b)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvts_n_u32_f32 (float32_t __a, const int __b)
+ {
+- return vabs_f64 (__a) < vabs_f64 (__b);
++ return __builtin_aarch64_fcvtzusf_uss (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcaltd_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_s32_f32 (float32x2_t __a, const int __b)
+ {
+- return __builtin_fabs (__a) < __builtin_fabs (__b) ? -1 : 0;
++ return __builtin_aarch64_fcvtzsv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcaltq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_u32_f32 (float32x2_t __a, const int __b)
+ {
+- return vabsq_f32 (__a) < vabsq_f32 (__b);
++ return __builtin_aarch64_fcvtzuv2sf_uss (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcaltq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_s64_f64 (float64x1_t __a, const int __b)
+ {
+- return vabsq_f64 (__a) < vabsq_f64 (__b);
++ return (int64x1_t)
++ { __builtin_aarch64_fcvtzsdf (vget_lane_f64 (__a, 0), __b) };
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcalts_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_u64_f64 (float64x1_t __a, const int __b)
+ {
+- return __builtin_fabsf (__a) < __builtin_fabsf (__b) ? -1 : 0;
++ return (uint64x1_t)
++ { __builtin_aarch64_fcvtzudf_uss (vget_lane_f64 (__a, 0), __b) };
+ }
+
+-/* vceq - vector. */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vceq_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_s32_f32 (float32x4_t __a, const int __b)
+ {
+- return (uint32x2_t) (__a == __b);
++ return __builtin_aarch64_fcvtzsv4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vceq_f64 (float64x1_t __a, float64x1_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_u32_f32 (float32x4_t __a, const int __b)
+ {
+- return (uint64x1_t) (__a == __b);
++ return __builtin_aarch64_fcvtzuv4sf_uss (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vceq_p8 (poly8x8_t __a, poly8x8_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_s64_f64 (float64x2_t __a, const int __b)
+ {
+- return (uint8x8_t) (__a == __b);
++ return __builtin_aarch64_fcvtzsv2df (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vceq_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_u64_f64 (float64x2_t __a, const int __b)
+ {
+- return (uint8x8_t) (__a == __b);
++ return __builtin_aarch64_fcvtzuv2df_uss (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vceq_s16 (int16x4_t __a, int16x4_t __b)
++/* vcvt (<u>int -> float) */
++
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtd_f64_s64 (int64_t __a)
+ {
+- return (uint16x4_t) (__a == __b);
++ return (float64_t) __a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vceq_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtd_f64_u64 (uint64_t __a)
+ {
+- return (uint32x2_t) (__a == __b);
++ return (float64_t) __a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vceq_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvts_f32_s32 (int32_t __a)
+ {
+- return (uint64x1_t) (__a == __b);
++ return (float32_t) __a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vceq_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvts_f32_u32 (uint32_t __a)
+ {
+- return (__a == __b);
++ return (float32_t) __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vceq_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f32_s32 (int32x2_t __a)
+ {
+- return (__a == __b);
++ return __builtin_aarch64_floatv2siv2sf (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vceq_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f32_u32 (uint32x2_t __a)
+ {
+- return (__a == __b);
++ return __builtin_aarch64_floatunsv2siv2sf ((int32x2_t) __a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vceq_u64 (uint64x1_t __a, uint64x1_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f64_s64 (int64x1_t __a)
+ {
+- return (__a == __b);
++ return (float64x1_t) { vget_lane_s64 (__a, 0) };
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vceqq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f64_u64 (uint64x1_t __a)
+ {
+- return (uint32x4_t) (__a == __b);
++ return (float64x1_t) { vget_lane_u64 (__a, 0) };
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vceqq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_f32_s32 (int32x4_t __a)
+ {
+- return (uint64x2_t) (__a == __b);
++ return __builtin_aarch64_floatv4siv4sf (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vceqq_p8 (poly8x16_t __a, poly8x16_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_f32_u32 (uint32x4_t __a)
+ {
+- return (uint8x16_t) (__a == __b);
++ return __builtin_aarch64_floatunsv4siv4sf ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vceqq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_f64_s64 (int64x2_t __a)
+ {
+- return (uint8x16_t) (__a == __b);
++ return __builtin_aarch64_floatv2div2df (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vceqq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_f64_u64 (uint64x2_t __a)
+ {
+- return (uint16x8_t) (__a == __b);
++ return __builtin_aarch64_floatunsv2div2df ((int64x2_t) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vceqq_s32 (int32x4_t __a, int32x4_t __b)
++/* vcvt (float -> <u>int) */
++
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtd_s64_f64 (float64_t __a)
+ {
+- return (uint32x4_t) (__a == __b);
++ return (int64_t) __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vceqq_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtd_u64_f64 (float64_t __a)
+ {
+- return (uint64x2_t) (__a == __b);
++ return (uint64_t) __a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vceqq_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvts_s32_f32 (float32_t __a)
+ {
+- return (__a == __b);
++ return (int32_t) __a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vceqq_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvts_u32_f32 (float32_t __a)
+ {
+- return (__a == __b);
++ return (uint32_t) __a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vceqq_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_s32_f32 (float32x2_t __a)
+ {
+- return (__a == __b);
++ return __builtin_aarch64_lbtruncv2sfv2si (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vceqq_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_u32_f32 (float32x2_t __a)
+ {
+- return (__a == __b);
++ return __builtin_aarch64_lbtruncuv2sfv2si_us (__a);
+ }
+
+-/* vceq - scalar. */
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vceqs_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_s32_f32 (float32x4_t __a)
+ {
+- return __a == __b ? -1 : 0;
++ return __builtin_aarch64_lbtruncv4sfv4si (__a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vceqd_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_u32_f32 (float32x4_t __a)
+ {
+- return __a == __b ? -1ll : 0ll;
++ return __builtin_aarch64_lbtruncuv4sfv4si_us (__a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vceqd_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_s64_f64 (float64x1_t __a)
+ {
+- return __a == __b ? -1ll : 0ll;
++ return (int64x1_t) {vcvtd_s64_f64 (__a[0])};
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vceqd_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_u64_f64 (float64x1_t __a)
+ {
+- return __a == __b ? -1ll : 0ll;
++ return (uint64x1_t) {vcvtd_u64_f64 (__a[0])};
+ }
+
+-/* vceqz - vector. */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vceqz_f32 (float32x2_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_s64_f64 (float64x2_t __a)
+ {
+- return (uint32x2_t) (__a == 0.0f);
++ return __builtin_aarch64_lbtruncv2dfv2di (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vceqz_f64 (float64x1_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_u64_f64 (float64x2_t __a)
+ {
+- return (uint64x1_t) (__a == (float64x1_t) {0.0});
++ return __builtin_aarch64_lbtruncuv2dfv2di_us (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vceqz_p8 (poly8x8_t __a)
++/* vcvta */
++
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtad_s64_f64 (float64_t __a)
+ {
+- return (uint8x8_t) (__a == 0);
++ return __builtin_aarch64_lrounddfdi (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vceqz_s8 (int8x8_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtad_u64_f64 (float64_t __a)
+ {
+- return (uint8x8_t) (__a == 0);
++ return __builtin_aarch64_lroundudfdi_us (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vceqz_s16 (int16x4_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtas_s32_f32 (float32_t __a)
+ {
+- return (uint16x4_t) (__a == 0);
++ return __builtin_aarch64_lroundsfsi (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vceqz_s32 (int32x2_t __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtas_u32_f32 (float32_t __a)
+ {
+- return (uint32x2_t) (__a == 0);
++ return __builtin_aarch64_lroundusfsi_us (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vceqz_s64 (int64x1_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvta_s32_f32 (float32x2_t __a)
+ {
+- return (uint64x1_t) (__a == __AARCH64_INT64_C (0));
++ return __builtin_aarch64_lroundv2sfv2si (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vceqz_u8 (uint8x8_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvta_u32_f32 (float32x2_t __a)
+ {
+- return (__a == 0);
++ return __builtin_aarch64_lrounduv2sfv2si_us (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vceqz_u16 (uint16x4_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtaq_s32_f32 (float32x4_t __a)
+ {
+- return (__a == 0);
++ return __builtin_aarch64_lroundv4sfv4si (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vceqz_u32 (uint32x2_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtaq_u32_f32 (float32x4_t __a)
+ {
+- return (__a == 0);
++ return __builtin_aarch64_lrounduv4sfv4si_us (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vceqz_u64 (uint64x1_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvta_s64_f64 (float64x1_t __a)
+ {
+- return (__a == __AARCH64_UINT64_C (0));
++ return (int64x1_t) {vcvtad_s64_f64 (__a[0])};
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vceqzq_f32 (float32x4_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvta_u64_f64 (float64x1_t __a)
+ {
+- return (uint32x4_t) (__a == 0.0f);
++ return (uint64x1_t) {vcvtad_u64_f64 (__a[0])};
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vceqzq_f64 (float64x2_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtaq_s64_f64 (float64x2_t __a)
+ {
+- return (uint64x2_t) (__a == 0.0f);
++ return __builtin_aarch64_lroundv2dfv2di (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vceqzq_p8 (poly8x16_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtaq_u64_f64 (float64x2_t __a)
+ {
+- return (uint8x16_t) (__a == 0);
++ return __builtin_aarch64_lrounduv2dfv2di_us (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vceqzq_s8 (int8x16_t __a)
++/* vcvtm */
++
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmd_s64_f64 (float64_t __a)
+ {
+- return (uint8x16_t) (__a == 0);
++ return __builtin_llfloor (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vceqzq_s16 (int16x8_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmd_u64_f64 (float64_t __a)
+ {
+- return (uint16x8_t) (__a == 0);
++ return __builtin_aarch64_lfloorudfdi_us (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vceqzq_s32 (int32x4_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtms_s32_f32 (float32_t __a)
+ {
+- return (uint32x4_t) (__a == 0);
++ return __builtin_ifloorf (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vceqzq_s64 (int64x2_t __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtms_u32_f32 (float32_t __a)
+ {
+- return (uint64x2_t) (__a == __AARCH64_INT64_C (0));
++ return __builtin_aarch64_lfloorusfsi_us (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vceqzq_u8 (uint8x16_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtm_s32_f32 (float32x2_t __a)
+ {
+- return (__a == 0);
++ return __builtin_aarch64_lfloorv2sfv2si (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vceqzq_u16 (uint16x8_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtm_u32_f32 (float32x2_t __a)
+ {
+- return (__a == 0);
++ return __builtin_aarch64_lflooruv2sfv2si_us (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vceqzq_u32 (uint32x4_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmq_s32_f32 (float32x4_t __a)
+ {
+- return (__a == 0);
++ return __builtin_aarch64_lfloorv4sfv4si (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vceqzq_u64 (uint64x2_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmq_u32_f32 (float32x4_t __a)
+ {
+- return (__a == __AARCH64_UINT64_C (0));
++ return __builtin_aarch64_lflooruv4sfv4si_us (__a);
+ }
+
+-/* vceqz - scalar. */
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vceqzs_f32 (float32_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtm_s64_f64 (float64x1_t __a)
+ {
+- return __a == 0.0f ? -1 : 0;
++ return (int64x1_t) {vcvtmd_s64_f64 (__a[0])};
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vceqzd_s64 (int64_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtm_u64_f64 (float64x1_t __a)
+ {
+- return __a == 0 ? -1ll : 0ll;
++ return (uint64x1_t) {vcvtmd_u64_f64 (__a[0])};
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vceqzd_u64 (uint64_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmq_s64_f64 (float64x2_t __a)
+ {
+- return __a == 0 ? -1ll : 0ll;
++ return __builtin_aarch64_lfloorv2dfv2di (__a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vceqzd_f64 (float64_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmq_u64_f64 (float64x2_t __a)
+ {
+- return __a == 0.0 ? -1ll : 0ll;
++ return __builtin_aarch64_lflooruv2dfv2di_us (__a);
+ }
+
+-/* vcge - vector. */
++/* vcvtn */
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcge_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnd_s64_f64 (float64_t __a)
+ {
+- return (uint32x2_t) (__a >= __b);
++ return __builtin_aarch64_lfrintndfdi (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcge_f64 (float64x1_t __a, float64x1_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnd_u64_f64 (float64_t __a)
+ {
+- return (uint64x1_t) (__a >= __b);
++ return __builtin_aarch64_lfrintnudfdi_us (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcge_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtns_s32_f32 (float32_t __a)
+ {
+- return (uint8x8_t) (__a >= __b);
++ return __builtin_aarch64_lfrintnsfsi (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vcge_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtns_u32_f32 (float32_t __a)
+ {
+- return (uint16x4_t) (__a >= __b);
++ return __builtin_aarch64_lfrintnusfsi_us (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcge_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtn_s32_f32 (float32x2_t __a)
+ {
+- return (uint32x2_t) (__a >= __b);
++ return __builtin_aarch64_lfrintnv2sfv2si (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcge_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtn_u32_f32 (float32x2_t __a)
+ {
+- return (uint64x1_t) (__a >= __b);
++ return __builtin_aarch64_lfrintnuv2sfv2si_us (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcge_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnq_s32_f32 (float32x4_t __a)
+ {
+- return (__a >= __b);
++ return __builtin_aarch64_lfrintnv4sfv4si (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vcge_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnq_u32_f32 (float32x4_t __a)
+ {
+- return (__a >= __b);
++ return __builtin_aarch64_lfrintnuv4sfv4si_us (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcge_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtn_s64_f64 (float64x1_t __a)
+ {
+- return (__a >= __b);
++ return (int64x1_t) {vcvtnd_s64_f64 (__a[0])};
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcge_u64 (uint64x1_t __a, uint64x1_t __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtn_u64_f64 (float64x1_t __a)
+ {
+- return (__a >= __b);
++ return (uint64x1_t) {vcvtnd_u64_f64 (__a[0])};
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgeq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnq_s64_f64 (float64x2_t __a)
+ {
+- return (uint32x4_t) (__a >= __b);
++ return __builtin_aarch64_lfrintnv2dfv2di (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgeq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnq_u64_f64 (float64x2_t __a)
+ {
+- return (uint64x2_t) (__a >= __b);
++ return __builtin_aarch64_lfrintnuv2dfv2di_us (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcgeq_s8 (int8x16_t __a, int8x16_t __b)
++/* vcvtp */
++
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpd_s64_f64 (float64_t __a)
+ {
+- return (uint8x16_t) (__a >= __b);
++ return __builtin_llceil (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcgeq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpd_u64_f64 (float64_t __a)
+ {
+- return (uint16x8_t) (__a >= __b);
++ return __builtin_aarch64_lceiludfdi_us (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgeq_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtps_s32_f32 (float32_t __a)
+ {
+- return (uint32x4_t) (__a >= __b);
++ return __builtin_iceilf (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgeq_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtps_u32_f32 (float32_t __a)
+ {
+- return (uint64x2_t) (__a >= __b);
++ return __builtin_aarch64_lceilusfsi_us (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtp_s32_f32 (float32x2_t __a)
+ {
+- return (__a >= __b);
++ return __builtin_aarch64_lceilv2sfv2si (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtp_u32_f32 (float32x2_t __a)
+ {
+- return (__a >= __b);
++ return __builtin_aarch64_lceiluv2sfv2si_us (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpq_s32_f32 (float32x4_t __a)
+ {
+- return (__a >= __b);
++ return __builtin_aarch64_lceilv4sfv4si (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpq_u32_f32 (float32x4_t __a)
+ {
+- return (__a >= __b);
++ return __builtin_aarch64_lceiluv4sfv4si_us (__a);
+ }
+
+-/* vcge - scalar. */
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcges_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtp_s64_f64 (float64x1_t __a)
+ {
+- return __a >= __b ? -1 : 0;
++ return (int64x1_t) {vcvtpd_s64_f64 (__a[0])};
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcged_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtp_u64_f64 (float64x1_t __a)
+ {
+- return __a >= __b ? -1ll : 0ll;
++ return (uint64x1_t) {vcvtpd_u64_f64 (__a[0])};
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcged_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpq_s64_f64 (float64x2_t __a)
+ {
+- return __a >= __b ? -1ll : 0ll;
++ return __builtin_aarch64_lceilv2dfv2di (__a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcged_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpq_u64_f64 (float64x2_t __a)
+ {
+- return __a >= __b ? -1ll : 0ll;
++ return __builtin_aarch64_lceiluv2dfv2di_us (__a);
+ }
+
+-/* vcgez - vector. */
++/* vdup_n */
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcgez_f32 (float32x2_t __a)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_f16 (float16_t __a)
+ {
+- return (uint32x2_t) (__a >= 0.0f);
++ return (float16x4_t) {__a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcgez_f64 (float64x1_t __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_f32 (float32_t __a)
+ {
+- return (uint64x1_t) (__a[0] >= (float64x1_t) {0.0});
++ return (float32x2_t) {__a, __a};
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcgez_s8 (int8x8_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_f64 (float64_t __a)
+ {
+- return (uint8x8_t) (__a >= 0);
++ return (float64x1_t) {__a};
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vcgez_s16 (int16x4_t __a)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_p8 (poly8_t __a)
+ {
+- return (uint16x4_t) (__a >= 0);
++ return (poly8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcgez_s32 (int32x2_t __a)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_p16 (poly16_t __a)
+ {
+- return (uint32x2_t) (__a >= 0);
++ return (poly16x4_t) {__a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcgez_s64 (int64x1_t __a)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_p64 (poly64_t __a)
+ {
+- return (uint64x1_t) (__a >= __AARCH64_INT64_C (0));
++ return (poly64x1_t) {__a};
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgezq_f32 (float32x4_t __a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_s8 (int8_t __a)
+ {
+- return (uint32x4_t) (__a >= 0.0f);
++ return (int8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgezq_f64 (float64x2_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_s16 (int16_t __a)
+ {
+- return (uint64x2_t) (__a >= 0.0);
++ return (int16x4_t) {__a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcgezq_s8 (int8x16_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_s32 (int32_t __a)
+ {
+- return (uint8x16_t) (__a >= 0);
++ return (int32x2_t) {__a, __a};
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcgezq_s16 (int16x8_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_s64 (int64_t __a)
+ {
+- return (uint16x8_t) (__a >= 0);
++ return (int64x1_t) {__a};
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgezq_s32 (int32x4_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_u8 (uint8_t __a)
+ {
+- return (uint32x4_t) (__a >= 0);
++ return (uint8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgezq_s64 (int64x2_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_u16 (uint16_t __a)
+ {
+- return (uint64x2_t) (__a >= __AARCH64_INT64_C (0));
++ return (uint16x4_t) {__a, __a, __a, __a};
+ }
+
+-/* vcgez - scalar. */
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcgezs_f32 (float32_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_u32 (uint32_t __a)
+ {
+- return __a >= 0.0f ? -1 : 0;
++ return (uint32x2_t) {__a, __a};
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcgezd_s64 (int64_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_u64 (uint64_t __a)
+ {
+- return __a >= 0 ? -1ll : 0ll;
++ return (uint64x1_t) {__a};
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcgezd_f64 (float64_t __a)
++/* vdupq_n */
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_f16 (float16_t __a)
+ {
+- return __a >= 0.0 ? -1ll : 0ll;
++ return (float16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-/* vcgt - vector. */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcgt_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_f32 (float32_t __a)
+ {
+- return (uint32x2_t) (__a > __b);
++ return (float32x4_t) {__a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcgt_f64 (float64x1_t __a, float64x1_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_f64 (float64_t __a)
+ {
+- return (uint64x1_t) (__a > __b);
++ return (float64x2_t) {__a, __a};
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcgt_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_p8 (uint32_t __a)
+ {
+- return (uint8x8_t) (__a > __b);
++ return (poly8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
++ __a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vcgt_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_p16 (uint32_t __a)
+ {
+- return (uint16x4_t) (__a > __b);
++ return (poly16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcgt_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_p64 (uint64_t __a)
+ {
+- return (uint32x2_t) (__a > __b);
++ return (poly64x2_t) {__a, __a};
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcgt_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_s8 (int32_t __a)
+ {
+- return (uint64x1_t) (__a > __b);
++ return (int8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
++ __a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_s16 (int32_t __a)
+ {
+- return (__a > __b);
++ return (int16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_s32 (int32_t __a)
+ {
+- return (__a > __b);
++ return (int32x4_t) {__a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_s64 (int64_t __a)
+ {
+- return (__a > __b);
++ return (int64x2_t) {__a, __a};
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_u8 (uint32_t __a)
+ {
+- return (__a > __b);
++ return (uint8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
++ __a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgtq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_u16 (uint32_t __a)
+ {
+- return (uint32x4_t) (__a > __b);
++ return (uint16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgtq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_u32 (uint32_t __a)
+ {
+- return (uint64x2_t) (__a > __b);
++ return (uint32x4_t) {__a, __a, __a, __a};
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcgtq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_u64 (uint64_t __a)
+ {
+- return (uint8x16_t) (__a > __b);
++ return (uint64x2_t) {__a, __a};
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcgtq_s16 (int16x8_t __a, int16x8_t __b)
++/* vdup_lane */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_f16 (float16x4_t __a, const int __b)
+ {
+- return (uint16x8_t) (__a > __b);
++ return __aarch64_vdup_lane_f16 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgtq_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_f32 (float32x2_t __a, const int __b)
+ {
+- return (uint32x4_t) (__a > __b);
++ return __aarch64_vdup_lane_f32 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgtq_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_f64 (float64x1_t __a, const int __b)
+ {
+- return (uint64x2_t) (__a > __b);
++ return __aarch64_vdup_lane_f64 (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_p8 (poly8x8_t __a, const int __b)
+ {
+- return (__a > __b);
++ return __aarch64_vdup_lane_p8 (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_p16 (poly16x4_t __a, const int __b)
+ {
+- return (__a > __b);
++ return __aarch64_vdup_lane_p16 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_p64 (poly64x1_t __a, const int __b)
+ {
+- return (__a > __b);
++ return __aarch64_vdup_lane_p64 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_s8 (int8x8_t __a, const int __b)
+ {
+- return (__a > __b);
++ return __aarch64_vdup_lane_s8 (__a, __b);
+ }
+
+-/* vcgt - scalar. */
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcgts_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_s16 (int16x4_t __a, const int __b)
+ {
+- return __a > __b ? -1 : 0;
++ return __aarch64_vdup_lane_s16 (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcgtd_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_s32 (int32x2_t __a, const int __b)
+ {
+- return __a > __b ? -1ll : 0ll;
++ return __aarch64_vdup_lane_s32 (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcgtd_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_s64 (int64x1_t __a, const int __b)
+ {
+- return __a > __b ? -1ll : 0ll;
++ return __aarch64_vdup_lane_s64 (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcgtd_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_u8 (uint8x8_t __a, const int __b)
+ {
+- return __a > __b ? -1ll : 0ll;
++ return __aarch64_vdup_lane_u8 (__a, __b);
+ }
+
+-/* vcgtz - vector. */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcgtz_f32 (float32x2_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_u16 (uint16x4_t __a, const int __b)
+ {
+- return (uint32x2_t) (__a > 0.0f);
++ return __aarch64_vdup_lane_u16 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcgtz_f64 (float64x1_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_u32 (uint32x2_t __a, const int __b)
+ {
+- return (uint64x1_t) (__a > (float64x1_t) {0.0});
++ return __aarch64_vdup_lane_u32 (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcgtz_s8 (int8x8_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_u64 (uint64x1_t __a, const int __b)
+ {
+- return (uint8x8_t) (__a > 0);
++ return __aarch64_vdup_lane_u64 (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vcgtz_s16 (int16x4_t __a)
++/* vdup_laneq */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_f16 (float16x8_t __a, const int __b)
+ {
+- return (uint16x4_t) (__a > 0);
++ return __aarch64_vdup_laneq_f16 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcgtz_s32 (int32x2_t __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_f32 (float32x4_t __a, const int __b)
+ {
+- return (uint32x2_t) (__a > 0);
++ return __aarch64_vdup_laneq_f32 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcgtz_s64 (int64x1_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_f64 (float64x2_t __a, const int __b)
+ {
+- return (uint64x1_t) (__a > __AARCH64_INT64_C (0));
++ return __aarch64_vdup_laneq_f64 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgtzq_f32 (float32x4_t __a)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_p8 (poly8x16_t __a, const int __b)
+ {
+- return (uint32x4_t) (__a > 0.0f);
++ return __aarch64_vdup_laneq_p8 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgtzq_f64 (float64x2_t __a)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_p16 (poly16x8_t __a, const int __b)
+ {
+- return (uint64x2_t) (__a > 0.0);
++ return __aarch64_vdup_laneq_p16 (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcgtzq_s8 (int8x16_t __a)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_p64 (poly64x2_t __a, const int __b)
+ {
+- return (uint8x16_t) (__a > 0);
++ return __aarch64_vdup_laneq_p64 (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcgtzq_s16 (int16x8_t __a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_s8 (int8x16_t __a, const int __b)
+ {
+- return (uint16x8_t) (__a > 0);
++ return __aarch64_vdup_laneq_s8 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcgtzq_s32 (int32x4_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_s16 (int16x8_t __a, const int __b)
+ {
+- return (uint32x4_t) (__a > 0);
++ return __aarch64_vdup_laneq_s16 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcgtzq_s64 (int64x2_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_s32 (int32x4_t __a, const int __b)
+ {
+- return (uint64x2_t) (__a > __AARCH64_INT64_C (0));
++ return __aarch64_vdup_laneq_s32 (__a, __b);
+ }
+
+-/* vcgtz - scalar. */
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_s64 (int64x2_t __a, const int __b)
++{
++ return __aarch64_vdup_laneq_s64 (__a, __b);
++}
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcgtzs_f32 (float32_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_u8 (uint8x16_t __a, const int __b)
+ {
+- return __a > 0.0f ? -1 : 0;
++ return __aarch64_vdup_laneq_u8 (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcgtzd_s64 (int64_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_u16 (uint16x8_t __a, const int __b)
+ {
+- return __a > 0 ? -1ll : 0ll;
++ return __aarch64_vdup_laneq_u16 (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcgtzd_f64 (float64_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_u32 (uint32x4_t __a, const int __b)
+ {
+- return __a > 0.0 ? -1ll : 0ll;
++ return __aarch64_vdup_laneq_u32 (__a, __b);
+ }
+
+-/* vcle - vector. */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcle_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_laneq_u64 (uint64x2_t __a, const int __b)
+ {
+- return (uint32x2_t) (__a <= __b);
++ return __aarch64_vdup_laneq_u64 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcle_f64 (float64x1_t __a, float64x1_t __b)
++/* vdupq_lane */
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_f16 (float16x4_t __a, const int __b)
+ {
+- return (uint64x1_t) (__a <= __b);
++ return __aarch64_vdupq_lane_f16 (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcle_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_f32 (float32x2_t __a, const int __b)
+ {
+- return (uint8x8_t) (__a <= __b);
++ return __aarch64_vdupq_lane_f32 (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vcle_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_f64 (float64x1_t __a, const int __b)
+ {
+- return (uint16x4_t) (__a <= __b);
++ return __aarch64_vdupq_lane_f64 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcle_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_p8 (poly8x8_t __a, const int __b)
+ {
+- return (uint32x2_t) (__a <= __b);
++ return __aarch64_vdupq_lane_p8 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcle_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_p16 (poly16x4_t __a, const int __b)
+ {
+- return (uint64x1_t) (__a <= __b);
++ return __aarch64_vdupq_lane_p16 (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcle_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_p64 (poly64x1_t __a, const int __b)
+ {
+- return (__a <= __b);
++ return __aarch64_vdupq_lane_p64 (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vcle_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_s8 (int8x8_t __a, const int __b)
+ {
+- return (__a <= __b);
++ return __aarch64_vdupq_lane_s8 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcle_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_s16 (int16x4_t __a, const int __b)
+ {
+- return (__a <= __b);
++ return __aarch64_vdupq_lane_s16 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcle_u64 (uint64x1_t __a, uint64x1_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_s32 (int32x2_t __a, const int __b)
+ {
+- return (__a <= __b);
++ return __aarch64_vdupq_lane_s32 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcleq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_s64 (int64x1_t __a, const int __b)
+ {
+- return (uint32x4_t) (__a <= __b);
++ return __aarch64_vdupq_lane_s64 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcleq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_u8 (uint8x8_t __a, const int __b)
+ {
+- return (uint64x2_t) (__a <= __b);
++ return __aarch64_vdupq_lane_u8 (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcleq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_u16 (uint16x4_t __a, const int __b)
+ {
+- return (uint8x16_t) (__a <= __b);
++ return __aarch64_vdupq_lane_u16 (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcleq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_u32 (uint32x2_t __a, const int __b)
+ {
+- return (uint16x8_t) (__a <= __b);
++ return __aarch64_vdupq_lane_u32 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcleq_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_u64 (uint64x1_t __a, const int __b)
+ {
+- return (uint32x4_t) (__a <= __b);
++ return __aarch64_vdupq_lane_u64 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcleq_s64 (int64x2_t __a, int64x2_t __b)
++/* vdupq_laneq */
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_f16 (float16x8_t __a, const int __b)
+ {
+- return (uint64x2_t) (__a <= __b);
++ return __aarch64_vdupq_laneq_f16 (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_f32 (float32x4_t __a, const int __b)
+ {
+- return (__a <= __b);
++ return __aarch64_vdupq_laneq_f32 (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_f64 (float64x2_t __a, const int __b)
+ {
+- return (__a <= __b);
++ return __aarch64_vdupq_laneq_f64 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_p8 (poly8x16_t __a, const int __b)
+ {
+- return (__a <= __b);
++ return __aarch64_vdupq_laneq_p8 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_p16 (poly16x8_t __a, const int __b)
+ {
+- return (__a <= __b);
++ return __aarch64_vdupq_laneq_p16 (__a, __b);
+ }
+
+-/* vcle - scalar. */
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcles_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_p64 (poly64x2_t __a, const int __b)
+ {
+- return __a <= __b ? -1 : 0;
++ return __aarch64_vdupq_laneq_p64 (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcled_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_s8 (int8x16_t __a, const int __b)
+ {
+- return __a <= __b ? -1ll : 0ll;
++ return __aarch64_vdupq_laneq_s8 (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcled_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_s16 (int16x8_t __a, const int __b)
+ {
+- return __a <= __b ? -1ll : 0ll;
++ return __aarch64_vdupq_laneq_s16 (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcled_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_s32 (int32x4_t __a, const int __b)
+ {
+- return __a <= __b ? -1ll : 0ll;
++ return __aarch64_vdupq_laneq_s32 (__a, __b);
+ }
+
+-/* vclez - vector. */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vclez_f32 (float32x2_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_s64 (int64x2_t __a, const int __b)
+ {
+- return (uint32x2_t) (__a <= 0.0f);
++ return __aarch64_vdupq_laneq_s64 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vclez_f64 (float64x1_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_u8 (uint8x16_t __a, const int __b)
+ {
+- return (uint64x1_t) (__a <= (float64x1_t) {0.0});
++ return __aarch64_vdupq_laneq_u8 (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vclez_s8 (int8x8_t __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_u16 (uint16x8_t __a, const int __b)
+ {
+- return (uint8x8_t) (__a <= 0);
++ return __aarch64_vdupq_laneq_u16 (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vclez_s16 (int16x4_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_u32 (uint32x4_t __a, const int __b)
+ {
+- return (uint16x4_t) (__a <= 0);
++ return __aarch64_vdupq_laneq_u32 (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vclez_s32 (int32x2_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_laneq_u64 (uint64x2_t __a, const int __b)
+ {
+- return (uint32x2_t) (__a <= 0);
++ return __aarch64_vdupq_laneq_u64 (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vclez_s64 (int64x1_t __a)
++/* vdupb_lane */
++__extension__ extern __inline poly8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupb_lane_p8 (poly8x8_t __a, const int __b)
+ {
+- return (uint64x1_t) (__a <= __AARCH64_INT64_C (0));
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vclezq_f32 (float32x4_t __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupb_lane_s8 (int8x8_t __a, const int __b)
+ {
+- return (uint32x4_t) (__a <= 0.0f);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vclezq_f64 (float64x2_t __a)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupb_lane_u8 (uint8x8_t __a, const int __b)
+ {
+- return (uint64x2_t) (__a <= 0.0);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vclezq_s8 (int8x16_t __a)
++/* vduph_lane */
++
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vduph_lane_f16 (float16x4_t __a, const int __b)
+ {
+- return (uint8x16_t) (__a <= 0);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vclezq_s16 (int16x8_t __a)
++__extension__ extern __inline poly16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vduph_lane_p16 (poly16x4_t __a, const int __b)
+ {
+- return (uint16x8_t) (__a <= 0);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vclezq_s32 (int32x4_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vduph_lane_s16 (int16x4_t __a, const int __b)
+ {
+- return (uint32x4_t) (__a <= 0);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vclezq_s64 (int64x2_t __a)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vduph_lane_u16 (uint16x4_t __a, const int __b)
+ {
+- return (uint64x2_t) (__a <= __AARCH64_INT64_C (0));
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-/* vclez - scalar. */
++/* vdups_lane */
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vclezs_f32 (float32_t __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdups_lane_f32 (float32x2_t __a, const int __b)
+ {
+- return __a <= 0.0f ? -1 : 0;
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vclezd_s64 (int64_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdups_lane_s32 (int32x2_t __a, const int __b)
+ {
+- return __a <= 0 ? -1ll : 0ll;
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vclezd_f64 (float64_t __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdups_lane_u32 (uint32x2_t __a, const int __b)
+ {
+- return __a <= 0.0 ? -1ll : 0ll;
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-/* vclt - vector. */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vclt_f32 (float32x2_t __a, float32x2_t __b)
++/* vdupd_lane */
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupd_lane_f64 (float64x1_t __a, const int __b)
+ {
+- return (uint32x2_t) (__a < __b);
++ __AARCH64_LANE_CHECK (__a, __b);
++ return __a[0];
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vclt_f64 (float64x1_t __a, float64x1_t __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupd_lane_s64 (int64x1_t __a, const int __b)
+ {
+- return (uint64x1_t) (__a < __b);
++ __AARCH64_LANE_CHECK (__a, __b);
++ return __a[0];
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vclt_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupd_lane_u64 (uint64x1_t __a, const int __b)
+ {
+- return (uint8x8_t) (__a < __b);
++ __AARCH64_LANE_CHECK (__a, __b);
++ return __a[0];
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vclt_s16 (int16x4_t __a, int16x4_t __b)
++/* vdupb_laneq */
++__extension__ extern __inline poly8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupb_laneq_p8 (poly8x16_t __a, const int __b)
+ {
+- return (uint16x4_t) (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vclt_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupb_laneq_s8 (int8x16_t __a, const int __b)
+ {
+- return (uint32x2_t) (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vclt_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupb_laneq_u8 (uint8x16_t __a, const int __b)
+ {
+- return (uint64x1_t) (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vclt_u8 (uint8x8_t __a, uint8x8_t __b)
+-{
+- return (__a < __b);
+-}
++/* vduph_laneq */
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vclt_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vduph_laneq_f16 (float16x8_t __a, const int __b)
+ {
+- return (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vclt_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline poly16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vduph_laneq_p16 (poly16x8_t __a, const int __b)
+ {
+- return (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vclt_u64 (uint64x1_t __a, uint64x1_t __b)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vduph_laneq_s16 (int16x8_t __a, const int __b)
+ {
+- return (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcltq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vduph_laneq_u16 (uint16x8_t __a, const int __b)
+ {
+- return (uint32x4_t) (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcltq_f64 (float64x2_t __a, float64x2_t __b)
++/* vdups_laneq */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdups_laneq_f32 (float32x4_t __a, const int __b)
+ {
+- return (uint64x2_t) (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcltq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdups_laneq_s32 (int32x4_t __a, const int __b)
+ {
+- return (uint8x16_t) (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcltq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdups_laneq_u32 (uint32x4_t __a, const int __b)
+ {
+- return (uint16x8_t) (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcltq_s32 (int32x4_t __a, int32x4_t __b)
++/* vdupd_laneq */
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupd_laneq_f64 (float64x2_t __a, const int __b)
+ {
+- return (uint32x4_t) (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcltq_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupd_laneq_s64 (int64x2_t __a, const int __b)
+ {
+- return (uint64x2_t) (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupd_laneq_u64 (uint64x2_t __a, const int __b)
+ {
+- return (__a < __b);
++ return __aarch64_vget_lane_any (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
++/* vext */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_f16 (float16x4_t __a, float16x4_t __b, __const int __c)
+ {
+- return (__a < __b);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a,
++ (uint16x4_t) {4 - __c, 5 - __c, 6 - __c, 7 - __c});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint16x4_t) {__c, __c + 1, __c + 2, __c + 3});
++#endif
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_f32 (float32x2_t __a, float32x2_t __b, __const int __c)
+ {
+- return (__a < __b);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
++#endif
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_f64 (float64x1_t __a, float64x1_t __b, __const int __c)
+ {
+- return (__a < __b);
++ __AARCH64_LANE_CHECK (__a, __c);
++ /* The only possible index to the assembler instruction returns element 0. */
++ return __a;
+ }
+-
+-/* vclt - scalar. */
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vclts_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_p8 (poly8x8_t __a, poly8x8_t __b, __const int __c)
+ {
+- return __a < __b ? -1 : 0;
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint8x8_t)
++ {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
++#endif
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcltd_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_p16 (poly16x4_t __a, poly16x4_t __b, __const int __c)
+ {
+- return __a < __b ? -1ll : 0ll;
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a,
++ (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
++#endif
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcltd_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_p64 (poly64x1_t __a, poly64x1_t __b, __const int __c)
+ {
+- return __a < __b ? -1ll : 0ll;
++ __AARCH64_LANE_CHECK (__a, __c);
++ /* The only possible index to the assembler instruction returns element 0. */
++ return __a;
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcltd_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_s8 (int8x8_t __a, int8x8_t __b, __const int __c)
+ {
+- return __a < __b ? -1ll : 0ll;
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint8x8_t)
++ {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
++#endif
+ }
+
+-/* vcltz - vector. */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcltz_f32 (float32x2_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_s16 (int16x4_t __a, int16x4_t __b, __const int __c)
+ {
+- return (uint32x2_t) (__a < 0.0f);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a,
++ (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
++#endif
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcltz_f64 (float64x1_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_s32 (int32x2_t __a, int32x2_t __b, __const int __c)
+ {
+- return (uint64x1_t) (__a < (float64x1_t) {0.0});
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
++#endif
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcltz_s8 (int8x8_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_s64 (int64x1_t __a, int64x1_t __b, __const int __c)
+ {
+- return (uint8x8_t) (__a < 0);
++ __AARCH64_LANE_CHECK (__a, __c);
++ /* The only possible index to the assembler instruction returns element 0. */
++ return __a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vcltz_s16 (int16x4_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_u8 (uint8x8_t __a, uint8x8_t __b, __const int __c)
+ {
+- return (uint16x4_t) (__a < 0);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint8x8_t)
++ {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
++#endif
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcltz_s32 (int32x2_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_u16 (uint16x4_t __a, uint16x4_t __b, __const int __c)
+ {
+- return (uint32x2_t) (__a < 0);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a,
++ (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
++#endif
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcltz_s64 (int64x1_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_u32 (uint32x2_t __a, uint32x2_t __b, __const int __c)
+ {
+- return (uint64x1_t) (__a < __AARCH64_INT64_C (0));
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
++#endif
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcltzq_f32 (float32x4_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_u64 (uint64x1_t __a, uint64x1_t __b, __const int __c)
+ {
+- return (uint32x4_t) (__a < 0.0f);
++ __AARCH64_LANE_CHECK (__a, __c);
++ /* The only possible index to the assembler instruction returns element 0. */
++ return __a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcltzq_f64 (float64x2_t __a)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_f16 (float16x8_t __a, float16x8_t __b, __const int __c)
+ {
+- return (uint64x2_t) (__a < 0.0);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a,
++ (uint16x8_t) {8 - __c, 9 - __c, 10 - __c, 11 - __c,
++ 12 - __c, 13 - __c, 14 - __c,
++ 15 - __c});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint16x8_t) {__c, __c + 1, __c + 2, __c + 3,
++ __c + 4, __c + 5, __c + 6, __c + 7});
++#endif
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcltzq_s8 (int8x16_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_f32 (float32x4_t __a, float32x4_t __b, __const int __c)
+ {
+- return (uint8x16_t) (__a < 0);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a,
++ (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
++#endif
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vcltzq_s16 (int16x8_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_f64 (float64x2_t __a, float64x2_t __b, __const int __c)
+ {
+- return (uint16x8_t) (__a < 0);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
++#endif
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcltzq_s32 (int32x4_t __a)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_p8 (poly8x16_t __a, poly8x16_t __b, __const int __c)
+ {
+- return (uint32x4_t) (__a < 0);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint8x16_t)
++ {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
++ 24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
++ __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
++#endif
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcltzq_s64 (int64x2_t __a)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_p16 (poly16x8_t __a, poly16x8_t __b, __const int __c)
+ {
+- return (uint64x2_t) (__a < __AARCH64_INT64_C (0));
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint16x8_t)
++ {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
++#endif
+ }
+
+-/* vcltz - scalar. */
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcltzs_f32 (float32_t __a)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_p64 (poly64x2_t __a, poly64x2_t __b, __const int __c)
+ {
+- return __a < 0.0f ? -1 : 0;
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
++#endif
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcltzd_s64 (int64_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_s8 (int8x16_t __a, int8x16_t __b, __const int __c)
+ {
+- return __a < 0 ? -1ll : 0ll;
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint8x16_t)
++ {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
++ 24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
++ __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
++#endif
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcltzd_f64 (float64_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_s16 (int16x8_t __a, int16x8_t __b, __const int __c)
+ {
+- return __a < 0.0 ? -1ll : 0ll;
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint16x8_t)
++ {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
++#endif
+ }
+
+-/* vcls. */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vcls_s8 (int8x8_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_s32 (int32x4_t __a, int32x4_t __b, __const int __c)
+ {
+- return __builtin_aarch64_clrsbv8qi (__a);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a,
++ (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
++#endif
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vcls_s16 (int16x4_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_s64 (int64x2_t __a, int64x2_t __b, __const int __c)
+ {
+- return __builtin_aarch64_clrsbv4hi (__a);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
++#endif
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vcls_s32 (int32x2_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_u8 (uint8x16_t __a, uint8x16_t __b, __const int __c)
+ {
+- return __builtin_aarch64_clrsbv2si (__a);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint8x16_t)
++ {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
++ 24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
++ __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
++#endif
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vclsq_s8 (int8x16_t __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_u16 (uint16x8_t __a, uint16x8_t __b, __const int __c)
+ {
+- return __builtin_aarch64_clrsbv16qi (__a);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint16x8_t)
++ {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
++#endif
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vclsq_s16 (int16x8_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_u32 (uint32x4_t __a, uint32x4_t __b, __const int __c)
+ {
+- return __builtin_aarch64_clrsbv8hi (__a);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a,
++ (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
++#endif
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vclsq_s32 (int32x4_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_u64 (uint64x2_t __a, uint64x2_t __b, __const int __c)
+ {
+- return __builtin_aarch64_clrsbv4si (__a);
++ __AARCH64_LANE_CHECK (__a, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
++#endif
+ }
+
+-/* vclz. */
++/* vfma */
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vclz_s8 (int8x8_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
+ {
+- return __builtin_aarch64_clzv8qi (__a);
++ return (float64x1_t) {__builtin_fma (__b[0], __c[0], __a[0])};
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vclz_s16 (int16x4_t __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
+ {
+- return __builtin_aarch64_clzv4hi (__a);
++ return __builtin_aarch64_fmav2sf (__b, __c, __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vclz_s32 (int32x2_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
+ {
+- return __builtin_aarch64_clzv2si (__a);
++ return __builtin_aarch64_fmav4sf (__b, __c, __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vclz_u8 (uint8x8_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_f64 (float64x2_t __a, float64x2_t __b, float64x2_t __c)
+ {
+- return (uint8x8_t)__builtin_aarch64_clzv8qi ((int8x8_t)__a);
++ return __builtin_aarch64_fmav2df (__b, __c, __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vclz_u16 (uint16x4_t __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
+ {
+- return (uint16x4_t)__builtin_aarch64_clzv4hi ((int16x4_t)__a);
++ return __builtin_aarch64_fmav2sf (__b, vdup_n_f32 (__c), __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vclz_u32 (uint32x2_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_n_f64 (float64x1_t __a, float64x1_t __b, float64_t __c)
+ {
+- return (uint32x2_t)__builtin_aarch64_clzv2si ((int32x2_t)__a);
++ return (float64x1_t) {__b[0] * __c + __a[0]};
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vclzq_s8 (int8x16_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
+ {
+- return __builtin_aarch64_clzv16qi (__a);
++ return __builtin_aarch64_fmav4sf (__b, vdupq_n_f32 (__c), __a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vclzq_s16 (int16x8_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_n_f64 (float64x2_t __a, float64x2_t __b, float64_t __c)
+ {
+- return __builtin_aarch64_clzv8hi (__a);
++ return __builtin_aarch64_fmav2df (__b, vdupq_n_f64 (__c), __a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vclzq_s32 (int32x4_t __a)
++/* vfma_lane */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_lane_f32 (float32x2_t __a, float32x2_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- return __builtin_aarch64_clzv4si (__a);
++ return __builtin_aarch64_fmav2sf (__b,
++ __aarch64_vdup_lane_f32 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vclzq_u8 (uint8x16_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_lane_f64 (float64x1_t __a, float64x1_t __b,
++ float64x1_t __c, const int __lane)
+ {
+- return (uint8x16_t)__builtin_aarch64_clzv16qi ((int8x16_t)__a);
++ return (float64x1_t) {__builtin_fma (__b[0], __c[0], __a[0])};
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vclzq_u16 (uint16x8_t __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmad_lane_f64 (float64_t __a, float64_t __b,
++ float64x1_t __c, const int __lane)
+ {
+- return (uint16x8_t)__builtin_aarch64_clzv8hi ((int16x8_t)__a);
++ return __builtin_fma (__b, __c[0], __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vclzq_u32 (uint32x4_t __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmas_lane_f32 (float32_t __a, float32_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- return (uint32x4_t)__builtin_aarch64_clzv4si ((int32x4_t)__a);
++ return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
+ }
+
+-/* vcnt. */
++/* vfma_laneq */
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vcnt_p8 (poly8x8_t __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_laneq_f32 (float32x2_t __a, float32x2_t __b,
++ float32x4_t __c, const int __lane)
+ {
+- return (poly8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
++ return __builtin_aarch64_fmav2sf (__b,
++ __aarch64_vdup_laneq_f32 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vcnt_s8 (int8x8_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_laneq_f64 (float64x1_t __a, float64x1_t __b,
++ float64x2_t __c, const int __lane)
+ {
+- return __builtin_aarch64_popcountv8qi (__a);
++ float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
++ return (float64x1_t) {__builtin_fma (__b[0], __c0, __a[0])};
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vcnt_u8 (uint8x8_t __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmad_laneq_f64 (float64_t __a, float64_t __b,
++ float64x2_t __c, const int __lane)
+ {
+- return (uint8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
++ return __builtin_fma (__b, __aarch64_vget_lane_any (__c, __lane), __a);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vcntq_p8 (poly8x16_t __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmas_laneq_f32 (float32_t __a, float32_t __b,
++ float32x4_t __c, const int __lane)
+ {
+- return (poly8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
++ return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vcntq_s8 (int8x16_t __a)
++/* vfmaq_lane */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_lane_f32 (float32x4_t __a, float32x4_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- return __builtin_aarch64_popcountv16qi (__a);
++ return __builtin_aarch64_fmav4sf (__b,
++ __aarch64_vdupq_lane_f32 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vcntq_u8 (uint8x16_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_lane_f64 (float64x2_t __a, float64x2_t __b,
++ float64x1_t __c, const int __lane)
+ {
+- return (uint8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
++ return __builtin_aarch64_fmav2df (__b, vdupq_n_f64 (__c[0]), __a);
+ }
+
+-/* vcvt (double -> float). */
++/* vfmaq_laneq */
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
+-vcvt_f16_f32 (float32x4_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_laneq_f32 (float32x4_t __a, float32x4_t __b,
++ float32x4_t __c, const int __lane)
+ {
+- return __builtin_aarch64_float_truncate_lo_v4hf (__a);
++ return __builtin_aarch64_fmav4sf (__b,
++ __aarch64_vdupq_laneq_f32 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
+-vcvt_high_f16_f32 (float16x4_t __a, float32x4_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_laneq_f64 (float64x2_t __a, float64x2_t __b,
++ float64x2_t __c, const int __lane)
+ {
+- return __builtin_aarch64_float_truncate_hi_v8hf (__a, __b);
++ return __builtin_aarch64_fmav2df (__b,
++ __aarch64_vdupq_laneq_f64 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vcvt_f32_f64 (float64x2_t __a)
++/* vfms */
++
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
+ {
+- return __builtin_aarch64_float_truncate_lo_v2sf (__a);
++ return (float64x1_t) {__builtin_fma (-__b[0], __c[0], __a[0])};
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vcvt_high_f32_f64 (float32x2_t __a, float64x2_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
+ {
+- return __builtin_aarch64_float_truncate_hi_v4sf (__a, __b);
++ return __builtin_aarch64_fmav2sf (-__b, __c, __a);
+ }
+
+-/* vcvt (float -> double). */
+-
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vcvt_f32_f16 (float16x4_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
+ {
+- return __builtin_aarch64_float_extend_lo_v4sf (__a);
++ return __builtin_aarch64_fmav4sf (-__b, __c, __a);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vcvt_f64_f32 (float32x2_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_f64 (float64x2_t __a, float64x2_t __b, float64x2_t __c)
+ {
+-
+- return __builtin_aarch64_float_extend_lo_v2df (__a);
++ return __builtin_aarch64_fmav2df (-__b, __c, __a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vcvt_high_f32_f16 (float16x8_t __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
+ {
+- return __builtin_aarch64_vec_unpacks_hi_v8hf (__a);
++ return __builtin_aarch64_fmav2sf (-__b, vdup_n_f32 (__c), __a);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vcvt_high_f64_f32 (float32x4_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_n_f64 (float64x1_t __a, float64x1_t __b, float64_t __c)
+ {
+- return __builtin_aarch64_vec_unpacks_hi_v4sf (__a);
++ return (float64x1_t) {-__b[0] * __c + __a[0]};
+ }
+
+-/* vcvt (<u>int -> float) */
+-
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vcvtd_f64_s64 (int64_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
+ {
+- return (float64_t) __a;
++ return __builtin_aarch64_fmav4sf (-__b, vdupq_n_f32 (__c), __a);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vcvtd_f64_u64 (uint64_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_n_f64 (float64x2_t __a, float64x2_t __b, float64_t __c)
+ {
+- return (float64_t) __a;
++ return __builtin_aarch64_fmav2df (-__b, vdupq_n_f64 (__c), __a);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vcvts_f32_s32 (int32_t __a)
++/* vfms_lane */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_lane_f32 (float32x2_t __a, float32x2_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- return (float32_t) __a;
++ return __builtin_aarch64_fmav2sf (-__b,
++ __aarch64_vdup_lane_f32 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vcvts_f32_u32 (uint32_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_lane_f64 (float64x1_t __a, float64x1_t __b,
++ float64x1_t __c, const int __lane)
+ {
+- return (float32_t) __a;
++ return (float64x1_t) {__builtin_fma (-__b[0], __c[0], __a[0])};
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vcvt_f32_s32 (int32x2_t __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsd_lane_f64 (float64_t __a, float64_t __b,
++ float64x1_t __c, const int __lane)
+ {
+- return __builtin_aarch64_floatv2siv2sf (__a);
++ return __builtin_fma (-__b, __c[0], __a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vcvt_f32_u32 (uint32x2_t __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmss_lane_f32 (float32_t __a, float32_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- return __builtin_aarch64_floatunsv2siv2sf ((int32x2_t) __a);
++ return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vcvtq_f32_s32 (int32x4_t __a)
++/* vfms_laneq */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_laneq_f32 (float32x2_t __a, float32x2_t __b,
++ float32x4_t __c, const int __lane)
+ {
+- return __builtin_aarch64_floatv4siv4sf (__a);
++ return __builtin_aarch64_fmav2sf (-__b,
++ __aarch64_vdup_laneq_f32 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vcvtq_f32_u32 (uint32x4_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_laneq_f64 (float64x1_t __a, float64x1_t __b,
++ float64x2_t __c, const int __lane)
+ {
+- return __builtin_aarch64_floatunsv4siv4sf ((int32x4_t) __a);
++ float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
++ return (float64x1_t) {__builtin_fma (-__b[0], __c0, __a[0])};
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vcvtq_f64_s64 (int64x2_t __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsd_laneq_f64 (float64_t __a, float64_t __b,
++ float64x2_t __c, const int __lane)
+ {
+- return __builtin_aarch64_floatv2div2df (__a);
++ return __builtin_fma (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vcvtq_f64_u64 (uint64x2_t __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmss_laneq_f32 (float32_t __a, float32_t __b,
++ float32x4_t __c, const int __lane)
+ {
+- return __builtin_aarch64_floatunsv2div2df ((int64x2_t) __a);
++ return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
+ }
+
+-/* vcvt (float -> <u>int) */
++/* vfmsq_lane */
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vcvtd_s64_f64 (float64_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_lane_f32 (float32x4_t __a, float32x4_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- return (int64_t) __a;
++ return __builtin_aarch64_fmav4sf (-__b,
++ __aarch64_vdupq_lane_f32 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcvtd_u64_f64 (float64_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_lane_f64 (float64x2_t __a, float64x2_t __b,
++ float64x1_t __c, const int __lane)
+ {
+- return (uint64_t) __a;
++ return __builtin_aarch64_fmav2df (-__b, vdupq_n_f64 (__c[0]), __a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vcvts_s32_f32 (float32_t __a)
++/* vfmsq_laneq */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_laneq_f32 (float32x4_t __a, float32x4_t __b,
++ float32x4_t __c, const int __lane)
+ {
+- return (int32_t) __a;
++ return __builtin_aarch64_fmav4sf (-__b,
++ __aarch64_vdupq_laneq_f32 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcvts_u32_f32 (float32_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_laneq_f64 (float64x2_t __a, float64x2_t __b,
++ float64x2_t __c, const int __lane)
+ {
+- return (uint32_t) __a;
++ return __builtin_aarch64_fmav2df (-__b,
++ __aarch64_vdupq_laneq_f64 (__c, __lane),
++ __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vcvt_s32_f32 (float32x2_t __a)
++/* vld1 */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_f16 (const float16_t *__a)
+ {
+- return __builtin_aarch64_lbtruncv2sfv2si (__a);
++ return __builtin_aarch64_ld1v4hf (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcvt_u32_f32 (float32x2_t __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_f32 (const float32_t *a)
+ {
+- return __builtin_aarch64_lbtruncuv2sfv2si_us (__a);
++ return __builtin_aarch64_ld1v2sf ((const __builtin_aarch64_simd_sf *) a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vcvtq_s32_f32 (float32x4_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_f64 (const float64_t *a)
+ {
+- return __builtin_aarch64_lbtruncv4sfv4si (__a);
++ return (float64x1_t) {*a};
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcvtq_u32_f32 (float32x4_t __a)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_p8 (const poly8_t *a)
+ {
+- return __builtin_aarch64_lbtruncuv4sfv4si_us (__a);
++ return (poly8x8_t)
++ __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vcvt_s64_f64 (float64x1_t __a)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_p16 (const poly16_t *a)
+ {
+- return (int64x1_t) {vcvtd_s64_f64 (__a[0])};
++ return (poly16x4_t)
++ __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcvt_u64_f64 (float64x1_t __a)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_p64 (const poly64_t *a)
+ {
+- return (uint64x1_t) {vcvtd_u64_f64 (__a[0])};
++ return (poly64x1_t) {*a};
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vcvtq_s64_f64 (float64x2_t __a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_s8 (const int8_t *a)
+ {
+- return __builtin_aarch64_lbtruncv2dfv2di (__a);
++ return __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcvtq_u64_f64 (float64x2_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_s16 (const int16_t *a)
+ {
+- return __builtin_aarch64_lbtruncuv2dfv2di_us (__a);
++ return __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
+ }
+
+-/* vcvta */
+-
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vcvtad_s64_f64 (float64_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_s32 (const int32_t *a)
+ {
+- return __builtin_aarch64_lrounddfdi (__a);
++ return __builtin_aarch64_ld1v2si ((const __builtin_aarch64_simd_si *) a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcvtad_u64_f64 (float64_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_s64 (const int64_t *a)
+ {
+- return __builtin_aarch64_lroundudfdi_us (__a);
++ return (int64x1_t) {*a};
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vcvtas_s32_f32 (float32_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_u8 (const uint8_t *a)
+ {
+- return __builtin_aarch64_lroundsfsi (__a);
++ return (uint8x8_t)
++ __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcvtas_u32_f32 (float32_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_u16 (const uint16_t *a)
+ {
+- return __builtin_aarch64_lroundusfsi_us (__a);
++ return (uint16x4_t)
++ __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vcvta_s32_f32 (float32x2_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_u32 (const uint32_t *a)
+ {
+- return __builtin_aarch64_lroundv2sfv2si (__a);
++ return (uint32x2_t)
++ __builtin_aarch64_ld1v2si ((const __builtin_aarch64_simd_si *) a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcvta_u32_f32 (float32x2_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_u64 (const uint64_t *a)
+ {
+- return __builtin_aarch64_lrounduv2sfv2si_us (__a);
++ return (uint64x1_t) {*a};
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vcvtaq_s32_f32 (float32x4_t __a)
++/* vld1q */
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_f16 (const float16_t *__a)
+ {
+- return __builtin_aarch64_lroundv4sfv4si (__a);
++ return __builtin_aarch64_ld1v8hf (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcvtaq_u32_f32 (float32x4_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_f32 (const float32_t *a)
+ {
+- return __builtin_aarch64_lrounduv4sfv4si_us (__a);
++ return __builtin_aarch64_ld1v4sf ((const __builtin_aarch64_simd_sf *) a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vcvta_s64_f64 (float64x1_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_f64 (const float64_t *a)
+ {
+- return (int64x1_t) {vcvtad_s64_f64 (__a[0])};
++ return __builtin_aarch64_ld1v2df ((const __builtin_aarch64_simd_df *) a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcvta_u64_f64 (float64x1_t __a)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_p8 (const poly8_t *a)
+ {
+- return (uint64x1_t) {vcvtad_u64_f64 (__a[0])};
++ return (poly8x16_t)
++ __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vcvtaq_s64_f64 (float64x2_t __a)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_p16 (const poly16_t *a)
+ {
+- return __builtin_aarch64_lroundv2dfv2di (__a);
++ return (poly16x8_t)
++ __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcvtaq_u64_f64 (float64x2_t __a)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_p64 (const poly64_t *a)
+ {
+- return __builtin_aarch64_lrounduv2dfv2di_us (__a);
++ return (poly64x2_t)
++ __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
+ }
+
+-/* vcvtm */
+-
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vcvtmd_s64_f64 (float64_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_s8 (const int8_t *a)
+ {
+- return __builtin_llfloor (__a);
++ return __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcvtmd_u64_f64 (float64_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_s16 (const int16_t *a)
+ {
+- return __builtin_aarch64_lfloorudfdi_us (__a);
++ return __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vcvtms_s32_f32 (float32_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_s32 (const int32_t *a)
+ {
+- return __builtin_ifloorf (__a);
++ return __builtin_aarch64_ld1v4si ((const __builtin_aarch64_simd_si *) a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcvtms_u32_f32 (float32_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_s64 (const int64_t *a)
+ {
+- return __builtin_aarch64_lfloorusfsi_us (__a);
++ return __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vcvtm_s32_f32 (float32x2_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_u8 (const uint8_t *a)
+ {
+- return __builtin_aarch64_lfloorv2sfv2si (__a);
++ return (uint8x16_t)
++ __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcvtm_u32_f32 (float32x2_t __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_u16 (const uint16_t *a)
+ {
+- return __builtin_aarch64_lflooruv2sfv2si_us (__a);
++ return (uint16x8_t)
++ __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vcvtmq_s32_f32 (float32x4_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_u32 (const uint32_t *a)
+ {
+- return __builtin_aarch64_lfloorv4sfv4si (__a);
++ return (uint32x4_t)
++ __builtin_aarch64_ld1v4si ((const __builtin_aarch64_simd_si *) a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcvtmq_u32_f32 (float32x4_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_u64 (const uint64_t *a)
+ {
+- return __builtin_aarch64_lflooruv4sfv4si_us (__a);
++ return (uint64x2_t)
++ __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vcvtm_s64_f64 (float64x1_t __a)
++/* vld1_dup */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_f16 (const float16_t* __a)
+ {
+- return (int64x1_t) {vcvtmd_s64_f64 (__a[0])};
++ return vdup_n_f16 (*__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcvtm_u64_f64 (float64x1_t __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_f32 (const float32_t* __a)
+ {
+- return (uint64x1_t) {vcvtmd_u64_f64 (__a[0])};
++ return vdup_n_f32 (*__a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vcvtmq_s64_f64 (float64x2_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_f64 (const float64_t* __a)
+ {
+- return __builtin_aarch64_lfloorv2dfv2di (__a);
++ return vdup_n_f64 (*__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcvtmq_u64_f64 (float64x2_t __a)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_p8 (const poly8_t* __a)
+ {
+- return __builtin_aarch64_lflooruv2dfv2di_us (__a);
++ return vdup_n_p8 (*__a);
+ }
+
+-/* vcvtn */
+-
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vcvtnd_s64_f64 (float64_t __a)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_p16 (const poly16_t* __a)
+ {
+- return __builtin_aarch64_lfrintndfdi (__a);
++ return vdup_n_p16 (*__a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcvtnd_u64_f64 (float64_t __a)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_p64 (const poly64_t* __a)
+ {
+- return __builtin_aarch64_lfrintnudfdi_us (__a);
++ return vdup_n_p64 (*__a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vcvtns_s32_f32 (float32_t __a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_s8 (const int8_t* __a)
+ {
+- return __builtin_aarch64_lfrintnsfsi (__a);
++ return vdup_n_s8 (*__a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcvtns_u32_f32 (float32_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_s16 (const int16_t* __a)
+ {
+- return __builtin_aarch64_lfrintnusfsi_us (__a);
++ return vdup_n_s16 (*__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vcvtn_s32_f32 (float32x2_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_s32 (const int32_t* __a)
+ {
+- return __builtin_aarch64_lfrintnv2sfv2si (__a);
++ return vdup_n_s32 (*__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcvtn_u32_f32 (float32x2_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_s64 (const int64_t* __a)
+ {
+- return __builtin_aarch64_lfrintnuv2sfv2si_us (__a);
++ return vdup_n_s64 (*__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vcvtnq_s32_f32 (float32x4_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_u8 (const uint8_t* __a)
+ {
+- return __builtin_aarch64_lfrintnv4sfv4si (__a);
++ return vdup_n_u8 (*__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcvtnq_u32_f32 (float32x4_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_u16 (const uint16_t* __a)
+ {
+- return __builtin_aarch64_lfrintnuv4sfv4si_us (__a);
++ return vdup_n_u16 (*__a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vcvtn_s64_f64 (float64x1_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_u32 (const uint32_t* __a)
+ {
+- return (int64x1_t) {vcvtnd_s64_f64 (__a[0])};
++ return vdup_n_u32 (*__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcvtn_u64_f64 (float64x1_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_dup_u64 (const uint64_t* __a)
+ {
+- return (uint64x1_t) {vcvtnd_u64_f64 (__a[0])};
++ return vdup_n_u64 (*__a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vcvtnq_s64_f64 (float64x2_t __a)
++/* vld1q_dup */
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_f16 (const float16_t* __a)
+ {
+- return __builtin_aarch64_lfrintnv2dfv2di (__a);
++ return vdupq_n_f16 (*__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcvtnq_u64_f64 (float64x2_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_f32 (const float32_t* __a)
+ {
+- return __builtin_aarch64_lfrintnuv2dfv2di_us (__a);
++ return vdupq_n_f32 (*__a);
+ }
+
+-/* vcvtp */
+-
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vcvtpd_s64_f64 (float64_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_f64 (const float64_t* __a)
+ {
+- return __builtin_llceil (__a);
++ return vdupq_n_f64 (*__a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vcvtpd_u64_f64 (float64_t __a)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_p8 (const poly8_t* __a)
+ {
+- return __builtin_aarch64_lceiludfdi_us (__a);
++ return vdupq_n_p8 (*__a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vcvtps_s32_f32 (float32_t __a)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_p16 (const poly16_t* __a)
+ {
+- return __builtin_iceilf (__a);
++ return vdupq_n_p16 (*__a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vcvtps_u32_f32 (float32_t __a)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_p64 (const poly64_t* __a)
+ {
+- return __builtin_aarch64_lceilusfsi_us (__a);
++ return vdupq_n_p64 (*__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vcvtp_s32_f32 (float32x2_t __a)
++ __extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_s8 (const int8_t* __a)
+ {
+- return __builtin_aarch64_lceilv2sfv2si (__a);
++ return vdupq_n_s8 (*__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vcvtp_u32_f32 (float32x2_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_s16 (const int16_t* __a)
+ {
+- return __builtin_aarch64_lceiluv2sfv2si_us (__a);
++ return vdupq_n_s16 (*__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vcvtpq_s32_f32 (float32x4_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_s32 (const int32_t* __a)
+ {
+- return __builtin_aarch64_lceilv4sfv4si (__a);
++ return vdupq_n_s32 (*__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vcvtpq_u32_f32 (float32x4_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_s64 (const int64_t* __a)
+ {
+- return __builtin_aarch64_lceiluv4sfv4si_us (__a);
++ return vdupq_n_s64 (*__a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vcvtp_s64_f64 (float64x1_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_u8 (const uint8_t* __a)
+ {
+- return (int64x1_t) {vcvtpd_s64_f64 (__a[0])};
++ return vdupq_n_u8 (*__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vcvtp_u64_f64 (float64x1_t __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_u16 (const uint16_t* __a)
+ {
+- return (uint64x1_t) {vcvtpd_u64_f64 (__a[0])};
++ return vdupq_n_u16 (*__a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vcvtpq_s64_f64 (float64x2_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_u32 (const uint32_t* __a)
+ {
+- return __builtin_aarch64_lceilv2dfv2di (__a);
++ return vdupq_n_u32 (*__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vcvtpq_u64_f64 (float64x2_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_dup_u64 (const uint64_t* __a)
+ {
+- return __builtin_aarch64_lceiluv2dfv2di_us (__a);
++ return vdupq_n_u64 (*__a);
+ }
+
+-/* vdup_n */
++/* vld1_lane */
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vdup_n_f32 (float32_t __a)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_f16 (const float16_t *__src, float16x4_t __vec, const int __lane)
+ {
+- return (float32x2_t) {__a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vdup_n_f64 (float64_t __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_f32 (const float32_t *__src, float32x2_t __vec, const int __lane)
+ {
+- return (float64x1_t) {__a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vdup_n_p8 (poly8_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_f64 (const float64_t *__src, float64x1_t __vec, const int __lane)
+ {
+- return (poly8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vdup_n_p16 (poly16_t __a)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_p8 (const poly8_t *__src, poly8x8_t __vec, const int __lane)
+ {
+- return (poly16x4_t) {__a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vdup_n_s8 (int8_t __a)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_p16 (const poly16_t *__src, poly16x4_t __vec, const int __lane)
+ {
+- return (int8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vdup_n_s16 (int16_t __a)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_p64 (const poly64_t *__src, poly64x1_t __vec, const int __lane)
+ {
+- return (int16x4_t) {__a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vdup_n_s32 (int32_t __a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_s8 (const int8_t *__src, int8x8_t __vec, const int __lane)
+ {
+- return (int32x2_t) {__a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vdup_n_s64 (int64_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_s16 (const int16_t *__src, int16x4_t __vec, const int __lane)
+ {
+- return (int64x1_t) {__a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vdup_n_u8 (uint8_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_s32 (const int32_t *__src, int32x2_t __vec, const int __lane)
+ {
+- return (uint8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vdup_n_u16 (uint16_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_s64 (const int64_t *__src, int64x1_t __vec, const int __lane)
+ {
+- return (uint16x4_t) {__a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vdup_n_u32 (uint32_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_u8 (const uint8_t *__src, uint8x8_t __vec, const int __lane)
+ {
+- return (uint32x2_t) {__a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vdup_n_u64 (uint64_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_u16 (const uint16_t *__src, uint16x4_t __vec, const int __lane)
+ {
+- return (uint64x1_t) {__a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-/* vdupq_n */
+-
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vdupq_n_f32 (float32_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_u32 (const uint32_t *__src, uint32x2_t __vec, const int __lane)
+ {
+- return (float32x4_t) {__a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vdupq_n_f64 (float64_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1_lane_u64 (const uint64_t *__src, uint64x1_t __vec, const int __lane)
+ {
+- return (float64x2_t) {__a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vdupq_n_p8 (uint32_t __a)
++/* vld1q_lane */
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_f16 (const float16_t *__src, float16x8_t __vec, const int __lane)
+ {
+- return (poly8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
+- __a, __a, __a, __a, __a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vdupq_n_p16 (uint32_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_f32 (const float32_t *__src, float32x4_t __vec, const int __lane)
+ {
+- return (poly16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vdupq_n_s8 (int32_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_f64 (const float64_t *__src, float64x2_t __vec, const int __lane)
+ {
+- return (int8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
+- __a, __a, __a, __a, __a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vdupq_n_s16 (int32_t __a)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_p8 (const poly8_t *__src, poly8x16_t __vec, const int __lane)
+ {
+- return (int16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vdupq_n_s32 (int32_t __a)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_p16 (const poly16_t *__src, poly16x8_t __vec, const int __lane)
+ {
+- return (int32x4_t) {__a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vdupq_n_s64 (int64_t __a)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_p64 (const poly64_t *__src, poly64x2_t __vec, const int __lane)
+ {
+- return (int64x2_t) {__a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vdupq_n_u8 (uint32_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_s8 (const int8_t *__src, int8x16_t __vec, const int __lane)
+ {
+- return (uint8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
+- __a, __a, __a, __a, __a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vdupq_n_u16 (uint32_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_s16 (const int16_t *__src, int16x8_t __vec, const int __lane)
+ {
+- return (uint16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vdupq_n_u32 (uint32_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_s32 (const int32_t *__src, int32x4_t __vec, const int __lane)
+ {
+- return (uint32x4_t) {__a, __a, __a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vdupq_n_u64 (uint64_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_s64 (const int64_t *__src, int64x2_t __vec, const int __lane)
+ {
+- return (uint64x2_t) {__a, __a};
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-/* vdup_lane */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vdup_lane_f32 (float32x2_t __a, const int __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_u8 (const uint8_t *__src, uint8x16_t __vec, const int __lane)
+ {
+- return __aarch64_vdup_lane_f32 (__a, __b);
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vdup_lane_f64 (float64x1_t __a, const int __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_u16 (const uint16_t *__src, uint16x8_t __vec, const int __lane)
+ {
+- return __aarch64_vdup_lane_f64 (__a, __b);
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vdup_lane_p8 (poly8x8_t __a, const int __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_u32 (const uint32_t *__src, uint32x4_t __vec, const int __lane)
+ {
+- return __aarch64_vdup_lane_p8 (__a, __b);
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vdup_lane_p16 (poly16x4_t __a, const int __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld1q_lane_u64 (const uint64_t *__src, uint64x2_t __vec, const int __lane)
+ {
+- return __aarch64_vdup_lane_p16 (__a, __b);
++ return __aarch64_vset_lane_any (*__src, __vec, __lane);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vdup_lane_s8 (int8x8_t __a, const int __b)
++/* vldn */
++
++__extension__ extern __inline int64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_s64 (const int64_t * __a)
+ {
+- return __aarch64_vdup_lane_s8 (__a, __b);
++ int64x1x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
++ ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vdup_lane_s16 (int16x4_t __a, const int __b)
++__extension__ extern __inline uint64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_u64 (const uint64_t * __a)
+ {
+- return __aarch64_vdup_lane_s16 (__a, __b);
++ uint64x1x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
++ ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vdup_lane_s32 (int32x2_t __a, const int __b)
++__extension__ extern __inline float64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_f64 (const float64_t * __a)
+ {
+- return __aarch64_vdup_lane_s32 (__a, __b);
++ float64x1x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2df ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 0)};
++ ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 1)};
++ return ret;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vdup_lane_s64 (int64x1_t __a, const int __b)
++__extension__ extern __inline int8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_s8 (const int8_t * __a)
+ {
+- return __aarch64_vdup_lane_s64 (__a, __b);
++ int8x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
++ ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vdup_lane_u8 (uint8x8_t __a, const int __b)
++__extension__ extern __inline poly8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_p8 (const poly8_t * __a)
+ {
+- return __aarch64_vdup_lane_u8 (__a, __b);
++ poly8x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
++ ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vdup_lane_u16 (uint16x4_t __a, const int __b)
++__extension__ extern __inline poly64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_p64 (const poly64_t * __a)
+ {
+- return __aarch64_vdup_lane_u16 (__a, __b);
++ poly64x1x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregoidi_pss (__o, 0);
++ ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregoidi_pss (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vdup_lane_u32 (uint32x2_t __a, const int __b)
++__extension__ extern __inline int16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_s16 (const int16_t * __a)
+ {
+- return __aarch64_vdup_lane_u32 (__a, __b);
++ int16x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
++ ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vdup_lane_u64 (uint64x1_t __a, const int __b)
++__extension__ extern __inline poly16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_p16 (const poly16_t * __a)
+ {
+- return __aarch64_vdup_lane_u64 (__a, __b);
++ poly16x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
++ ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
++ return ret;
+ }
+
+-/* vdup_laneq */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vdup_laneq_f32 (float32x4_t __a, const int __b)
++__extension__ extern __inline int32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_s32 (const int32_t * __a)
+ {
+- return __aarch64_vdup_laneq_f32 (__a, __b);
++ int32x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
++ ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vdup_laneq_f64 (float64x2_t __a, const int __b)
++__extension__ extern __inline uint8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_u8 (const uint8_t * __a)
+ {
+- return __aarch64_vdup_laneq_f64 (__a, __b);
++ uint8x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
++ ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vdup_laneq_p8 (poly8x16_t __a, const int __b)
++__extension__ extern __inline uint16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_u16 (const uint16_t * __a)
+ {
+- return __aarch64_vdup_laneq_p8 (__a, __b);
++ uint16x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
++ ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vdup_laneq_p16 (poly16x8_t __a, const int __b)
++__extension__ extern __inline uint32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_u32 (const uint32_t * __a)
+ {
+- return __aarch64_vdup_laneq_p16 (__a, __b);
++ uint32x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
++ ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vdup_laneq_s8 (int8x16_t __a, const int __b)
++__extension__ extern __inline float16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_f16 (const float16_t * __a)
+ {
+- return __aarch64_vdup_laneq_s8 (__a, __b);
++ float16x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v4hf (__a);
++ ret.val[0] = __builtin_aarch64_get_dregoiv4hf (__o, 0);
++ ret.val[1] = __builtin_aarch64_get_dregoiv4hf (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vdup_laneq_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline float32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_f32 (const float32_t * __a)
+ {
+- return __aarch64_vdup_laneq_s16 (__a, __b);
++ float32x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v2sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 0);
++ ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vdup_laneq_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline int8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_s8 (const int8_t * __a)
+ {
+- return __aarch64_vdup_laneq_s32 (__a, __b);
++ int8x16x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
++ ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vdup_laneq_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline poly8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_p8 (const poly8_t * __a)
+ {
+- return __aarch64_vdup_laneq_s64 (__a, __b);
++ poly8x16x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
++ ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vdup_laneq_u8 (uint8x16_t __a, const int __b)
++__extension__ extern __inline int16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_s16 (const int16_t * __a)
+ {
+- return __aarch64_vdup_laneq_u8 (__a, __b);
++ int16x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
++ ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vdup_laneq_u16 (uint16x8_t __a, const int __b)
++__extension__ extern __inline poly16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_p16 (const poly16_t * __a)
+ {
+- return __aarch64_vdup_laneq_u16 (__a, __b);
++ poly16x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
++ ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vdup_laneq_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline poly64x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_p64 (const poly64_t * __a)
+ {
+- return __aarch64_vdup_laneq_u32 (__a, __b);
++ poly64x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di_pss (__o, 0);
++ ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di_pss (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vdup_laneq_u64 (uint64x2_t __a, const int __b)
++__extension__ extern __inline int32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_s32 (const int32_t * __a)
+ {
+- return __aarch64_vdup_laneq_u64 (__a, __b);
++ int32x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
++ ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
++ return ret;
+ }
+
+-/* vdupq_lane */
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vdupq_lane_f32 (float32x2_t __a, const int __b)
++__extension__ extern __inline int64x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_s64 (const int64_t * __a)
+ {
+- return __aarch64_vdupq_lane_f32 (__a, __b);
++ int64x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
++ ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vdupq_lane_f64 (float64x1_t __a, const int __b)
++__extension__ extern __inline uint8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_u8 (const uint8_t * __a)
+ {
+- return __aarch64_vdupq_lane_f64 (__a, __b);
++ uint8x16x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
++ ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vdupq_lane_p8 (poly8x8_t __a, const int __b)
++__extension__ extern __inline uint16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_u16 (const uint16_t * __a)
+ {
+- return __aarch64_vdupq_lane_p8 (__a, __b);
++ uint16x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
++ ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vdupq_lane_p16 (poly16x4_t __a, const int __b)
++__extension__ extern __inline uint32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_u32 (const uint32_t * __a)
+ {
+- return __aarch64_vdupq_lane_p16 (__a, __b);
++ uint32x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
++ ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vdupq_lane_s8 (int8x8_t __a, const int __b)
++__extension__ extern __inline uint64x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_u64 (const uint64_t * __a)
+ {
+- return __aarch64_vdupq_lane_s8 (__a, __b);
++ uint64x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
++ ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vdupq_lane_s16 (int16x4_t __a, const int __b)
++__extension__ extern __inline float16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_f16 (const float16_t * __a)
+ {
+- return __aarch64_vdupq_lane_s16 (__a, __b);
++ float16x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v8hf (__a);
++ ret.val[0] = __builtin_aarch64_get_qregoiv8hf (__o, 0);
++ ret.val[1] = __builtin_aarch64_get_qregoiv8hf (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vdupq_lane_s32 (int32x2_t __a, const int __b)
++__extension__ extern __inline float32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_f32 (const float32_t * __a)
+ {
+- return __aarch64_vdupq_lane_s32 (__a, __b);
++ float32x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v4sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 0);
++ ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vdupq_lane_s64 (int64x1_t __a, const int __b)
++__extension__ extern __inline float64x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_f64 (const float64_t * __a)
+ {
+- return __aarch64_vdupq_lane_s64 (__a, __b);
++ float64x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2v2df ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 0);
++ ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vdupq_lane_u8 (uint8x8_t __a, const int __b)
++__extension__ extern __inline int64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_s64 (const int64_t * __a)
+ {
+- return __aarch64_vdupq_lane_u8 (__a, __b);
++ int64x1x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
++ ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
++ ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vdupq_lane_u16 (uint16x4_t __a, const int __b)
++__extension__ extern __inline uint64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_u64 (const uint64_t * __a)
+ {
+- return __aarch64_vdupq_lane_u16 (__a, __b);
++ uint64x1x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
++ ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
++ ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vdupq_lane_u32 (uint32x2_t __a, const int __b)
++__extension__ extern __inline float64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_f64 (const float64_t * __a)
+ {
+- return __aarch64_vdupq_lane_u32 (__a, __b);
++ float64x1x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3df ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 0)};
++ ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 1)};
++ ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 2)};
++ return ret;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vdupq_lane_u64 (uint64x1_t __a, const int __b)
++__extension__ extern __inline int8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_s8 (const int8_t * __a)
+ {
+- return __aarch64_vdupq_lane_u64 (__a, __b);
++ int8x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
++ ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
++ ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
++ return ret;
+ }
+
+-/* vdupq_laneq */
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vdupq_laneq_f32 (float32x4_t __a, const int __b)
++__extension__ extern __inline poly8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_p8 (const poly8_t * __a)
+ {
+- return __aarch64_vdupq_laneq_f32 (__a, __b);
++ poly8x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
++ ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
++ ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vdupq_laneq_f64 (float64x2_t __a, const int __b)
++__extension__ extern __inline int16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_s16 (const int16_t * __a)
+ {
+- return __aarch64_vdupq_laneq_f64 (__a, __b);
++ int16x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
++ ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
++ ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vdupq_laneq_p8 (poly8x16_t __a, const int __b)
++__extension__ extern __inline poly16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_p16 (const poly16_t * __a)
+ {
+- return __aarch64_vdupq_laneq_p8 (__a, __b);
++ poly16x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
++ ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
++ ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vdupq_laneq_p16 (poly16x8_t __a, const int __b)
++__extension__ extern __inline int32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_s32 (const int32_t * __a)
+ {
+- return __aarch64_vdupq_laneq_p16 (__a, __b);
++ int32x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
++ ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
++ ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vdupq_laneq_s8 (int8x16_t __a, const int __b)
++__extension__ extern __inline uint8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_u8 (const uint8_t * __a)
+ {
+- return __aarch64_vdupq_laneq_s8 (__a, __b);
++ uint8x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
++ ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
++ ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vdupq_laneq_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline uint16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_u16 (const uint16_t * __a)
+ {
+- return __aarch64_vdupq_laneq_s16 (__a, __b);
++ uint16x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
++ ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
++ ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vdupq_laneq_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline uint32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_u32 (const uint32_t * __a)
+ {
+- return __aarch64_vdupq_laneq_s32 (__a, __b);
++ uint32x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
++ ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
++ ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vdupq_laneq_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline float16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_f16 (const float16_t * __a)
+ {
+- return __aarch64_vdupq_laneq_s64 (__a, __b);
++ float16x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v4hf (__a);
++ ret.val[0] = __builtin_aarch64_get_dregciv4hf (__o, 0);
++ ret.val[1] = __builtin_aarch64_get_dregciv4hf (__o, 1);
++ ret.val[2] = __builtin_aarch64_get_dregciv4hf (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vdupq_laneq_u8 (uint8x16_t __a, const int __b)
++__extension__ extern __inline float32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_f32 (const float32_t * __a)
+ {
+- return __aarch64_vdupq_laneq_u8 (__a, __b);
++ float32x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v2sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 0);
++ ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 1);
++ ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vdupq_laneq_u16 (uint16x8_t __a, const int __b)
++__extension__ extern __inline poly64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_p64 (const poly64_t * __a)
+ {
+- return __aarch64_vdupq_laneq_u16 (__a, __b);
++ poly64x1x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 0);
++ ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 1);
++ ret.val[2] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vdupq_laneq_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline int8x16x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_s8 (const int8_t * __a)
+ {
+- return __aarch64_vdupq_laneq_u32 (__a, __b);
++ int8x16x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
++ ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
++ ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vdupq_laneq_u64 (uint64x2_t __a, const int __b)
++__extension__ extern __inline poly8x16x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_p8 (const poly8_t * __a)
+ {
+- return __aarch64_vdupq_laneq_u64 (__a, __b);
++ poly8x16x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
++ ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
++ ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
++ return ret;
+ }
+
+-/* vdupb_lane */
+-__extension__ static __inline poly8_t __attribute__ ((__always_inline__))
+-vdupb_lane_p8 (poly8x8_t __a, const int __b)
++__extension__ extern __inline int16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_s16 (const int16_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ int16x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
++ ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
++ ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vdupb_lane_s8 (int8x8_t __a, const int __b)
++__extension__ extern __inline poly16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_p16 (const poly16_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ poly16x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
++ ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
++ ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vdupb_lane_u8 (uint8x8_t __a, const int __b)
++__extension__ extern __inline int32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_s32 (const int32_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ int32x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
++ ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
++ ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
++ return ret;
+ }
+
+-/* vduph_lane */
+-__extension__ static __inline poly16_t __attribute__ ((__always_inline__))
+-vduph_lane_p16 (poly16x4_t __a, const int __b)
++__extension__ extern __inline int64x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_s64 (const int64_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ int64x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
++ ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
++ ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vduph_lane_s16 (int16x4_t __a, const int __b)
++__extension__ extern __inline uint8x16x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_u8 (const uint8_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ uint8x16x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
++ ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
++ ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vduph_lane_u16 (uint16x4_t __a, const int __b)
++__extension__ extern __inline uint16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_u16 (const uint16_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ uint16x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
++ ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
++ ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
++ return ret;
+ }
+
+-/* vdups_lane */
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vdups_lane_f32 (float32x2_t __a, const int __b)
++__extension__ extern __inline uint32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_u32 (const uint32_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ uint32x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
++ ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
++ ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vdups_lane_s32 (int32x2_t __a, const int __b)
++__extension__ extern __inline uint64x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_u64 (const uint64_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ uint64x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
++ ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
++ ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vdups_lane_u32 (uint32x2_t __a, const int __b)
++__extension__ extern __inline float16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_f16 (const float16_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ float16x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v8hf (__a);
++ ret.val[0] = __builtin_aarch64_get_qregciv8hf (__o, 0);
++ ret.val[1] = __builtin_aarch64_get_qregciv8hf (__o, 1);
++ ret.val[2] = __builtin_aarch64_get_qregciv8hf (__o, 2);
++ return ret;
+ }
+
+-/* vdupd_lane */
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vdupd_lane_f64 (float64x1_t __a, const int __b)
++__extension__ extern __inline float32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_f32 (const float32_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __b);
+- return __a[0];
++ float32x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v4sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 0);
++ ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 1);
++ ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vdupd_lane_s64 (int64x1_t __a, const int __b)
++__extension__ extern __inline float64x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_f64 (const float64_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __b);
+- return __a[0];
++ float64x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v2df ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 0);
++ ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 1);
++ ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vdupd_lane_u64 (uint64x1_t __a, const int __b)
++__extension__ extern __inline poly64x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_p64 (const poly64_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __b);
+- return __a[0];
++ poly64x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 0);
++ ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 1);
++ ret.val[2] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 2);
++ return ret;
+ }
+
+-/* vdupb_laneq */
+-__extension__ static __inline poly8_t __attribute__ ((__always_inline__))
+-vdupb_laneq_p8 (poly8x16_t __a, const int __b)
++__extension__ extern __inline int64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_s64 (const int64_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ int64x1x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
++ ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
++ ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
++ ret.val[3] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vdupb_laneq_s8 (int8x16_t __a, const int __attribute__ ((unused)) __b)
++__extension__ extern __inline uint64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_u64 (const uint64_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ uint64x1x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
++ ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
++ ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
++ ret.val[3] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vdupb_laneq_u8 (uint8x16_t __a, const int __b)
++__extension__ extern __inline float64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_f64 (const float64_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ float64x1x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4df ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 0)};
++ ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 1)};
++ ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 2)};
++ ret.val[3] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 3)};
++ return ret;
+ }
+
+-/* vduph_laneq */
+-__extension__ static __inline poly16_t __attribute__ ((__always_inline__))
+-vduph_laneq_p16 (poly16x8_t __a, const int __b)
++__extension__ extern __inline int8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_s8 (const int8_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ int8x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
++ ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
++ ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
++ ret.val[3] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vduph_laneq_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline poly8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_p8 (const poly8_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ poly8x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
++ ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
++ ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
++ ret.val[3] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vduph_laneq_u16 (uint16x8_t __a, const int __b)
++__extension__ extern __inline int16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_s16 (const int16_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ int16x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
++ ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
++ ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
++ ret.val[3] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
++ return ret;
+ }
+
+-/* vdups_laneq */
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vdups_laneq_f32 (float32x4_t __a, const int __b)
++__extension__ extern __inline poly16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_p16 (const poly16_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ poly16x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
++ ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
++ ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
++ ret.val[3] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vdups_laneq_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline int32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_s32 (const int32_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ int32x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
++ ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
++ ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
++ ret.val[3] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vdups_laneq_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline uint8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_u8 (const uint8_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ uint8x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
++ ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
++ ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
++ ret.val[3] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
++ return ret;
+ }
+
+-/* vdupd_laneq */
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vdupd_laneq_f64 (float64x2_t __a, const int __b)
++__extension__ extern __inline uint16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_u16 (const uint16_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ uint16x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
++ ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
++ ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
++ ret.val[3] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vdupd_laneq_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline uint32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_u32 (const uint32_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ uint32x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
++ ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
++ ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
++ ret.val[3] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vdupd_laneq_u64 (uint64x2_t __a, const int __b)
++__extension__ extern __inline float16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_f16 (const float16_t * __a)
+ {
+- return __aarch64_vget_lane_any (__a, __b);
++ float16x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v4hf (__a);
++ ret.val[0] = __builtin_aarch64_get_dregxiv4hf (__o, 0);
++ ret.val[1] = __builtin_aarch64_get_dregxiv4hf (__o, 1);
++ ret.val[2] = __builtin_aarch64_get_dregxiv4hf (__o, 2);
++ ret.val[3] = __builtin_aarch64_get_dregxiv4hf (__o, 3);
++ return ret;
+ }
+
+-/* vext */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vext_f32 (float32x2_t __a, float32x2_t __b, __const int __c)
++__extension__ extern __inline float32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_f32 (const float32_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
+-#endif
++ float32x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v2sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 0);
++ ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 1);
++ ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 2);
++ ret.val[3] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vext_f64 (float64x1_t __a, float64x1_t __b, __const int __c)
++__extension__ extern __inline poly64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_p64 (const poly64_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+- /* The only possible index to the assembler instruction returns element 0. */
+- return __a;
++ poly64x1x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 0);
++ ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 1);
++ ret.val[2] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 2);
++ ret.val[3] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 3);
++ return ret;
+ }
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vext_p8 (poly8x8_t __a, poly8x8_t __b, __const int __c)
++
++__extension__ extern __inline int8x16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_s8 (const int8_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint8x8_t)
+- {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+-#endif
++ int8x16x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
++ ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
++ ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
++ ret.val[3] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vext_p16 (poly16x4_t __a, poly16x4_t __b, __const int __c)
++__extension__ extern __inline poly8x16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_p8 (const poly8_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a,
+- (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
+-#endif
++ poly8x16x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
++ ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
++ ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
++ ret.val[3] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vext_s8 (int8x8_t __a, int8x8_t __b, __const int __c)
++__extension__ extern __inline int16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_s16 (const int16_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint8x8_t)
+- {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+-#endif
++ int16x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
++ ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
++ ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
++ ret.val[3] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vext_s16 (int16x4_t __a, int16x4_t __b, __const int __c)
++__extension__ extern __inline poly16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_p16 (const poly16_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a,
+- (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
+-#endif
++ poly16x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
++ ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
++ ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
++ ret.val[3] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vext_s32 (int32x2_t __a, int32x2_t __b, __const int __c)
++__extension__ extern __inline int32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_s32 (const int32_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
+-#endif
++ int32x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
++ ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
++ ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
++ ret.val[3] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vext_s64 (int64x1_t __a, int64x1_t __b, __const int __c)
++__extension__ extern __inline int64x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_s64 (const int64_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+- /* The only possible index to the assembler instruction returns element 0. */
+- return __a;
++ int64x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
++ ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
++ ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
++ ret.val[3] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vext_u8 (uint8x8_t __a, uint8x8_t __b, __const int __c)
++__extension__ extern __inline uint8x16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_u8 (const uint8_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint8x8_t)
+- {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+-#endif
++ uint8x16x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
++ ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
++ ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
++ ret.val[3] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vext_u16 (uint16x4_t __a, uint16x4_t __b, __const int __c)
++__extension__ extern __inline uint16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_u16 (const uint16_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a,
+- (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
+-#endif
++ uint16x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
++ ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
++ ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
++ ret.val[3] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vext_u32 (uint32x2_t __a, uint32x2_t __b, __const int __c)
++__extension__ extern __inline uint32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_u32 (const uint32_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
+-#endif
++ uint32x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
++ ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
++ ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
++ ret.val[3] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vext_u64 (uint64x1_t __a, uint64x1_t __b, __const int __c)
++__extension__ extern __inline uint64x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_u64 (const uint64_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+- /* The only possible index to the assembler instruction returns element 0. */
+- return __a;
++ uint64x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
++ ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
++ ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
++ ret.val[3] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vextq_f32 (float32x4_t __a, float32x4_t __b, __const int __c)
++__extension__ extern __inline float16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_f16 (const float16_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a,
+- (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
+-#endif
++ float16x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v8hf (__a);
++ ret.val[0] = __builtin_aarch64_get_qregxiv8hf (__o, 0);
++ ret.val[1] = __builtin_aarch64_get_qregxiv8hf (__o, 1);
++ ret.val[2] = __builtin_aarch64_get_qregxiv8hf (__o, 2);
++ ret.val[3] = __builtin_aarch64_get_qregxiv8hf (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vextq_f64 (float64x2_t __a, float64x2_t __b, __const int __c)
++__extension__ extern __inline float32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_f32 (const float32_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
+-#endif
++ float32x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v4sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 0);
++ ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 1);
++ ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 2);
++ ret.val[3] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vextq_p8 (poly8x16_t __a, poly8x16_t __b, __const int __c)
++__extension__ extern __inline float64x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_f64 (const float64_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint8x16_t)
+- {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
+- 24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
+- __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
+-#endif
++ float64x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v2df ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 0);
++ ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 1);
++ ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 2);
++ ret.val[3] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vextq_p16 (poly16x8_t __a, poly16x8_t __b, __const int __c)
++__extension__ extern __inline poly64x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_p64 (const poly64_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint16x8_t)
+- {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+-#endif
++ poly64x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 0);
++ ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 1);
++ ret.val[2] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 2);
++ ret.val[3] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vextq_s8 (int8x16_t __a, int8x16_t __b, __const int __c)
++/* vldn_dup */
++
++__extension__ extern __inline int8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_s8 (const int8_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint8x16_t)
+- {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
+- 24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
+- __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
+-#endif
++ int8x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
++ ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vextq_s16 (int16x8_t __a, int16x8_t __b, __const int __c)
++__extension__ extern __inline int16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_s16 (const int16_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint16x8_t)
+- {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+-#endif
++ int16x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
++ ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vextq_s32 (int32x4_t __a, int32x4_t __b, __const int __c)
++__extension__ extern __inline int32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_s32 (const int32_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a,
+- (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
+-#endif
++ int32x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
++ ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vextq_s64 (int64x2_t __a, int64x2_t __b, __const int __c)
++__extension__ extern __inline float16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_f16 (const float16_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
+-#endif
++ float16x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv4hf ((const __builtin_aarch64_simd_hf *) __a);
++ ret.val[0] = __builtin_aarch64_get_dregoiv4hf (__o, 0);
++ ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregoiv4hf (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vextq_u8 (uint8x16_t __a, uint8x16_t __b, __const int __c)
++__extension__ extern __inline float32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_f32 (const float32_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint8x16_t)
+- {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
+- 24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
+- __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
+-#endif
++ float32x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv2sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 0);
++ ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vextq_u16 (uint16x8_t __a, uint16x8_t __b, __const int __c)
++__extension__ extern __inline float64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_f64 (const float64_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint16x8_t)
+- {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+-#endif
++ float64x1x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rdf ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 0)};
++ ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 1)};
++ return ret;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vextq_u32 (uint32x4_t __a, uint32x4_t __b, __const int __c)
++__extension__ extern __inline uint8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_u8 (const uint8_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a,
+- (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
+-#endif
++ uint8x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
++ ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vextq_u64 (uint64x2_t __a, uint64x2_t __b, __const int __c)
++__extension__ extern __inline uint16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_u16 (const uint16_t * __a)
+ {
+- __AARCH64_LANE_CHECK (__a, __c);
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
+-#endif
++ uint16x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
++ ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
++ return ret;
+ }
+
+-/* vfma */
+-
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vfma_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
++__extension__ extern __inline uint32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_u32 (const uint32_t * __a)
+ {
+- return (float64x1_t) {__builtin_fma (__b[0], __c[0], __a[0])};
++ uint32x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
++ ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vfma_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
++__extension__ extern __inline poly8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_p8 (const poly8_t * __a)
+ {
+- return __builtin_aarch64_fmav2sf (__b, __c, __a);
++ poly8x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
++ ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vfmaq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
++__extension__ extern __inline poly16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_p16 (const poly16_t * __a)
+ {
+- return __builtin_aarch64_fmav4sf (__b, __c, __a);
++ poly16x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
++ ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vfmaq_f64 (float64x2_t __a, float64x2_t __b, float64x2_t __c)
++__extension__ extern __inline poly64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_p64 (const poly64_t * __a)
+ {
+- return __builtin_aarch64_fmav2df (__b, __c, __a);
++ poly64x1x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregoidi_pss (__o, 0);
++ ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregoidi_pss (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vfma_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
++
++__extension__ extern __inline int64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_s64 (const int64_t * __a)
+ {
+- return __builtin_aarch64_fmav2sf (__b, vdup_n_f32 (__c), __a);
++ int64x1x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rdi ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
++ ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vfmaq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
++__extension__ extern __inline uint64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2_dup_u64 (const uint64_t * __a)
+ {
+- return __builtin_aarch64_fmav4sf (__b, vdupq_n_f32 (__c), __a);
++ uint64x1x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rdi ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
++ ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vfmaq_n_f64 (float64x2_t __a, float64x2_t __b, float64_t __c)
++__extension__ extern __inline int8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_s8 (const int8_t * __a)
+ {
+- return __builtin_aarch64_fmav2df (__b, vdupq_n_f64 (__c), __a);
++ int8x16x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
++ ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
++ return ret;
+ }
+
+-/* vfma_lane */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vfma_lane_f32 (float32x2_t __a, float32x2_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline poly8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_p8 (const poly8_t * __a)
+ {
+- return __builtin_aarch64_fmav2sf (__b,
+- __aarch64_vdup_lane_f32 (__c, __lane),
+- __a);
++ poly8x16x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
++ ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vfma_lane_f64 (float64x1_t __a, float64x1_t __b,
+- float64x1_t __c, const int __lane)
++__extension__ extern __inline int16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_s16 (const int16_t * __a)
+ {
+- return (float64x1_t) {__builtin_fma (__b[0], __c[0], __a[0])};
++ int16x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
++ ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vfmad_lane_f64 (float64_t __a, float64_t __b,
+- float64x1_t __c, const int __lane)
++__extension__ extern __inline poly16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_p16 (const poly16_t * __a)
+ {
+- return __builtin_fma (__b, __c[0], __a);
++ poly16x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
++ ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vfmas_lane_f32 (float32_t __a, float32_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline int32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_s32 (const int32_t * __a)
+ {
+- return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
++ int32x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
++ ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
++ return ret;
+ }
+
+-/* vfma_laneq */
++__extension__ extern __inline int64x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_s64 (const int64_t * __a)
++{
++ int64x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
++ ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
++ return ret;
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vfma_laneq_f32 (float32x2_t __a, float32x2_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline uint8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_u8 (const uint8_t * __a)
+ {
+- return __builtin_aarch64_fmav2sf (__b,
+- __aarch64_vdup_laneq_f32 (__c, __lane),
+- __a);
++ uint8x16x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
++ ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vfma_laneq_f64 (float64x1_t __a, float64x1_t __b,
+- float64x2_t __c, const int __lane)
++__extension__ extern __inline uint16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_u16 (const uint16_t * __a)
+ {
+- float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
+- return (float64x1_t) {__builtin_fma (__b[0], __c0, __a[0])};
++ uint16x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
++ ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vfmad_laneq_f64 (float64_t __a, float64_t __b,
+- float64x2_t __c, const int __lane)
++__extension__ extern __inline uint32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_u32 (const uint32_t * __a)
+ {
+- return __builtin_fma (__b, __aarch64_vget_lane_any (__c, __lane), __a);
++ uint32x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
++ ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vfmas_laneq_f32 (float32_t __a, float32_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline uint64x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_u64 (const uint64_t * __a)
+ {
+- return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
++ uint64x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
++ ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
++ return ret;
+ }
+
+-/* vfmaq_lane */
+-
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vfmaq_lane_f32 (float32x4_t __a, float32x4_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline float16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_f16 (const float16_t * __a)
+ {
+- return __builtin_aarch64_fmav4sf (__b,
+- __aarch64_vdupq_lane_f32 (__c, __lane),
+- __a);
++ float16x8x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv8hf ((const __builtin_aarch64_simd_hf *) __a);
++ ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregoiv8hf (__o, 0);
++ ret.val[1] = __builtin_aarch64_get_qregoiv8hf (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vfmaq_lane_f64 (float64x2_t __a, float64x2_t __b,
+- float64x1_t __c, const int __lane)
++__extension__ extern __inline float32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_f32 (const float32_t * __a)
+ {
+- return __builtin_aarch64_fmav2df (__b, vdupq_n_f64 (__c[0]), __a);
++ float32x4x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv4sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 0);
++ ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 1);
++ return ret;
+ }
+
+-/* vfmaq_laneq */
+-
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vfmaq_laneq_f32 (float32x4_t __a, float32x4_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline float64x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_f64 (const float64_t * __a)
+ {
+- return __builtin_aarch64_fmav4sf (__b,
+- __aarch64_vdupq_laneq_f32 (__c, __lane),
+- __a);
++ float64x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv2df ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 0);
++ ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 1);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vfmaq_laneq_f64 (float64x2_t __a, float64x2_t __b,
+- float64x2_t __c, const int __lane)
++__extension__ extern __inline poly64x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld2q_dup_p64 (const poly64_t * __a)
+ {
+- return __builtin_aarch64_fmav2df (__b,
+- __aarch64_vdupq_laneq_f64 (__c, __lane),
+- __a);
++ poly64x2x2_t ret;
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di_pss (__o, 0);
++ ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di_pss (__o, 1);
++ return ret;
+ }
+
+-/* vfms */
+-
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vfms_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
++__extension__ extern __inline int64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_s64 (const int64_t * __a)
+ {
+- return (float64x1_t) {__builtin_fma (-__b[0], __c[0], __a[0])};
++ int64x1x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rdi ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
++ ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
++ ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vfms_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
++__extension__ extern __inline uint64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_u64 (const uint64_t * __a)
+ {
+- return __builtin_aarch64_fmav2sf (-__b, __c, __a);
++ uint64x1x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rdi ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
++ ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
++ ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vfmsq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
++__extension__ extern __inline float64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_f64 (const float64_t * __a)
+ {
+- return __builtin_aarch64_fmav4sf (-__b, __c, __a);
++ float64x1x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rdf ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 0)};
++ ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 1)};
++ ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 2)};
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vfmsq_f64 (float64x2_t __a, float64x2_t __b, float64x2_t __c)
++__extension__ extern __inline int8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_s8 (const int8_t * __a)
+ {
+- return __builtin_aarch64_fmav2df (-__b, __c, __a);
++ int8x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
++ ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
++ ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
++ return ret;
+ }
+
+-
+-/* vfms_lane */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vfms_lane_f32 (float32x2_t __a, float32x2_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline poly8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_p8 (const poly8_t * __a)
+ {
+- return __builtin_aarch64_fmav2sf (-__b,
+- __aarch64_vdup_lane_f32 (__c, __lane),
+- __a);
++ poly8x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
++ ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
++ ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vfms_lane_f64 (float64x1_t __a, float64x1_t __b,
+- float64x1_t __c, const int __lane)
++__extension__ extern __inline int16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_s16 (const int16_t * __a)
+ {
+- return (float64x1_t) {__builtin_fma (-__b[0], __c[0], __a[0])};
++ int16x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
++ ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
++ ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vfmsd_lane_f64 (float64_t __a, float64_t __b,
+- float64x1_t __c, const int __lane)
++__extension__ extern __inline poly16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_p16 (const poly16_t * __a)
+ {
+- return __builtin_fma (-__b, __c[0], __a);
++ poly16x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
++ ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
++ ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vfmss_lane_f32 (float32_t __a, float32_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline int32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_s32 (const int32_t * __a)
+ {
+- return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
++ int32x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
++ ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
++ ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
++ return ret;
+ }
+
+-/* vfms_laneq */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vfms_laneq_f32 (float32x2_t __a, float32x2_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline uint8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_u8 (const uint8_t * __a)
+ {
+- return __builtin_aarch64_fmav2sf (-__b,
+- __aarch64_vdup_laneq_f32 (__c, __lane),
+- __a);
++ uint8x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
++ ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
++ ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vfms_laneq_f64 (float64x1_t __a, float64x1_t __b,
+- float64x2_t __c, const int __lane)
++__extension__ extern __inline uint16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_u16 (const uint16_t * __a)
+ {
+- float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
+- return (float64x1_t) {__builtin_fma (-__b[0], __c0, __a[0])};
++ uint16x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
++ ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
++ ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vfmsd_laneq_f64 (float64_t __a, float64_t __b,
+- float64x2_t __c, const int __lane)
++__extension__ extern __inline uint32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_u32 (const uint32_t * __a)
+ {
+- return __builtin_fma (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
++ uint32x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
++ ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
++ ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vfmss_laneq_f32 (float32_t __a, float32_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline float16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_f16 (const float16_t * __a)
+ {
+- return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
++ float16x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv4hf ((const __builtin_aarch64_simd_hf *) __a);
++ ret.val[0] = (float16x4_t) __builtin_aarch64_get_dregciv4hf (__o, 0);
++ ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregciv4hf (__o, 1);
++ ret.val[2] = (float16x4_t) __builtin_aarch64_get_dregciv4hf (__o, 2);
++ return ret;
+ }
+
+-/* vfmsq_lane */
+-
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vfmsq_lane_f32 (float32x4_t __a, float32x4_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline float32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_f32 (const float32_t * __a)
+ {
+- return __builtin_aarch64_fmav4sf (-__b,
+- __aarch64_vdupq_lane_f32 (__c, __lane),
+- __a);
++ float32x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv2sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 0);
++ ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 1);
++ ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vfmsq_lane_f64 (float64x2_t __a, float64x2_t __b,
+- float64x1_t __c, const int __lane)
++__extension__ extern __inline poly64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3_dup_p64 (const poly64_t * __a)
+ {
+- return __builtin_aarch64_fmav2df (-__b, vdupq_n_f64 (__c[0]), __a);
++ poly64x1x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 0);
++ ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 1);
++ ret.val[2] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 2);
++ return ret;
+ }
+
+-/* vfmsq_laneq */
+-
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vfmsq_laneq_f32 (float32x4_t __a, float32x4_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline int8x16x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_s8 (const int8_t * __a)
+ {
+- return __builtin_aarch64_fmav4sf (-__b,
+- __aarch64_vdupq_laneq_f32 (__c, __lane),
+- __a);
++ int8x16x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
++ ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
++ ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vfmsq_laneq_f64 (float64x2_t __a, float64x2_t __b,
+- float64x2_t __c, const int __lane)
++__extension__ extern __inline poly8x16x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_p8 (const poly8_t * __a)
+ {
+- return __builtin_aarch64_fmav2df (-__b,
+- __aarch64_vdupq_laneq_f64 (__c, __lane),
+- __a);
++ poly8x16x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
++ ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
++ ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
++ return ret;
+ }
+
+-/* vld1 */
++__extension__ extern __inline int16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_s16 (const int16_t * __a)
++{
++ int16x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
++ ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
++ ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
++ return ret;
++}
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
+-vld1_f16 (const float16_t *__a)
++__extension__ extern __inline poly16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_p16 (const poly16_t * __a)
+ {
+- return __builtin_aarch64_ld1v4hf (__a);
++ poly16x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
++ ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
++ ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vld1_f32 (const float32_t *a)
++__extension__ extern __inline int32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_s32 (const int32_t * __a)
+ {
+- return __builtin_aarch64_ld1v2sf ((const __builtin_aarch64_simd_sf *) a);
++ int32x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
++ ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
++ ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vld1_f64 (const float64_t *a)
++__extension__ extern __inline int64x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_s64 (const int64_t * __a)
+ {
+- return (float64x1_t) {*a};
++ int64x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
++ ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
++ ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vld1_p8 (const poly8_t *a)
++__extension__ extern __inline uint8x16x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_u8 (const uint8_t * __a)
+ {
+- return (poly8x8_t)
+- __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
++ uint8x16x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
++ ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
++ ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vld1_p16 (const poly16_t *a)
++__extension__ extern __inline uint16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_u16 (const uint16_t * __a)
+ {
+- return (poly16x4_t)
+- __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
++ uint16x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
++ ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
++ ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vld1_s8 (const int8_t *a)
++__extension__ extern __inline uint32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_u32 (const uint32_t * __a)
+ {
+- return __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
++ uint32x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
++ ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
++ ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vld1_s16 (const int16_t *a)
++__extension__ extern __inline uint64x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_u64 (const uint64_t * __a)
+ {
+- return __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
++ uint64x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
++ ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
++ ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vld1_s32 (const int32_t *a)
++__extension__ extern __inline float16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_f16 (const float16_t * __a)
+ {
+- return __builtin_aarch64_ld1v2si ((const __builtin_aarch64_simd_si *) a);
++ float16x8x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv8hf ((const __builtin_aarch64_simd_hf *) __a);
++ ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregciv8hf (__o, 0);
++ ret.val[1] = (float16x8_t) __builtin_aarch64_get_qregciv8hf (__o, 1);
++ ret.val[2] = (float16x8_t) __builtin_aarch64_get_qregciv8hf (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vld1_s64 (const int64_t *a)
++__extension__ extern __inline float32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_f32 (const float32_t * __a)
+ {
+- return (int64x1_t) {*a};
++ float32x4x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv4sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 0);
++ ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 1);
++ ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vld1_u8 (const uint8_t *a)
++__extension__ extern __inline float64x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_f64 (const float64_t * __a)
+ {
+- return (uint8x8_t)
+- __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
++ float64x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv2df ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 0);
++ ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 1);
++ ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vld1_u16 (const uint16_t *a)
++__extension__ extern __inline poly64x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld3q_dup_p64 (const poly64_t * __a)
+ {
+- return (uint16x4_t)
+- __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
++ poly64x2x3_t ret;
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 0);
++ ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 1);
++ ret.val[2] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 2);
++ return ret;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vld1_u32 (const uint32_t *a)
++__extension__ extern __inline int64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_s64 (const int64_t * __a)
+ {
+- return (uint32x2_t)
+- __builtin_aarch64_ld1v2si ((const __builtin_aarch64_simd_si *) a);
++ int64x1x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rdi ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
++ ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
++ ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
++ ret.val[3] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vld1_u64 (const uint64_t *a)
++__extension__ extern __inline uint64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_u64 (const uint64_t * __a)
+ {
+- return (uint64x1_t) {*a};
++ uint64x1x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rdi ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
++ ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
++ ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
++ ret.val[3] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
++ return ret;
+ }
+
+-/* vld1q */
++__extension__ extern __inline float64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_f64 (const float64_t * __a)
++{
++ float64x1x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rdf ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 0)};
++ ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 1)};
++ ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 2)};
++ ret.val[3] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 3)};
++ return ret;
++}
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
+-vld1q_f16 (const float16_t *__a)
++__extension__ extern __inline int8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_s8 (const int8_t * __a)
+ {
+- return __builtin_aarch64_ld1v8hf (__a);
++ int8x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
++ ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
++ ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
++ ret.val[3] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vld1q_f32 (const float32_t *a)
++__extension__ extern __inline poly8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_p8 (const poly8_t * __a)
+ {
+- return __builtin_aarch64_ld1v4sf ((const __builtin_aarch64_simd_sf *) a);
++ poly8x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
++ ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
++ ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
++ ret.val[3] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vld1q_f64 (const float64_t *a)
++__extension__ extern __inline int16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_s16 (const int16_t * __a)
+ {
+- return __builtin_aarch64_ld1v2df ((const __builtin_aarch64_simd_df *) a);
++ int16x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
++ ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
++ ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
++ ret.val[3] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vld1q_p8 (const poly8_t *a)
++__extension__ extern __inline poly16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_p16 (const poly16_t * __a)
+ {
+- return (poly8x16_t)
+- __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
++ poly16x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
++ ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
++ ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
++ ret.val[3] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vld1q_p16 (const poly16_t *a)
++__extension__ extern __inline int32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_s32 (const int32_t * __a)
+ {
+- return (poly16x8_t)
+- __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
++ int32x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
++ ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
++ ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
++ ret.val[3] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vld1q_s8 (const int8_t *a)
++__extension__ extern __inline uint8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_u8 (const uint8_t * __a)
+ {
+- return __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
++ uint8x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
++ ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
++ ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
++ ret.val[3] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vld1q_s16 (const int16_t *a)
++__extension__ extern __inline uint16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_u16 (const uint16_t * __a)
+ {
+- return __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
++ uint16x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
++ ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
++ ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
++ ret.val[3] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vld1q_s32 (const int32_t *a)
++__extension__ extern __inline uint32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_u32 (const uint32_t * __a)
+ {
+- return __builtin_aarch64_ld1v4si ((const __builtin_aarch64_simd_si *) a);
++ uint32x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv2si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
++ ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
++ ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
++ ret.val[3] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vld1q_s64 (const int64_t *a)
++__extension__ extern __inline float16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_f16 (const float16_t * __a)
+ {
+- return __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
++ float16x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv4hf ((const __builtin_aarch64_simd_hf *) __a);
++ ret.val[0] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 0);
++ ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 1);
++ ret.val[2] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 2);
++ ret.val[3] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vld1q_u8 (const uint8_t *a)
++__extension__ extern __inline float32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_f32 (const float32_t * __a)
+ {
+- return (uint8x16_t)
+- __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
++ float32x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv2sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 0);
++ ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 1);
++ ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 2);
++ ret.val[3] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vld1q_u16 (const uint16_t *a)
++__extension__ extern __inline poly64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4_dup_p64 (const poly64_t * __a)
+ {
+- return (uint16x8_t)
+- __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
++ poly64x1x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 0);
++ ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 1);
++ ret.val[2] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 2);
++ ret.val[3] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vld1q_u32 (const uint32_t *a)
++__extension__ extern __inline int8x16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_s8 (const int8_t * __a)
+ {
+- return (uint32x4_t)
+- __builtin_aarch64_ld1v4si ((const __builtin_aarch64_simd_si *) a);
++ int8x16x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
++ ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
++ ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
++ ret.val[3] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vld1q_u64 (const uint64_t *a)
++__extension__ extern __inline poly8x16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_p8 (const poly8_t * __a)
+ {
+- return (uint64x2_t)
+- __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
++ poly8x16x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
++ ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
++ ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
++ ret.val[3] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
++ return ret;
+ }
+
+-/* vld1_dup */
+-
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
+-vld1_dup_f16 (const float16_t* __a)
++__extension__ extern __inline int16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_s16 (const int16_t * __a)
+ {
+- float16_t __f = *__a;
+- return (float16x4_t) { __f, __f, __f, __f };
++ int16x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
++ ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
++ ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
++ ret.val[3] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vld1_dup_f32 (const float32_t* __a)
++__extension__ extern __inline poly16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_p16 (const poly16_t * __a)
+ {
+- return vdup_n_f32 (*__a);
++ poly16x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
++ ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
++ ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
++ ret.val[3] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vld1_dup_f64 (const float64_t* __a)
++__extension__ extern __inline int32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_s32 (const int32_t * __a)
+ {
+- return vdup_n_f64 (*__a);
++ int32x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
++ ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
++ ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
++ ret.val[3] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vld1_dup_p8 (const poly8_t* __a)
++__extension__ extern __inline int64x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_s64 (const int64_t * __a)
+ {
+- return vdup_n_p8 (*__a);
++ int64x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
++ ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
++ ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
++ ret.val[3] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vld1_dup_p16 (const poly16_t* __a)
++__extension__ extern __inline uint8x16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_u8 (const uint8_t * __a)
+ {
+- return vdup_n_p16 (*__a);
++ uint8x16x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
++ ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
++ ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
++ ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
++ ret.val[3] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vld1_dup_s8 (const int8_t* __a)
++__extension__ extern __inline uint16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_u16 (const uint16_t * __a)
+ {
+- return vdup_n_s8 (*__a);
++ uint16x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
++ ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
++ ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
++ ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
++ ret.val[3] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vld1_dup_s16 (const int16_t* __a)
++__extension__ extern __inline uint32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_u32 (const uint32_t * __a)
+ {
+- return vdup_n_s16 (*__a);
++ uint32x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv4si ((const __builtin_aarch64_simd_si *) __a);
++ ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
++ ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
++ ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
++ ret.val[3] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vld1_dup_s32 (const int32_t* __a)
++__extension__ extern __inline uint64x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_u64 (const uint64_t * __a)
+ {
+- return vdup_n_s32 (*__a);
++ uint64x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
++ ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
++ ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
++ ret.val[3] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vld1_dup_s64 (const int64_t* __a)
++__extension__ extern __inline float16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_f16 (const float16_t * __a)
+ {
+- return vdup_n_s64 (*__a);
++ float16x8x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv8hf ((const __builtin_aarch64_simd_hf *) __a);
++ ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 0);
++ ret.val[1] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 1);
++ ret.val[2] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 2);
++ ret.val[3] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vld1_dup_u8 (const uint8_t* __a)
++__extension__ extern __inline float32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_f32 (const float32_t * __a)
+ {
+- return vdup_n_u8 (*__a);
++ float32x4x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv4sf ((const __builtin_aarch64_simd_sf *) __a);
++ ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 0);
++ ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 1);
++ ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 2);
++ ret.val[3] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vld1_dup_u16 (const uint16_t* __a)
++__extension__ extern __inline float64x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_f64 (const float64_t * __a)
+ {
+- return vdup_n_u16 (*__a);
++ float64x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv2df ((const __builtin_aarch64_simd_df *) __a);
++ ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 0);
++ ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 1);
++ ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 2);
++ ret.val[3] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vld1_dup_u32 (const uint32_t* __a)
++__extension__ extern __inline poly64x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vld4q_dup_p64 (const poly64_t * __a)
+ {
+- return vdup_n_u32 (*__a);
++ poly64x2x4_t ret;
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
++ ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 0);
++ ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 1);
++ ret.val[2] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 2);
++ ret.val[3] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 3);
++ return ret;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vld1_dup_u64 (const uint64_t* __a)
+-{
+- return vdup_n_u64 (*__a);
++/* vld2_lane */
++
++#define __LD2_LANE_FUNC(intype, vectype, largetype, ptrtype, mode, \
++ qmode, ptrmode, funcsuffix, signedtype) \
++__extension__ extern __inline intype \
++__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
++vld2_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
++{ \
++ __builtin_aarch64_simd_oi __o; \
++ largetype __temp; \
++ __temp.val[0] = \
++ vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0)); \
++ __temp.val[1] = \
++ vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0)); \
++ __o = __builtin_aarch64_set_qregoi##qmode (__o, \
++ (signedtype) __temp.val[0], \
++ 0); \
++ __o = __builtin_aarch64_set_qregoi##qmode (__o, \
++ (signedtype) __temp.val[1], \
++ 1); \
++ __o = __builtin_aarch64_ld2_lane##mode ( \
++ (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
++ __b.val[0] = (vectype) __builtin_aarch64_get_dregoidi (__o, 0); \
++ __b.val[1] = (vectype) __builtin_aarch64_get_dregoidi (__o, 1); \
++ return __b; \
+ }
+
+-/* vld1q_dup */
++__LD2_LANE_FUNC (float16x4x2_t, float16x4_t, float16x8x2_t, float16_t, v4hf,
++ v8hf, hf, f16, float16x8_t)
++__LD2_LANE_FUNC (float32x2x2_t, float32x2_t, float32x4x2_t, float32_t, v2sf, v4sf,
++ sf, f32, float32x4_t)
++__LD2_LANE_FUNC (float64x1x2_t, float64x1_t, float64x2x2_t, float64_t, df, v2df,
++ df, f64, float64x2_t)
++__LD2_LANE_FUNC (poly8x8x2_t, poly8x8_t, poly8x16x2_t, poly8_t, v8qi, v16qi, qi, p8,
++ int8x16_t)
++__LD2_LANE_FUNC (poly16x4x2_t, poly16x4_t, poly16x8x2_t, poly16_t, v4hi, v8hi, hi,
++ p16, int16x8_t)
++__LD2_LANE_FUNC (poly64x1x2_t, poly64x1_t, poly64x2x2_t, poly64_t, di,
++ v2di_ssps, di, p64, poly64x2_t)
++__LD2_LANE_FUNC (int8x8x2_t, int8x8_t, int8x16x2_t, int8_t, v8qi, v16qi, qi, s8,
++ int8x16_t)
++__LD2_LANE_FUNC (int16x4x2_t, int16x4_t, int16x8x2_t, int16_t, v4hi, v8hi, hi, s16,
++ int16x8_t)
++__LD2_LANE_FUNC (int32x2x2_t, int32x2_t, int32x4x2_t, int32_t, v2si, v4si, si, s32,
++ int32x4_t)
++__LD2_LANE_FUNC (int64x1x2_t, int64x1_t, int64x2x2_t, int64_t, di, v2di, di, s64,
++ int64x2_t)
++__LD2_LANE_FUNC (uint8x8x2_t, uint8x8_t, uint8x16x2_t, uint8_t, v8qi, v16qi, qi, u8,
++ int8x16_t)
++__LD2_LANE_FUNC (uint16x4x2_t, uint16x4_t, uint16x8x2_t, uint16_t, v4hi, v8hi, hi,
++ u16, int16x8_t)
++__LD2_LANE_FUNC (uint32x2x2_t, uint32x2_t, uint32x4x2_t, uint32_t, v2si, v4si, si,
++ u32, int32x4_t)
++__LD2_LANE_FUNC (uint64x1x2_t, uint64x1_t, uint64x2x2_t, uint64_t, di, v2di, di,
++ u64, int64x2_t)
+
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
+-vld1q_dup_f16 (const float16_t* __a)
+-{
+- float16_t __f = *__a;
+- return (float16x8_t) { __f, __f, __f, __f, __f, __f, __f, __f };
++#undef __LD2_LANE_FUNC
++
++/* vld2q_lane */
++
++#define __LD2_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
++__extension__ extern __inline intype \
++__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
++vld2q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
++{ \
++ __builtin_aarch64_simd_oi __o; \
++ intype ret; \
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) __b.val[0], 0); \
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) __b.val[1], 1); \
++ __o = __builtin_aarch64_ld2_lane##mode ( \
++ (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
++ ret.val[0] = (vtype) __builtin_aarch64_get_qregoiv4si (__o, 0); \
++ ret.val[1] = (vtype) __builtin_aarch64_get_qregoiv4si (__o, 1); \
++ return ret; \
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vld1q_dup_f32 (const float32_t* __a)
+-{
+- return vdupq_n_f32 (*__a);
++__LD2_LANE_FUNC (float16x8x2_t, float16x8_t, float16_t, v8hf, hf, f16)
++__LD2_LANE_FUNC (float32x4x2_t, float32x4_t, float32_t, v4sf, sf, f32)
++__LD2_LANE_FUNC (float64x2x2_t, float64x2_t, float64_t, v2df, df, f64)
++__LD2_LANE_FUNC (poly8x16x2_t, poly8x16_t, poly8_t, v16qi, qi, p8)
++__LD2_LANE_FUNC (poly16x8x2_t, poly16x8_t, poly16_t, v8hi, hi, p16)
++__LD2_LANE_FUNC (poly64x2x2_t, poly64x2_t, poly64_t, v2di, di, p64)
++__LD2_LANE_FUNC (int8x16x2_t, int8x16_t, int8_t, v16qi, qi, s8)
++__LD2_LANE_FUNC (int16x8x2_t, int16x8_t, int16_t, v8hi, hi, s16)
++__LD2_LANE_FUNC (int32x4x2_t, int32x4_t, int32_t, v4si, si, s32)
++__LD2_LANE_FUNC (int64x2x2_t, int64x2_t, int64_t, v2di, di, s64)
++__LD2_LANE_FUNC (uint8x16x2_t, uint8x16_t, uint8_t, v16qi, qi, u8)
++__LD2_LANE_FUNC (uint16x8x2_t, uint16x8_t, uint16_t, v8hi, hi, u16)
++__LD2_LANE_FUNC (uint32x4x2_t, uint32x4_t, uint32_t, v4si, si, u32)
++__LD2_LANE_FUNC (uint64x2x2_t, uint64x2_t, uint64_t, v2di, di, u64)
++
++#undef __LD2_LANE_FUNC
++
++/* vld3_lane */
++
++#define __LD3_LANE_FUNC(intype, vectype, largetype, ptrtype, mode, \
++ qmode, ptrmode, funcsuffix, signedtype) \
++__extension__ extern __inline intype \
++__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
++vld3_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
++{ \
++ __builtin_aarch64_simd_ci __o; \
++ largetype __temp; \
++ __temp.val[0] = \
++ vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0)); \
++ __temp.val[1] = \
++ vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0)); \
++ __temp.val[2] = \
++ vcombine_##funcsuffix (__b.val[2], vcreate_##funcsuffix (0)); \
++ __o = __builtin_aarch64_set_qregci##qmode (__o, \
++ (signedtype) __temp.val[0], \
++ 0); \
++ __o = __builtin_aarch64_set_qregci##qmode (__o, \
++ (signedtype) __temp.val[1], \
++ 1); \
++ __o = __builtin_aarch64_set_qregci##qmode (__o, \
++ (signedtype) __temp.val[2], \
++ 2); \
++ __o = __builtin_aarch64_ld3_lane##mode ( \
++ (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
++ __b.val[0] = (vectype) __builtin_aarch64_get_dregcidi (__o, 0); \
++ __b.val[1] = (vectype) __builtin_aarch64_get_dregcidi (__o, 1); \
++ __b.val[2] = (vectype) __builtin_aarch64_get_dregcidi (__o, 2); \
++ return __b; \
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vld1q_dup_f64 (const float64_t* __a)
+-{
+- return vdupq_n_f64 (*__a);
+-}
++__LD3_LANE_FUNC (float16x4x3_t, float16x4_t, float16x8x3_t, float16_t, v4hf,
++ v8hf, hf, f16, float16x8_t)
++__LD3_LANE_FUNC (float32x2x3_t, float32x2_t, float32x4x3_t, float32_t, v2sf, v4sf,
++ sf, f32, float32x4_t)
++__LD3_LANE_FUNC (float64x1x3_t, float64x1_t, float64x2x3_t, float64_t, df, v2df,
++ df, f64, float64x2_t)
++__LD3_LANE_FUNC (poly8x8x3_t, poly8x8_t, poly8x16x3_t, poly8_t, v8qi, v16qi, qi, p8,
++ int8x16_t)
++__LD3_LANE_FUNC (poly16x4x3_t, poly16x4_t, poly16x8x3_t, poly16_t, v4hi, v8hi, hi,
++ p16, int16x8_t)
++__LD3_LANE_FUNC (poly64x1x3_t, poly64x1_t, poly64x2x3_t, poly64_t, di,
++ v2di_ssps, di, p64, poly64x2_t)
++__LD3_LANE_FUNC (int8x8x3_t, int8x8_t, int8x16x3_t, int8_t, v8qi, v16qi, qi, s8,
++ int8x16_t)
++__LD3_LANE_FUNC (int16x4x3_t, int16x4_t, int16x8x3_t, int16_t, v4hi, v8hi, hi, s16,
++ int16x8_t)
++__LD3_LANE_FUNC (int32x2x3_t, int32x2_t, int32x4x3_t, int32_t, v2si, v4si, si, s32,
++ int32x4_t)
++__LD3_LANE_FUNC (int64x1x3_t, int64x1_t, int64x2x3_t, int64_t, di, v2di, di, s64,
++ int64x2_t)
++__LD3_LANE_FUNC (uint8x8x3_t, uint8x8_t, uint8x16x3_t, uint8_t, v8qi, v16qi, qi, u8,
++ int8x16_t)
++__LD3_LANE_FUNC (uint16x4x3_t, uint16x4_t, uint16x8x3_t, uint16_t, v4hi, v8hi, hi,
++ u16, int16x8_t)
++__LD3_LANE_FUNC (uint32x2x3_t, uint32x2_t, uint32x4x3_t, uint32_t, v2si, v4si, si,
++ u32, int32x4_t)
++__LD3_LANE_FUNC (uint64x1x3_t, uint64x1_t, uint64x2x3_t, uint64_t, di, v2di, di,
++ u64, int64x2_t)
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vld1q_dup_p8 (const poly8_t* __a)
+-{
+- return vdupq_n_p8 (*__a);
+-}
++#undef __LD3_LANE_FUNC
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vld1q_dup_p16 (const poly16_t* __a)
+-{
+- return vdupq_n_p16 (*__a);
+-}
++/* vld3q_lane */
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vld1q_dup_s8 (const int8_t* __a)
+-{
+- return vdupq_n_s8 (*__a);
++#define __LD3_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
++__extension__ extern __inline intype \
++__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
++vld3q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
++{ \
++ __builtin_aarch64_simd_ci __o; \
++ intype ret; \
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[0], 0); \
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[1], 1); \
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[2], 2); \
++ __o = __builtin_aarch64_ld3_lane##mode ( \
++ (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
++ ret.val[0] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 0); \
++ ret.val[1] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 1); \
++ ret.val[2] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 2); \
++ return ret; \
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vld1q_dup_s16 (const int16_t* __a)
+-{
+- return vdupq_n_s16 (*__a);
+-}
++__LD3_LANE_FUNC (float16x8x3_t, float16x8_t, float16_t, v8hf, hf, f16)
++__LD3_LANE_FUNC (float32x4x3_t, float32x4_t, float32_t, v4sf, sf, f32)
++__LD3_LANE_FUNC (float64x2x3_t, float64x2_t, float64_t, v2df, df, f64)
++__LD3_LANE_FUNC (poly8x16x3_t, poly8x16_t, poly8_t, v16qi, qi, p8)
++__LD3_LANE_FUNC (poly16x8x3_t, poly16x8_t, poly16_t, v8hi, hi, p16)
++__LD3_LANE_FUNC (poly64x2x3_t, poly64x2_t, poly64_t, v2di, di, p64)
++__LD3_LANE_FUNC (int8x16x3_t, int8x16_t, int8_t, v16qi, qi, s8)
++__LD3_LANE_FUNC (int16x8x3_t, int16x8_t, int16_t, v8hi, hi, s16)
++__LD3_LANE_FUNC (int32x4x3_t, int32x4_t, int32_t, v4si, si, s32)
++__LD3_LANE_FUNC (int64x2x3_t, int64x2_t, int64_t, v2di, di, s64)
++__LD3_LANE_FUNC (uint8x16x3_t, uint8x16_t, uint8_t, v16qi, qi, u8)
++__LD3_LANE_FUNC (uint16x8x3_t, uint16x8_t, uint16_t, v8hi, hi, u16)
++__LD3_LANE_FUNC (uint32x4x3_t, uint32x4_t, uint32_t, v4si, si, u32)
++__LD3_LANE_FUNC (uint64x2x3_t, uint64x2_t, uint64_t, v2di, di, u64)
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vld1q_dup_s32 (const int32_t* __a)
+-{
+- return vdupq_n_s32 (*__a);
+-}
++#undef __LD3_LANE_FUNC
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vld1q_dup_s64 (const int64_t* __a)
+-{
+- return vdupq_n_s64 (*__a);
+-}
++/* vld4_lane */
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vld1q_dup_u8 (const uint8_t* __a)
+-{
+- return vdupq_n_u8 (*__a);
++#define __LD4_LANE_FUNC(intype, vectype, largetype, ptrtype, mode, \
++ qmode, ptrmode, funcsuffix, signedtype) \
++__extension__ extern __inline intype \
++__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
++vld4_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
++{ \
++ __builtin_aarch64_simd_xi __o; \
++ largetype __temp; \
++ __temp.val[0] = \
++ vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0)); \
++ __temp.val[1] = \
++ vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0)); \
++ __temp.val[2] = \
++ vcombine_##funcsuffix (__b.val[2], vcreate_##funcsuffix (0)); \
++ __temp.val[3] = \
++ vcombine_##funcsuffix (__b.val[3], vcreate_##funcsuffix (0)); \
++ __o = __builtin_aarch64_set_qregxi##qmode (__o, \
++ (signedtype) __temp.val[0], \
++ 0); \
++ __o = __builtin_aarch64_set_qregxi##qmode (__o, \
++ (signedtype) __temp.val[1], \
++ 1); \
++ __o = __builtin_aarch64_set_qregxi##qmode (__o, \
++ (signedtype) __temp.val[2], \
++ 2); \
++ __o = __builtin_aarch64_set_qregxi##qmode (__o, \
++ (signedtype) __temp.val[3], \
++ 3); \
++ __o = __builtin_aarch64_ld4_lane##mode ( \
++ (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
++ __b.val[0] = (vectype) __builtin_aarch64_get_dregxidi (__o, 0); \
++ __b.val[1] = (vectype) __builtin_aarch64_get_dregxidi (__o, 1); \
++ __b.val[2] = (vectype) __builtin_aarch64_get_dregxidi (__o, 2); \
++ __b.val[3] = (vectype) __builtin_aarch64_get_dregxidi (__o, 3); \
++ return __b; \
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vld1q_dup_u16 (const uint16_t* __a)
+-{
+- return vdupq_n_u16 (*__a);
+-}
++/* vld4q_lane */
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vld1q_dup_u32 (const uint32_t* __a)
+-{
+- return vdupq_n_u32 (*__a);
+-}
++__LD4_LANE_FUNC (float16x4x4_t, float16x4_t, float16x8x4_t, float16_t, v4hf,
++ v8hf, hf, f16, float16x8_t)
++__LD4_LANE_FUNC (float32x2x4_t, float32x2_t, float32x4x4_t, float32_t, v2sf, v4sf,
++ sf, f32, float32x4_t)
++__LD4_LANE_FUNC (float64x1x4_t, float64x1_t, float64x2x4_t, float64_t, df, v2df,
++ df, f64, float64x2_t)
++__LD4_LANE_FUNC (poly8x8x4_t, poly8x8_t, poly8x16x4_t, poly8_t, v8qi, v16qi, qi, p8,
++ int8x16_t)
++__LD4_LANE_FUNC (poly16x4x4_t, poly16x4_t, poly16x8x4_t, poly16_t, v4hi, v8hi, hi,
++ p16, int16x8_t)
++__LD4_LANE_FUNC (poly64x1x4_t, poly64x1_t, poly64x2x4_t, poly64_t, di,
++ v2di_ssps, di, p64, poly64x2_t)
++__LD4_LANE_FUNC (int8x8x4_t, int8x8_t, int8x16x4_t, int8_t, v8qi, v16qi, qi, s8,
++ int8x16_t)
++__LD4_LANE_FUNC (int16x4x4_t, int16x4_t, int16x8x4_t, int16_t, v4hi, v8hi, hi, s16,
++ int16x8_t)
++__LD4_LANE_FUNC (int32x2x4_t, int32x2_t, int32x4x4_t, int32_t, v2si, v4si, si, s32,
++ int32x4_t)
++__LD4_LANE_FUNC (int64x1x4_t, int64x1_t, int64x2x4_t, int64_t, di, v2di, di, s64,
++ int64x2_t)
++__LD4_LANE_FUNC (uint8x8x4_t, uint8x8_t, uint8x16x4_t, uint8_t, v8qi, v16qi, qi, u8,
++ int8x16_t)
++__LD4_LANE_FUNC (uint16x4x4_t, uint16x4_t, uint16x8x4_t, uint16_t, v4hi, v8hi, hi,
++ u16, int16x8_t)
++__LD4_LANE_FUNC (uint32x2x4_t, uint32x2_t, uint32x4x4_t, uint32_t, v2si, v4si, si,
++ u32, int32x4_t)
++__LD4_LANE_FUNC (uint64x1x4_t, uint64x1_t, uint64x2x4_t, uint64_t, di, v2di, di,
++ u64, int64x2_t)
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vld1q_dup_u64 (const uint64_t* __a)
+-{
+- return vdupq_n_u64 (*__a);
+-}
++#undef __LD4_LANE_FUNC
+
+-/* vld1_lane */
++/* vld4q_lane */
+
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
+-vld1_lane_f16 (const float16_t *__src, float16x4_t __vec, const int __lane)
+-{
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++#define __LD4_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
++__extension__ extern __inline intype \
++__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
++vld4q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
++{ \
++ __builtin_aarch64_simd_xi __o; \
++ intype ret; \
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[0], 0); \
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[1], 1); \
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[2], 2); \
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[3], 3); \
++ __o = __builtin_aarch64_ld4_lane##mode ( \
++ (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
++ ret.val[0] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 0); \
++ ret.val[1] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 1); \
++ ret.val[2] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 2); \
++ ret.val[3] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 3); \
++ return ret; \
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vld1_lane_f32 (const float32_t *__src, float32x2_t __vec, const int __lane)
+-{
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
+-}
++__LD4_LANE_FUNC (float16x8x4_t, float16x8_t, float16_t, v8hf, hf, f16)
++__LD4_LANE_FUNC (float32x4x4_t, float32x4_t, float32_t, v4sf, sf, f32)
++__LD4_LANE_FUNC (float64x2x4_t, float64x2_t, float64_t, v2df, df, f64)
++__LD4_LANE_FUNC (poly8x16x4_t, poly8x16_t, poly8_t, v16qi, qi, p8)
++__LD4_LANE_FUNC (poly16x8x4_t, poly16x8_t, poly16_t, v8hi, hi, p16)
++__LD4_LANE_FUNC (poly64x2x4_t, poly64x2_t, poly64_t, v2di, di, p64)
++__LD4_LANE_FUNC (int8x16x4_t, int8x16_t, int8_t, v16qi, qi, s8)
++__LD4_LANE_FUNC (int16x8x4_t, int16x8_t, int16_t, v8hi, hi, s16)
++__LD4_LANE_FUNC (int32x4x4_t, int32x4_t, int32_t, v4si, si, s32)
++__LD4_LANE_FUNC (int64x2x4_t, int64x2_t, int64_t, v2di, di, s64)
++__LD4_LANE_FUNC (uint8x16x4_t, uint8x16_t, uint8_t, v16qi, qi, u8)
++__LD4_LANE_FUNC (uint16x8x4_t, uint16x8_t, uint16_t, v8hi, hi, u16)
++__LD4_LANE_FUNC (uint32x4x4_t, uint32x4_t, uint32_t, v4si, si, u32)
++__LD4_LANE_FUNC (uint64x2x4_t, uint64x2_t, uint64_t, v2di, di, u64)
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vld1_lane_f64 (const float64_t *__src, float64x1_t __vec, const int __lane)
+-{
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
+-}
++#undef __LD4_LANE_FUNC
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vld1_lane_p8 (const poly8_t *__src, poly8x8_t __vec, const int __lane)
+-{
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
+-}
++/* vmax */
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vld1_lane_p16 (const poly16_t *__src, poly16x4_t __vec, const int __lane)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_smax_nanv2sf (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vld1_lane_s8 (const int8_t *__src, int8x8_t __vec, const int __lane)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return (float64x1_t)
++ { __builtin_aarch64_smax_nandf (vget_lane_f64 (__a, 0),
++ vget_lane_f64 (__b, 0)) };
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vld1_lane_s16 (const int16_t *__src, int16x4_t __vec, const int __lane)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_smaxv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vld1_lane_s32 (const int32_t *__src, int32x2_t __vec, const int __lane)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_smaxv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vld1_lane_s64 (const int64_t *__src, int64x1_t __vec, const int __lane)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_smaxv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vld1_lane_u8 (const uint8_t *__src, uint8x8_t __vec, const int __lane)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return (uint8x8_t) __builtin_aarch64_umaxv8qi ((int8x8_t) __a,
++ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vld1_lane_u16 (const uint16_t *__src, uint16x4_t __vec, const int __lane)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return (uint16x4_t) __builtin_aarch64_umaxv4hi ((int16x4_t) __a,
++ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vld1_lane_u32 (const uint32_t *__src, uint32x2_t __vec, const int __lane)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return (uint32x2_t) __builtin_aarch64_umaxv2si ((int32x2_t) __a,
++ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vld1_lane_u64 (const uint64_t *__src, uint64x1_t __vec, const int __lane)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_smax_nanv4sf (__a, __b);
+ }
+
+-/* vld1q_lane */
+-
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
+-vld1q_lane_f16 (const float16_t *__src, float16x8_t __vec, const int __lane)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_smax_nanv2df (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vld1q_lane_f32 (const float32_t *__src, float32x4_t __vec, const int __lane)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_smaxv16qi (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vld1q_lane_f64 (const float64_t *__src, float64x2_t __vec, const int __lane)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_smaxv8hi (__a, __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vld1q_lane_p8 (const poly8_t *__src, poly8x16_t __vec, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_smaxv4si (__a, __b);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vld1q_lane_p16 (const poly16_t *__src, poly16x8_t __vec, const int __lane)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return (uint8x16_t) __builtin_aarch64_umaxv16qi ((int8x16_t) __a,
++ (int8x16_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vld1q_lane_s8 (const int8_t *__src, int8x16_t __vec, const int __lane)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return (uint16x8_t) __builtin_aarch64_umaxv8hi ((int16x8_t) __a,
++ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vld1q_lane_s16 (const int16_t *__src, int16x8_t __vec, const int __lane)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return (uint32x4_t) __builtin_aarch64_umaxv4si ((int32x4_t) __a,
++ (int32x4_t) __b);
+ }
++/* vmulx */
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vld1q_lane_s32 (const int32_t *__src, int32x4_t __vec, const int __lane)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_fmulxv2sf (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vld1q_lane_s64 (const int64_t *__src, int64x2_t __vec, const int __lane)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_fmulxv4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vld1q_lane_u8 (const uint8_t *__src, uint8x16_t __vec, const int __lane)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return (float64x1_t) {__builtin_aarch64_fmulxdf (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vld1q_lane_u16 (const uint16_t *__src, uint16x8_t __vec, const int __lane)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_fmulxv2df (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vld1q_lane_u32 (const uint32_t *__src, uint32x4_t __vec, const int __lane)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxs_f32 (float32_t __a, float32_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_fmulxsf (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vld1q_lane_u64 (const uint64_t *__src, uint64x2_t __vec, const int __lane)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxd_f64 (float64_t __a, float64_t __b)
+ {
+- return __aarch64_vset_lane_any (*__src, __vec, __lane);
++ return __builtin_aarch64_fmulxdf (__a, __b);
+ }
+
+-/* vldn */
+-
+-__extension__ static __inline int64x1x2_t __attribute__ ((__always_inline__))
+-vld2_s64 (const int64_t * __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_lane_f32 (float32x2_t __a, float32x2_t __v, const int __lane)
+ {
+- int64x1x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+- ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+- return ret;
++ return vmulx_f32 (__a, __aarch64_vdup_lane_f32 (__v, __lane));
+ }
+
+-__extension__ static __inline uint64x1x2_t __attribute__ ((__always_inline__))
+-vld2_u64 (const uint64_t * __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_lane_f64 (float64x1_t __a, float64x1_t __v, const int __lane)
+ {
+- uint64x1x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+- ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+- return ret;
++ return vmulx_f64 (__a, __aarch64_vdup_lane_f64 (__v, __lane));
+ }
+
+-__extension__ static __inline float64x1x2_t __attribute__ ((__always_inline__))
+-vld2_f64 (const float64_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_lane_f32 (float32x4_t __a, float32x2_t __v, const int __lane)
+ {
+- float64x1x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2df ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 0)};
+- ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 1)};
+- return ret;
++ return vmulxq_f32 (__a, __aarch64_vdupq_lane_f32 (__v, __lane));
+ }
+
+-__extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
+-vld2_s8 (const int8_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_lane_f64 (float64x2_t __a, float64x1_t __v, const int __lane)
+ {
+- int8x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+- ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+- return ret;
++ return vmulxq_f64 (__a, __aarch64_vdupq_lane_f64 (__v, __lane));
+ }
+
+-__extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
+-vld2_p8 (const poly8_t * __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_laneq_f32 (float32x2_t __a, float32x4_t __v, const int __lane)
+ {
+- poly8x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+- ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+- return ret;
++ return vmulx_f32 (__a, __aarch64_vdup_laneq_f32 (__v, __lane));
+ }
+
+-__extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
+-vld2_s16 (const int16_t * __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_laneq_f64 (float64x1_t __a, float64x2_t __v, const int __lane)
+ {
+- int16x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+- ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+- return ret;
++ return vmulx_f64 (__a, __aarch64_vdup_laneq_f64 (__v, __lane));
+ }
+
+-__extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
+-vld2_p16 (const poly16_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_laneq_f32 (float32x4_t __a, float32x4_t __v, const int __lane)
+ {
+- poly16x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+- ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+- return ret;
++ return vmulxq_f32 (__a, __aarch64_vdupq_laneq_f32 (__v, __lane));
+ }
+
+-__extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
+-vld2_s32 (const int32_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_laneq_f64 (float64x2_t __a, float64x2_t __v, const int __lane)
+ {
+- int32x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+- ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+- return ret;
++ return vmulxq_f64 (__a, __aarch64_vdupq_laneq_f64 (__v, __lane));
+ }
+
+-__extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
+-vld2_u8 (const uint8_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxs_lane_f32 (float32_t __a, float32x2_t __v, const int __lane)
+ {
+- uint8x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+- ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+- return ret;
++ return vmulxs_f32 (__a, __aarch64_vget_lane_any (__v, __lane));
+ }
+
+-__extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
+-vld2_u16 (const uint16_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxs_laneq_f32 (float32_t __a, float32x4_t __v, const int __lane)
+ {
+- uint16x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+- ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+- return ret;
++ return vmulxs_f32 (__a, __aarch64_vget_lane_any (__v, __lane));
+ }
+
+-__extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
+-vld2_u32 (const uint32_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxd_lane_f64 (float64_t __a, float64x1_t __v, const int __lane)
+ {
+- uint32x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+- ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+- return ret;
++ return vmulxd_f64 (__a, __aarch64_vget_lane_any (__v, __lane));
+ }
+
+-__extension__ static __inline float16x4x2_t __attribute__ ((__always_inline__))
+-vld2_f16 (const float16_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxd_laneq_f64 (float64_t __a, float64x2_t __v, const int __lane)
+ {
+- float16x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v4hf (__a);
+- ret.val[0] = __builtin_aarch64_get_dregoiv4hf (__o, 0);
+- ret.val[1] = __builtin_aarch64_get_dregoiv4hf (__o, 1);
+- return ret;
++ return vmulxd_f64 (__a, __aarch64_vget_lane_any (__v, __lane));
+ }
+
+-__extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
+-vld2_f32 (const float32_t * __a)
++/* vpmax */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmax_s8 (int8x8_t a, int8x8_t b)
+ {
+- float32x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v2sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 0);
+- ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 1);
+- return ret;
++ return __builtin_aarch64_smaxpv8qi (a, b);
+ }
+
+-__extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
+-vld2q_s8 (const int8_t * __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmax_s16 (int16x4_t a, int16x4_t b)
+ {
+- int8x16x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+- ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+- return ret;
++ return __builtin_aarch64_smaxpv4hi (a, b);
+ }
+
+-__extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
+-vld2q_p8 (const poly8_t * __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmax_s32 (int32x2_t a, int32x2_t b)
+ {
+- poly8x16x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+- ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+- return ret;
++ return __builtin_aarch64_smaxpv2si (a, b);
+ }
+
+-__extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
+-vld2q_s16 (const int16_t * __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmax_u8 (uint8x8_t a, uint8x8_t b)
+ {
+- int16x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+- ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+- return ret;
++ return (uint8x8_t) __builtin_aarch64_umaxpv8qi ((int8x8_t) a,
++ (int8x8_t) b);
+ }
+
+-__extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
+-vld2q_p16 (const poly16_t * __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmax_u16 (uint16x4_t a, uint16x4_t b)
+ {
+- poly16x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+- ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+- return ret;
++ return (uint16x4_t) __builtin_aarch64_umaxpv4hi ((int16x4_t) a,
++ (int16x4_t) b);
+ }
+
+-__extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
+-vld2q_s32 (const int32_t * __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmax_u32 (uint32x2_t a, uint32x2_t b)
+ {
+- int32x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+- ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+- return ret;
++ return (uint32x2_t) __builtin_aarch64_umaxpv2si ((int32x2_t) a,
++ (int32x2_t) b);
+ }
+
+-__extension__ static __inline int64x2x2_t __attribute__ ((__always_inline__))
+-vld2q_s64 (const int64_t * __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxq_s8 (int8x16_t a, int8x16_t b)
+ {
+- int64x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+- ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+- return ret;
++ return __builtin_aarch64_smaxpv16qi (a, b);
+ }
+
+-__extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
+-vld2q_u8 (const uint8_t * __a)
+-{
+- uint8x16x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+- ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+- return ret;
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxq_s16 (int16x8_t a, int16x8_t b)
++{
++ return __builtin_aarch64_smaxpv8hi (a, b);
+ }
+
+-__extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
+-vld2q_u16 (const uint16_t * __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxq_s32 (int32x4_t a, int32x4_t b)
+ {
+- uint16x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+- ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+- return ret;
++ return __builtin_aarch64_smaxpv4si (a, b);
+ }
+
+-__extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
+-vld2q_u32 (const uint32_t * __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxq_u8 (uint8x16_t a, uint8x16_t b)
+ {
+- uint32x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+- ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+- return ret;
++ return (uint8x16_t) __builtin_aarch64_umaxpv16qi ((int8x16_t) a,
++ (int8x16_t) b);
+ }
+
+-__extension__ static __inline uint64x2x2_t __attribute__ ((__always_inline__))
+-vld2q_u64 (const uint64_t * __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxq_u16 (uint16x8_t a, uint16x8_t b)
+ {
+- uint64x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+- ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+- return ret;
++ return (uint16x8_t) __builtin_aarch64_umaxpv8hi ((int16x8_t) a,
++ (int16x8_t) b);
+ }
+
+-__extension__ static __inline float16x8x2_t __attribute__ ((__always_inline__))
+-vld2q_f16 (const float16_t * __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxq_u32 (uint32x4_t a, uint32x4_t b)
+ {
+- float16x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v8hf (__a);
+- ret.val[0] = __builtin_aarch64_get_qregoiv8hf (__o, 0);
+- ret.val[1] = __builtin_aarch64_get_qregoiv8hf (__o, 1);
+- return ret;
++ return (uint32x4_t) __builtin_aarch64_umaxpv4si ((int32x4_t) a,
++ (int32x4_t) b);
+ }
+
+-__extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
+-vld2q_f32 (const float32_t * __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmax_f32 (float32x2_t a, float32x2_t b)
+ {
+- float32x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v4sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 0);
+- ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 1);
+- return ret;
++ return __builtin_aarch64_smax_nanpv2sf (a, b);
+ }
+
+-__extension__ static __inline float64x2x2_t __attribute__ ((__always_inline__))
+-vld2q_f64 (const float64_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxq_f32 (float32x4_t a, float32x4_t b)
+ {
+- float64x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2v2df ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 0);
+- ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 1);
+- return ret;
++ return __builtin_aarch64_smax_nanpv4sf (a, b);
+ }
+
+-__extension__ static __inline int64x1x3_t __attribute__ ((__always_inline__))
+-vld3_s64 (const int64_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxq_f64 (float64x2_t a, float64x2_t b)
+ {
+- int64x1x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+- ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+- ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+- return ret;
++ return __builtin_aarch64_smax_nanpv2df (a, b);
+ }
+
+-__extension__ static __inline uint64x1x3_t __attribute__ ((__always_inline__))
+-vld3_u64 (const uint64_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxqd_f64 (float64x2_t a)
+ {
+- uint64x1x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+- ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+- ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smax_nan_scal_v2df (a);
+ }
+
+-__extension__ static __inline float64x1x3_t __attribute__ ((__always_inline__))
+-vld3_f64 (const float64_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxs_f32 (float32x2_t a)
+ {
+- float64x1x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3df ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 0)};
+- ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 1)};
+- ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 2)};
+- return ret;
++ return __builtin_aarch64_reduc_smax_nan_scal_v2sf (a);
+ }
+
+-__extension__ static __inline int8x8x3_t __attribute__ ((__always_inline__))
+-vld3_s8 (const int8_t * __a)
++/* vpmaxnm */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxnm_f32 (float32x2_t a, float32x2_t b)
+ {
+- int8x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+- ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+- ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+- return ret;
++ return __builtin_aarch64_smaxpv2sf (a, b);
+ }
+
+-__extension__ static __inline poly8x8x3_t __attribute__ ((__always_inline__))
+-vld3_p8 (const poly8_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxnmq_f32 (float32x4_t a, float32x4_t b)
+ {
+- poly8x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+- ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+- ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+- return ret;
++ return __builtin_aarch64_smaxpv4sf (a, b);
+ }
+
+-__extension__ static __inline int16x4x3_t __attribute__ ((__always_inline__))
+-vld3_s16 (const int16_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxnmq_f64 (float64x2_t a, float64x2_t b)
+ {
+- int16x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+- ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+- ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+- return ret;
++ return __builtin_aarch64_smaxpv2df (a, b);
+ }
+
+-__extension__ static __inline poly16x4x3_t __attribute__ ((__always_inline__))
+-vld3_p16 (const poly16_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxnmqd_f64 (float64x2_t a)
+ {
+- poly16x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+- ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+- ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v2df (a);
+ }
+
+-__extension__ static __inline int32x2x3_t __attribute__ ((__always_inline__))
+-vld3_s32 (const int32_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxnms_f32 (float32x2_t a)
+ {
+- int32x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
+- ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
+- ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v2sf (a);
+ }
+
+-__extension__ static __inline uint8x8x3_t __attribute__ ((__always_inline__))
+-vld3_u8 (const uint8_t * __a)
++/* vpmin */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmin_s8 (int8x8_t a, int8x8_t b)
+ {
+- uint8x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+- ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+- ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+- return ret;
++ return __builtin_aarch64_sminpv8qi (a, b);
+ }
+
+-__extension__ static __inline uint16x4x3_t __attribute__ ((__always_inline__))
+-vld3_u16 (const uint16_t * __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmin_s16 (int16x4_t a, int16x4_t b)
+ {
+- uint16x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+- ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+- ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+- return ret;
++ return __builtin_aarch64_sminpv4hi (a, b);
+ }
+
+-__extension__ static __inline uint32x2x3_t __attribute__ ((__always_inline__))
+-vld3_u32 (const uint32_t * __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmin_s32 (int32x2_t a, int32x2_t b)
+ {
+- uint32x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
+- ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
+- ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
+- return ret;
++ return __builtin_aarch64_sminpv2si (a, b);
+ }
+
+-__extension__ static __inline float16x4x3_t __attribute__ ((__always_inline__))
+-vld3_f16 (const float16_t * __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmin_u8 (uint8x8_t a, uint8x8_t b)
+ {
+- float16x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v4hf (__a);
+- ret.val[0] = __builtin_aarch64_get_dregciv4hf (__o, 0);
+- ret.val[1] = __builtin_aarch64_get_dregciv4hf (__o, 1);
+- ret.val[2] = __builtin_aarch64_get_dregciv4hf (__o, 2);
+- return ret;
++ return (uint8x8_t) __builtin_aarch64_uminpv8qi ((int8x8_t) a,
++ (int8x8_t) b);
+ }
+
+-__extension__ static __inline float32x2x3_t __attribute__ ((__always_inline__))
+-vld3_f32 (const float32_t * __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmin_u16 (uint16x4_t a, uint16x4_t b)
+ {
+- float32x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v2sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 0);
+- ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 1);
+- ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 2);
+- return ret;
++ return (uint16x4_t) __builtin_aarch64_uminpv4hi ((int16x4_t) a,
++ (int16x4_t) b);
+ }
+
+-__extension__ static __inline int8x16x3_t __attribute__ ((__always_inline__))
+-vld3q_s8 (const int8_t * __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmin_u32 (uint32x2_t a, uint32x2_t b)
+ {
+- int8x16x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+- ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+- ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+- return ret;
++ return (uint32x2_t) __builtin_aarch64_uminpv2si ((int32x2_t) a,
++ (int32x2_t) b);
+ }
+
+-__extension__ static __inline poly8x16x3_t __attribute__ ((__always_inline__))
+-vld3q_p8 (const poly8_t * __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminq_s8 (int8x16_t a, int8x16_t b)
+ {
+- poly8x16x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+- ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+- ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+- return ret;
++ return __builtin_aarch64_sminpv16qi (a, b);
+ }
+
+-__extension__ static __inline int16x8x3_t __attribute__ ((__always_inline__))
+-vld3q_s16 (const int16_t * __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminq_s16 (int16x8_t a, int16x8_t b)
+ {
+- int16x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+- ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+- ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+- return ret;
++ return __builtin_aarch64_sminpv8hi (a, b);
+ }
+
+-__extension__ static __inline poly16x8x3_t __attribute__ ((__always_inline__))
+-vld3q_p16 (const poly16_t * __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminq_s32 (int32x4_t a, int32x4_t b)
+ {
+- poly16x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+- ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+- ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+- return ret;
++ return __builtin_aarch64_sminpv4si (a, b);
+ }
+
+-__extension__ static __inline int32x4x3_t __attribute__ ((__always_inline__))
+-vld3q_s32 (const int32_t * __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminq_u8 (uint8x16_t a, uint8x16_t b)
+ {
+- int32x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
+- ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
+- ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
+- return ret;
++ return (uint8x16_t) __builtin_aarch64_uminpv16qi ((int8x16_t) a,
++ (int8x16_t) b);
+ }
+
+-__extension__ static __inline int64x2x3_t __attribute__ ((__always_inline__))
+-vld3q_s64 (const int64_t * __a)
+-{
+- int64x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
+- ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
+- ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
+- return ret;
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminq_u16 (uint16x8_t a, uint16x8_t b)
++{
++ return (uint16x8_t) __builtin_aarch64_uminpv8hi ((int16x8_t) a,
++ (int16x8_t) b);
+ }
+
+-__extension__ static __inline uint8x16x3_t __attribute__ ((__always_inline__))
+-vld3q_u8 (const uint8_t * __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminq_u32 (uint32x4_t a, uint32x4_t b)
+ {
+- uint8x16x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+- ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+- ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+- return ret;
++ return (uint32x4_t) __builtin_aarch64_uminpv4si ((int32x4_t) a,
++ (int32x4_t) b);
+ }
+
+-__extension__ static __inline uint16x8x3_t __attribute__ ((__always_inline__))
+-vld3q_u16 (const uint16_t * __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmin_f32 (float32x2_t a, float32x2_t b)
+ {
+- uint16x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+- ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+- ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+- return ret;
++ return __builtin_aarch64_smin_nanpv2sf (a, b);
+ }
+
+-__extension__ static __inline uint32x4x3_t __attribute__ ((__always_inline__))
+-vld3q_u32 (const uint32_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminq_f32 (float32x4_t a, float32x4_t b)
+ {
+- uint32x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
+- ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
+- ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
+- return ret;
++ return __builtin_aarch64_smin_nanpv4sf (a, b);
+ }
+
+-__extension__ static __inline uint64x2x3_t __attribute__ ((__always_inline__))
+-vld3q_u64 (const uint64_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminq_f64 (float64x2_t a, float64x2_t b)
+ {
+- uint64x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
+- ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
+- ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
+- return ret;
++ return __builtin_aarch64_smin_nanpv2df (a, b);
+ }
+
+-__extension__ static __inline float16x8x3_t __attribute__ ((__always_inline__))
+-vld3q_f16 (const float16_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminqd_f64 (float64x2_t a)
+ {
+- float16x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v8hf (__a);
+- ret.val[0] = __builtin_aarch64_get_qregciv8hf (__o, 0);
+- ret.val[1] = __builtin_aarch64_get_qregciv8hf (__o, 1);
+- ret.val[2] = __builtin_aarch64_get_qregciv8hf (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smin_nan_scal_v2df (a);
+ }
+
+-__extension__ static __inline float32x4x3_t __attribute__ ((__always_inline__))
+-vld3q_f32 (const float32_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmins_f32 (float32x2_t a)
+ {
+- float32x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v4sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 0);
+- ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 1);
+- ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smin_nan_scal_v2sf (a);
+ }
+
+-__extension__ static __inline float64x2x3_t __attribute__ ((__always_inline__))
+-vld3q_f64 (const float64_t * __a)
++/* vpminnm */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminnm_f32 (float32x2_t a, float32x2_t b)
+ {
+- float64x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3v2df ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 0);
+- ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 1);
+- ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 2);
+- return ret;
++ return __builtin_aarch64_sminpv2sf (a, b);
+ }
+
+-__extension__ static __inline int64x1x4_t __attribute__ ((__always_inline__))
+-vld4_s64 (const int64_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminnmq_f32 (float32x4_t a, float32x4_t b)
+ {
+- int64x1x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
+- ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
+- ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
+- ret.val[3] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
+- return ret;
++ return __builtin_aarch64_sminpv4sf (a, b);
+ }
+
+-__extension__ static __inline uint64x1x4_t __attribute__ ((__always_inline__))
+-vld4_u64 (const uint64_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminnmq_f64 (float64x2_t a, float64x2_t b)
+ {
+- uint64x1x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
+- ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
+- ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
+- ret.val[3] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
+- return ret;
++ return __builtin_aarch64_sminpv2df (a, b);
+ }
+
+-__extension__ static __inline float64x1x4_t __attribute__ ((__always_inline__))
+-vld4_f64 (const float64_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminnmqd_f64 (float64x2_t a)
+ {
+- float64x1x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4df ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 0)};
+- ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 1)};
+- ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 2)};
+- ret.val[3] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 3)};
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v2df (a);
+ }
+
+-__extension__ static __inline int8x8x4_t __attribute__ ((__always_inline__))
+-vld4_s8 (const int8_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminnms_f32 (float32x2_t a)
+ {
+- int8x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+- ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+- ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+- ret.val[3] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v2sf (a);
+ }
+
+-__extension__ static __inline poly8x8x4_t __attribute__ ((__always_inline__))
+-vld4_p8 (const poly8_t * __a)
++/* vmaxnm */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnm_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- poly8x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+- ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+- ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+- ret.val[3] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+- return ret;
++ return __builtin_aarch64_fmaxv2sf (__a, __b);
+ }
+
+-__extension__ static __inline int16x4x4_t __attribute__ ((__always_inline__))
+-vld4_s16 (const int16_t * __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnm_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- int16x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+- ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+- ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+- ret.val[3] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+- return ret;
++ return (float64x1_t)
++ { __builtin_aarch64_fmaxdf (vget_lane_f64 (__a, 0),
++ vget_lane_f64 (__b, 0)) };
+ }
+
+-__extension__ static __inline poly16x4x4_t __attribute__ ((__always_inline__))
+-vld4_p16 (const poly16_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- poly16x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+- ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+- ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+- ret.val[3] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+- return ret;
++ return __builtin_aarch64_fmaxv4sf (__a, __b);
+ }
+
+-__extension__ static __inline int32x2x4_t __attribute__ ((__always_inline__))
+-vld4_s32 (const int32_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- int32x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
+- ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
+- ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
+- ret.val[3] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
+- return ret;
++ return __builtin_aarch64_fmaxv2df (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8x4_t __attribute__ ((__always_inline__))
+-vld4_u8 (const uint8_t * __a)
++/* vmaxv */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxv_f32 (float32x2_t __a)
+ {
+- uint8x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+- ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+- ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+- ret.val[3] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_nan_scal_v2sf (__a);
+ }
+
+-__extension__ static __inline uint16x4x4_t __attribute__ ((__always_inline__))
+-vld4_u16 (const uint16_t * __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxv_s8 (int8x8_t __a)
+ {
+- uint16x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+- ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+- ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+- ret.val[3] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v8qi (__a);
+ }
+
+-__extension__ static __inline uint32x2x4_t __attribute__ ((__always_inline__))
+-vld4_u32 (const uint32_t * __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxv_s16 (int16x4_t __a)
+ {
+- uint32x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
+- ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
+- ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
+- ret.val[3] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v4hi (__a);
+ }
+
+-__extension__ static __inline float16x4x4_t __attribute__ ((__always_inline__))
+-vld4_f16 (const float16_t * __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxv_s32 (int32x2_t __a)
+ {
+- float16x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v4hf (__a);
+- ret.val[0] = __builtin_aarch64_get_dregxiv4hf (__o, 0);
+- ret.val[1] = __builtin_aarch64_get_dregxiv4hf (__o, 1);
+- ret.val[2] = __builtin_aarch64_get_dregxiv4hf (__o, 2);
+- ret.val[3] = __builtin_aarch64_get_dregxiv4hf (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v2si (__a);
+ }
+
+-__extension__ static __inline float32x2x4_t __attribute__ ((__always_inline__))
+-vld4_f32 (const float32_t * __a)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxv_u8 (uint8x8_t __a)
+ {
+- float32x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v2sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 0);
+- ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 1);
+- ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 2);
+- ret.val[3] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_umax_scal_v8qi_uu (__a);
+ }
+
+-__extension__ static __inline int8x16x4_t __attribute__ ((__always_inline__))
+-vld4q_s8 (const int8_t * __a)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxv_u16 (uint16x4_t __a)
+ {
+- int8x16x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+- ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+- ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+- ret.val[3] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_umax_scal_v4hi_uu (__a);
+ }
+
+-__extension__ static __inline poly8x16x4_t __attribute__ ((__always_inline__))
+-vld4q_p8 (const poly8_t * __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxv_u32 (uint32x2_t __a)
+ {
+- poly8x16x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+- ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+- ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+- ret.val[3] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_umax_scal_v2si_uu (__a);
+ }
+
+-__extension__ static __inline int16x8x4_t __attribute__ ((__always_inline__))
+-vld4q_s16 (const int16_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxvq_f32 (float32x4_t __a)
+ {
+- int16x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+- ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+- ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+- ret.val[3] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_nan_scal_v4sf (__a);
+ }
+
+-__extension__ static __inline poly16x8x4_t __attribute__ ((__always_inline__))
+-vld4q_p16 (const poly16_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxvq_f64 (float64x2_t __a)
+ {
+- poly16x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+- ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+- ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+- ret.val[3] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_nan_scal_v2df (__a);
+ }
+
+-__extension__ static __inline int32x4x4_t __attribute__ ((__always_inline__))
+-vld4q_s32 (const int32_t * __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxvq_s8 (int8x16_t __a)
+ {
+- int32x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
+- ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
+- ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
+- ret.val[3] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v16qi (__a);
+ }
+
+-__extension__ static __inline int64x2x4_t __attribute__ ((__always_inline__))
+-vld4q_s64 (const int64_t * __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxvq_s16 (int16x8_t __a)
+ {
+- int64x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
+- ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
+- ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
+- ret.val[3] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v8hi (__a);
+ }
+
+-__extension__ static __inline uint8x16x4_t __attribute__ ((__always_inline__))
+-vld4q_u8 (const uint8_t * __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxvq_s32 (int32x4_t __a)
+ {
+- uint8x16x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+- ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+- ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+- ret.val[3] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v4si (__a);
+ }
+
+-__extension__ static __inline uint16x8x4_t __attribute__ ((__always_inline__))
+-vld4q_u16 (const uint16_t * __a)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxvq_u8 (uint8x16_t __a)
+ {
+- uint16x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+- ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+- ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+- ret.val[3] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_umax_scal_v16qi_uu (__a);
+ }
+
+-__extension__ static __inline uint32x4x4_t __attribute__ ((__always_inline__))
+-vld4q_u32 (const uint32_t * __a)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxvq_u16 (uint16x8_t __a)
+ {
+- uint32x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
+- ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
+- ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
+- ret.val[3] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_umax_scal_v8hi_uu (__a);
+ }
+
+-__extension__ static __inline uint64x2x4_t __attribute__ ((__always_inline__))
+-vld4q_u64 (const uint64_t * __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxvq_u32 (uint32x4_t __a)
+ {
+- uint64x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
+- ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
+- ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
+- ret.val[3] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_umax_scal_v4si_uu (__a);
+ }
+
+-__extension__ static __inline float16x8x4_t __attribute__ ((__always_inline__))
+-vld4q_f16 (const float16_t * __a)
++/* vmaxnmv */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmv_f32 (float32x2_t __a)
+ {
+- float16x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v8hf (__a);
+- ret.val[0] = __builtin_aarch64_get_qregxiv8hf (__o, 0);
+- ret.val[1] = __builtin_aarch64_get_qregxiv8hf (__o, 1);
+- ret.val[2] = __builtin_aarch64_get_qregxiv8hf (__o, 2);
+- ret.val[3] = __builtin_aarch64_get_qregxiv8hf (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v2sf (__a);
+ }
+
+-__extension__ static __inline float32x4x4_t __attribute__ ((__always_inline__))
+-vld4q_f32 (const float32_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmvq_f32 (float32x4_t __a)
+ {
+- float32x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v4sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 0);
+- ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 1);
+- ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 2);
+- ret.val[3] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v4sf (__a);
+ }
+
+-__extension__ static __inline float64x2x4_t __attribute__ ((__always_inline__))
+-vld4q_f64 (const float64_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmvq_f64 (float64x2_t __a)
+ {
+- float64x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4v2df ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 0);
+- ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 1);
+- ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 2);
+- ret.val[3] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 3);
+- return ret;
++ return __builtin_aarch64_reduc_smax_scal_v2df (__a);
+ }
+
+-/* vldn_dup */
++/* vmin */
+
+-__extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
+-vld2_dup_s8 (const int8_t * __a)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- int8x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+- ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+- return ret;
++ return __builtin_aarch64_smin_nanv2sf (__a, __b);
+ }
+
+-__extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
+-vld2_dup_s16 (const int16_t * __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- int16x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+- ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+- return ret;
++ return (float64x1_t)
++ { __builtin_aarch64_smin_nandf (vget_lane_f64 (__a, 0),
++ vget_lane_f64 (__b, 0)) };
+ }
+
+-__extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
+-vld2_dup_s32 (const int32_t * __a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- int32x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+- ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+- return ret;
++ return __builtin_aarch64_sminv8qi (__a, __b);
+ }
+
+-__extension__ static __inline float16x4x2_t __attribute__ ((__always_inline__))
+-vld2_dup_f16 (const float16_t * __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- float16x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv4hf ((const __builtin_aarch64_simd_hf *) __a);
+- ret.val[0] = __builtin_aarch64_get_dregoiv4hf (__o, 0);
+- ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregoiv4hf (__o, 1);
+- return ret;
++ return __builtin_aarch64_sminv4hi (__a, __b);
+ }
+
+-__extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
+-vld2_dup_f32 (const float32_t * __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- float32x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv2sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 0);
+- ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 1);
+- return ret;
++ return __builtin_aarch64_sminv2si (__a, __b);
+ }
+
+-__extension__ static __inline float64x1x2_t __attribute__ ((__always_inline__))
+-vld2_dup_f64 (const float64_t * __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- float64x1x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rdf ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 0)};
+- ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 1)};
+- return ret;
++ return (uint8x8_t) __builtin_aarch64_uminv8qi ((int8x8_t) __a,
++ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
+-vld2_dup_u8 (const uint8_t * __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- uint8x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+- ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+- return ret;
++ return (uint16x4_t) __builtin_aarch64_uminv4hi ((int16x4_t) __a,
++ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
+-vld2_dup_u16 (const uint16_t * __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- uint16x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+- ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+- return ret;
++ return (uint32x2_t) __builtin_aarch64_uminv2si ((int32x2_t) __a,
++ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
+-vld2_dup_u32 (const uint32_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- uint32x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+- ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+- return ret;
++ return __builtin_aarch64_smin_nanv4sf (__a, __b);
+ }
+
+-__extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
+-vld2_dup_p8 (const poly8_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- poly8x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+- ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+- return ret;
++ return __builtin_aarch64_smin_nanv2df (__a, __b);
+ }
+
+-__extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
+-vld2_dup_p16 (const poly16_t * __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- poly16x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+- ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+- return ret;
++ return __builtin_aarch64_sminv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int64x1x2_t __attribute__ ((__always_inline__))
+-vld2_dup_s64 (const int64_t * __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- int64x1x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rdi ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+- ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+- return ret;
++ return __builtin_aarch64_sminv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1x2_t __attribute__ ((__always_inline__))
+-vld2_dup_u64 (const uint64_t * __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- uint64x1x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rdi ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+- ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+- return ret;
++ return __builtin_aarch64_sminv4si (__a, __b);
+ }
+
+-__extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_s8 (const int8_t * __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- int8x16x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+- ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+- return ret;
++ return (uint8x16_t) __builtin_aarch64_uminv16qi ((int8x16_t) __a,
++ (int8x16_t) __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_u16 (uint16x8_t __a, uint16x8_t __b)
++{
++ return (uint16x8_t) __builtin_aarch64_uminv8hi ((int16x8_t) __a,
++ (int16x8_t) __b);
+ }
+
+-__extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_p8 (const poly8_t * __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_u32 (uint32x4_t __a, uint32x4_t __b)
++{
++ return (uint32x4_t) __builtin_aarch64_uminv4si ((int32x4_t) __a,
++ (int32x4_t) __b);
++}
++
++/* vminnm */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnm_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- poly8x16x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+- ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+- return ret;
++ return __builtin_aarch64_fminv2sf (__a, __b);
+ }
+
+-__extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_s16 (const int16_t * __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnm_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- int16x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+- ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+- return ret;
++ return (float64x1_t)
++ { __builtin_aarch64_fmindf (vget_lane_f64 (__a, 0),
++ vget_lane_f64 (__b, 0)) };
+ }
+
+-__extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_p16 (const poly16_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- poly16x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+- ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+- return ret;
++ return __builtin_aarch64_fminv4sf (__a, __b);
+ }
+
+-__extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_s32 (const int32_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- int32x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+- ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+- return ret;
++ return __builtin_aarch64_fminv2df (__a, __b);
+ }
+
+-__extension__ static __inline int64x2x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_s64 (const int64_t * __a)
++/* vminv */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminv_f32 (float32x2_t __a)
+ {
+- int64x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+- ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+- return ret;
++ return __builtin_aarch64_reduc_smin_nan_scal_v2sf (__a);
+ }
+
+-__extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_u8 (const uint8_t * __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminv_s8 (int8x8_t __a)
+ {
+- uint8x16x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+- ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v8qi (__a);
+ }
+
+-__extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_u16 (const uint16_t * __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminv_s16 (int16x4_t __a)
+ {
+- uint16x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+- ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v4hi (__a);
+ }
+
+-__extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_u32 (const uint32_t * __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminv_s32 (int32x2_t __a)
+ {
+- uint32x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+- ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v2si (__a);
+ }
+
+-__extension__ static __inline uint64x2x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_u64 (const uint64_t * __a)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminv_u8 (uint8x8_t __a)
+ {
+- uint64x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+- ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+- return ret;
++ return __builtin_aarch64_reduc_umin_scal_v8qi_uu (__a);
+ }
+
+-__extension__ static __inline float16x8x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_f16 (const float16_t * __a)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminv_u16 (uint16x4_t __a)
+ {
+- float16x8x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv8hf ((const __builtin_aarch64_simd_hf *) __a);
+- ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregoiv8hf (__o, 0);
+- ret.val[1] = __builtin_aarch64_get_qregoiv8hf (__o, 1);
+- return ret;
++ return __builtin_aarch64_reduc_umin_scal_v4hi_uu (__a);
+ }
+
+-__extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_f32 (const float32_t * __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminv_u32 (uint32x2_t __a)
+ {
+- float32x4x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv4sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 0);
+- ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 1);
+- return ret;
++ return __builtin_aarch64_reduc_umin_scal_v2si_uu (__a);
+ }
+
+-__extension__ static __inline float64x2x2_t __attribute__ ((__always_inline__))
+-vld2q_dup_f64 (const float64_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminvq_f32 (float32x4_t __a)
+ {
+- float64x2x2_t ret;
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_ld2rv2df ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 0);
+- ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 1);
+- return ret;
++ return __builtin_aarch64_reduc_smin_nan_scal_v4sf (__a);
+ }
+
+-__extension__ static __inline int64x1x3_t __attribute__ ((__always_inline__))
+-vld3_dup_s64 (const int64_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminvq_f64 (float64x2_t __a)
+ {
+- int64x1x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rdi ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+- ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+- ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smin_nan_scal_v2df (__a);
+ }
+
+-__extension__ static __inline uint64x1x3_t __attribute__ ((__always_inline__))
+-vld3_dup_u64 (const uint64_t * __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminvq_s8 (int8x16_t __a)
+ {
+- uint64x1x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rdi ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+- ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+- ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v16qi (__a);
+ }
+
+-__extension__ static __inline float64x1x3_t __attribute__ ((__always_inline__))
+-vld3_dup_f64 (const float64_t * __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminvq_s16 (int16x8_t __a)
+ {
+- float64x1x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rdf ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 0)};
+- ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 1)};
+- ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 2)};
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v8hi (__a);
+ }
+
+-__extension__ static __inline int8x8x3_t __attribute__ ((__always_inline__))
+-vld3_dup_s8 (const int8_t * __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminvq_s32 (int32x4_t __a)
+ {
+- int8x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+- ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+- ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v4si (__a);
+ }
+
+-__extension__ static __inline poly8x8x3_t __attribute__ ((__always_inline__))
+-vld3_dup_p8 (const poly8_t * __a)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminvq_u8 (uint8x16_t __a)
+ {
+- poly8x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+- ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+- ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_umin_scal_v16qi_uu (__a);
+ }
+
+-__extension__ static __inline int16x4x3_t __attribute__ ((__always_inline__))
+-vld3_dup_s16 (const int16_t * __a)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminvq_u16 (uint16x8_t __a)
+ {
+- int16x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+- ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+- ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_umin_scal_v8hi_uu (__a);
+ }
+
+-__extension__ static __inline poly16x4x3_t __attribute__ ((__always_inline__))
+-vld3_dup_p16 (const poly16_t * __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminvq_u32 (uint32x4_t __a)
+ {
+- poly16x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+- ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+- ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_umin_scal_v4si_uu (__a);
+ }
+
+-__extension__ static __inline int32x2x3_t __attribute__ ((__always_inline__))
+-vld3_dup_s32 (const int32_t * __a)
++/* vminnmv */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmv_f32 (float32x2_t __a)
+ {
+- int32x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
+- ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
+- ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v2sf (__a);
+ }
+
+-__extension__ static __inline uint8x8x3_t __attribute__ ((__always_inline__))
+-vld3_dup_u8 (const uint8_t * __a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmvq_f32 (float32x4_t __a)
+ {
+- uint8x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+- ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+- ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v4sf (__a);
+ }
+
+-__extension__ static __inline uint16x4x3_t __attribute__ ((__always_inline__))
+-vld3_dup_u16 (const uint16_t * __a)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmvq_f64 (float64x2_t __a)
+ {
+- uint16x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+- ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+- ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+- return ret;
++ return __builtin_aarch64_reduc_smin_scal_v2df (__a);
+ }
+
+-__extension__ static __inline uint32x2x3_t __attribute__ ((__always_inline__))
+-vld3_dup_u32 (const uint32_t * __a)
++/* vmla */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_f32 (float32x2_t a, float32x2_t b, float32x2_t c)
+ {
+- uint32x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
+- ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
+- ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
+- return ret;
++ return a + b * c;
+ }
+
+-__extension__ static __inline float16x4x3_t __attribute__ ((__always_inline__))
+-vld3_dup_f16 (const float16_t * __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
+ {
+- float16x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv4hf ((const __builtin_aarch64_simd_hf *) __a);
+- ret.val[0] = (float16x4_t) __builtin_aarch64_get_dregciv4hf (__o, 0);
+- ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregciv4hf (__o, 1);
+- ret.val[2] = (float16x4_t) __builtin_aarch64_get_dregciv4hf (__o, 2);
+- return ret;
++ return __a + __b * __c;
+ }
+
+-__extension__ static __inline float32x2x3_t __attribute__ ((__always_inline__))
+-vld3_dup_f32 (const float32_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_f32 (float32x4_t a, float32x4_t b, float32x4_t c)
+ {
+- float32x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv2sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 0);
+- ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 1);
+- ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 2);
+- return ret;
++ return a + b * c;
+ }
+
+-__extension__ static __inline int8x16x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_s8 (const int8_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_f64 (float64x2_t a, float64x2_t b, float64x2_t c)
+ {
+- int8x16x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+- ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+- ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+- return ret;
++ return a + b * c;
+ }
+
+-__extension__ static __inline poly8x16x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_p8 (const poly8_t * __a)
++/* vmla_lane */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_lane_f32 (float32x2_t __a, float32x2_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- poly8x16x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+- ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+- ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int16x8x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_s16 (const int16_t * __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_lane_s16 (int16x4_t __a, int16x4_t __b,
++ int16x4_t __c, const int __lane)
+ {
+- int16x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+- ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+- ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline poly16x8x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_p16 (const poly16_t * __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_lane_s32 (int32x2_t __a, int32x2_t __b,
++ int32x2_t __c, const int __lane)
+ {
+- poly16x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+- ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+- ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int32x4x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_s32 (const int32_t * __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_lane_u16 (uint16x4_t __a, uint16x4_t __b,
++ uint16x4_t __c, const int __lane)
+ {
+- int32x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
+- ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
+- ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int64x2x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_s64 (const int64_t * __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_lane_u32 (uint32x2_t __a, uint32x2_t __b,
++ uint32x2_t __c, const int __lane)
+ {
+- int64x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
+- ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
+- ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint8x16x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_u8 (const uint8_t * __a)
++/* vmla_laneq */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_laneq_f32 (float32x2_t __a, float32x2_t __b,
++ float32x4_t __c, const int __lane)
+ {
+- uint8x16x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+- ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+- ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint16x8x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_u16 (const uint16_t * __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_laneq_s16 (int16x4_t __a, int16x4_t __b,
++ int16x8_t __c, const int __lane)
+ {
+- uint16x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+- ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+- ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint32x4x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_u32 (const uint32_t * __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_laneq_s32 (int32x2_t __a, int32x2_t __b,
++ int32x4_t __c, const int __lane)
+ {
+- uint32x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
+- ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
+- ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint64x2x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_u64 (const uint64_t * __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
++ uint16x8_t __c, const int __lane)
+ {
+- uint64x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
+- ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
+- ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline float16x8x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_f16 (const float16_t * __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmla_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
++ uint32x4_t __c, const int __lane)
+ {
+- float16x8x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv8hf ((const __builtin_aarch64_simd_hf *) __a);
+- ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregciv8hf (__o, 0);
+- ret.val[1] = (float16x8_t) __builtin_aarch64_get_qregciv8hf (__o, 1);
+- ret.val[2] = (float16x8_t) __builtin_aarch64_get_qregciv8hf (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline float32x4x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_f32 (const float32_t * __a)
++/* vmlaq_lane */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_lane_f32 (float32x4_t __a, float32x4_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- float32x4x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv4sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 0);
+- ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 1);
+- ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline float64x2x3_t __attribute__ ((__always_inline__))
+-vld3q_dup_f64 (const float64_t * __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_lane_s16 (int16x8_t __a, int16x8_t __b,
++ int16x4_t __c, const int __lane)
+ {
+- float64x2x3_t ret;
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_ld3rv2df ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 0);
+- ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 1);
+- ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 2);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int64x1x4_t __attribute__ ((__always_inline__))
+-vld4_dup_s64 (const int64_t * __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_lane_s32 (int32x4_t __a, int32x4_t __b,
++ int32x2_t __c, const int __lane)
+ {
+- int64x1x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rdi ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
+- ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
+- ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
+- ret.val[3] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint64x1x4_t __attribute__ ((__always_inline__))
+-vld4_dup_u64 (const uint64_t * __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
++ uint16x4_t __c, const int __lane)
+ {
+- uint64x1x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rdi ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
+- ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
+- ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
+- ret.val[3] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline float64x1x4_t __attribute__ ((__always_inline__))
+-vld4_dup_f64 (const float64_t * __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
++ uint32x2_t __c, const int __lane)
+ {
+- float64x1x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rdf ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 0)};
+- ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 1)};
+- ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 2)};
+- ret.val[3] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 3)};
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int8x8x4_t __attribute__ ((__always_inline__))
+-vld4_dup_s8 (const int8_t * __a)
++ /* vmlaq_laneq */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_laneq_f32 (float32x4_t __a, float32x4_t __b,
++ float32x4_t __c, const int __lane)
+ {
+- int8x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+- ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+- ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+- ret.val[3] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline poly8x8x4_t __attribute__ ((__always_inline__))
+-vld4_dup_p8 (const poly8_t * __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_laneq_s16 (int16x8_t __a, int16x8_t __b,
++ int16x8_t __c, const int __lane)
+ {
+- poly8x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+- ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+- ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+- ret.val[3] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int16x4x4_t __attribute__ ((__always_inline__))
+-vld4_dup_s16 (const int16_t * __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_laneq_s32 (int32x4_t __a, int32x4_t __b,
++ int32x4_t __c, const int __lane)
+ {
+- int16x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+- ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+- ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+- ret.val[3] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline poly16x4x4_t __attribute__ ((__always_inline__))
+-vld4_dup_p16 (const poly16_t * __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
++ uint16x8_t __c, const int __lane)
+ {
+- poly16x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+- ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+- ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+- ret.val[3] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int32x2x4_t __attribute__ ((__always_inline__))
+-vld4_dup_s32 (const int32_t * __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlaq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
++ uint32x4_t __c, const int __lane)
+ {
+- int32x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
+- ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
+- ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
+- ret.val[3] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
+- return ret;
++ return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint8x8x4_t __attribute__ ((__always_inline__))
+-vld4_dup_u8 (const uint8_t * __a)
++/* vmls */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_f32 (float32x2_t a, float32x2_t b, float32x2_t c)
+ {
+- uint8x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+- ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+- ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+- ret.val[3] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+- return ret;
++ return a - b * c;
+ }
+
+-__extension__ static __inline uint16x4x4_t __attribute__ ((__always_inline__))
+-vld4_dup_u16 (const uint16_t * __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
+ {
+- uint16x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+- ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+- ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+- ret.val[3] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+- return ret;
++ return __a - __b * __c;
+ }
+
+-__extension__ static __inline uint32x2x4_t __attribute__ ((__always_inline__))
+-vld4_dup_u32 (const uint32_t * __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_f32 (float32x4_t a, float32x4_t b, float32x4_t c)
+ {
+- uint32x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv2si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
+- ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
+- ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
+- ret.val[3] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
+- return ret;
++ return a - b * c;
+ }
+
+-__extension__ static __inline float16x4x4_t __attribute__ ((__always_inline__))
+-vld4_dup_f16 (const float16_t * __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_f64 (float64x2_t a, float64x2_t b, float64x2_t c)
+ {
+- float16x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv4hf ((const __builtin_aarch64_simd_hf *) __a);
+- ret.val[0] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 0);
+- ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 1);
+- ret.val[2] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 2);
+- ret.val[3] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 3);
+- return ret;
++ return a - b * c;
+ }
+
+-__extension__ static __inline float32x2x4_t __attribute__ ((__always_inline__))
+-vld4_dup_f32 (const float32_t * __a)
++/* vmls_lane */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_lane_f32 (float32x2_t __a, float32x2_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- float32x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv2sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 0);
+- ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 1);
+- ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 2);
+- ret.val[3] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int8x16x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_s8 (const int8_t * __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_lane_s16 (int16x4_t __a, int16x4_t __b,
++ int16x4_t __c, const int __lane)
+ {
+- int8x16x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+- ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+- ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+- ret.val[3] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline poly8x16x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_p8 (const poly8_t * __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_lane_s32 (int32x2_t __a, int32x2_t __b,
++ int32x2_t __c, const int __lane)
+ {
+- poly8x16x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+- ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+- ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+- ret.val[3] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int16x8x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_s16 (const int16_t * __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_lane_u16 (uint16x4_t __a, uint16x4_t __b,
++ uint16x4_t __c, const int __lane)
+ {
+- int16x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+- ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+- ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+- ret.val[3] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline poly16x8x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_p16 (const poly16_t * __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_lane_u32 (uint32x2_t __a, uint32x2_t __b,
++ uint32x2_t __c, const int __lane)
+ {
+- poly16x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+- ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+- ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+- ret.val[3] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int32x4x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_s32 (const int32_t * __a)
++/* vmls_laneq */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_laneq_f32 (float32x2_t __a, float32x2_t __b,
++ float32x4_t __c, const int __lane)
+ {
+- int32x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
+- ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
+- ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
+- ret.val[3] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline int64x2x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_s64 (const int64_t * __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_laneq_s16 (int16x4_t __a, int16x4_t __b,
++ int16x8_t __c, const int __lane)
+ {
+- int64x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
+- ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
+- ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
+- ret.val[3] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint8x16x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_u8 (const uint8_t * __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_laneq_s32 (int32x2_t __a, int32x2_t __b,
++ int32x4_t __c, const int __lane)
+ {
+- uint8x16x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+- ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+- ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+- ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+- ret.val[3] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint16x8x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_u16 (const uint16_t * __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
++ uint16x8_t __c, const int __lane)
+ {
+- uint16x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+- ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+- ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+- ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+- ret.val[3] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint32x4x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_u32 (const uint32_t * __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmls_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
++ uint32x4_t __c, const int __lane)
+ {
+- uint32x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv4si ((const __builtin_aarch64_simd_si *) __a);
+- ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
+- ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
+- ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
+- ret.val[3] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline uint64x2x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_u64 (const uint64_t * __a)
++/* vmlsq_lane */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_lane_f32 (float32x4_t __a, float32x4_t __b,
++ float32x2_t __c, const int __lane)
+ {
+- uint64x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
+- ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
+- ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
+- ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
+- ret.val[3] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline float16x8x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_f16 (const float16_t * __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_lane_s16 (int16x8_t __a, int16x8_t __b,
++ int16x4_t __c, const int __lane)
+ {
+- float16x8x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv8hf ((const __builtin_aarch64_simd_hf *) __a);
+- ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 0);
+- ret.val[1] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 1);
+- ret.val[2] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 2);
+- ret.val[3] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline float32x4x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_f32 (const float32_t * __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_lane_s32 (int32x4_t __a, int32x4_t __b,
++ int32x2_t __c, const int __lane)
+ {
+- float32x4x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv4sf ((const __builtin_aarch64_simd_sf *) __a);
+- ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 0);
+- ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 1);
+- ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 2);
+- ret.val[3] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__extension__ static __inline float64x2x4_t __attribute__ ((__always_inline__))
+-vld4q_dup_f64 (const float64_t * __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
++ uint16x4_t __c, const int __lane)
+ {
+- float64x2x4_t ret;
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_ld4rv2df ((const __builtin_aarch64_simd_df *) __a);
+- ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 0);
+- ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 1);
+- ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 2);
+- ret.val[3] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 3);
+- return ret;
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-/* vld2_lane */
+-
+-#define __LD2_LANE_FUNC(intype, vectype, largetype, ptrtype, mode, \
+- qmode, ptrmode, funcsuffix, signedtype) \
+-__extension__ static __inline intype __attribute__ ((__always_inline__)) \
+-vld2_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
+-{ \
+- __builtin_aarch64_simd_oi __o; \
+- largetype __temp; \
+- __temp.val[0] = \
+- vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0)); \
+- __temp.val[1] = \
+- vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0)); \
+- __o = __builtin_aarch64_set_qregoi##qmode (__o, \
+- (signedtype) __temp.val[0], \
+- 0); \
+- __o = __builtin_aarch64_set_qregoi##qmode (__o, \
+- (signedtype) __temp.val[1], \
+- 1); \
+- __o = __builtin_aarch64_ld2_lane##mode ( \
+- (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
+- __b.val[0] = (vectype) __builtin_aarch64_get_dregoidi (__o, 0); \
+- __b.val[1] = (vectype) __builtin_aarch64_get_dregoidi (__o, 1); \
+- return __b; \
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
++ uint32x2_t __c, const int __lane)
++{
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__LD2_LANE_FUNC (float16x4x2_t, float16x4_t, float16x8x2_t, float16_t, v4hf,
+- v8hf, hf, f16, float16x8_t)
+-__LD2_LANE_FUNC (float32x2x2_t, float32x2_t, float32x4x2_t, float32_t, v2sf, v4sf,
+- sf, f32, float32x4_t)
+-__LD2_LANE_FUNC (float64x1x2_t, float64x1_t, float64x2x2_t, float64_t, df, v2df,
+- df, f64, float64x2_t)
+-__LD2_LANE_FUNC (poly8x8x2_t, poly8x8_t, poly8x16x2_t, poly8_t, v8qi, v16qi, qi, p8,
+- int8x16_t)
+-__LD2_LANE_FUNC (poly16x4x2_t, poly16x4_t, poly16x8x2_t, poly16_t, v4hi, v8hi, hi,
+- p16, int16x8_t)
+-__LD2_LANE_FUNC (int8x8x2_t, int8x8_t, int8x16x2_t, int8_t, v8qi, v16qi, qi, s8,
+- int8x16_t)
+-__LD2_LANE_FUNC (int16x4x2_t, int16x4_t, int16x8x2_t, int16_t, v4hi, v8hi, hi, s16,
+- int16x8_t)
+-__LD2_LANE_FUNC (int32x2x2_t, int32x2_t, int32x4x2_t, int32_t, v2si, v4si, si, s32,
+- int32x4_t)
+-__LD2_LANE_FUNC (int64x1x2_t, int64x1_t, int64x2x2_t, int64_t, di, v2di, di, s64,
+- int64x2_t)
+-__LD2_LANE_FUNC (uint8x8x2_t, uint8x8_t, uint8x16x2_t, uint8_t, v8qi, v16qi, qi, u8,
+- int8x16_t)
+-__LD2_LANE_FUNC (uint16x4x2_t, uint16x4_t, uint16x8x2_t, uint16_t, v4hi, v8hi, hi,
+- u16, int16x8_t)
+-__LD2_LANE_FUNC (uint32x2x2_t, uint32x2_t, uint32x4x2_t, uint32_t, v2si, v4si, si,
+- u32, int32x4_t)
+-__LD2_LANE_FUNC (uint64x1x2_t, uint64x1_t, uint64x2x2_t, uint64_t, di, v2di, di,
+- u64, int64x2_t)
++ /* vmlsq_laneq */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_laneq_f32 (float32x4_t __a, float32x4_t __b,
++ float32x4_t __c, const int __lane)
++{
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++}
+
+-#undef __LD2_LANE_FUNC
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_laneq_s16 (int16x8_t __a, int16x8_t __b,
++ int16x8_t __c, const int __lane)
++{
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++}
+
+-/* vld2q_lane */
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_laneq_s32 (int32x4_t __a, int32x4_t __b,
++ int32x4_t __c, const int __lane)
++{
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++}
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
++ uint16x8_t __c, const int __lane)
++{
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++}
+
+-#define __LD2_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
+-__extension__ static __inline intype __attribute__ ((__always_inline__)) \
+-vld2q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
+-{ \
+- __builtin_aarch64_simd_oi __o; \
+- intype ret; \
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) __b.val[0], 0); \
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) __b.val[1], 1); \
+- __o = __builtin_aarch64_ld2_lane##mode ( \
+- (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
+- ret.val[0] = (vtype) __builtin_aarch64_get_qregoiv4si (__o, 0); \
+- ret.val[1] = (vtype) __builtin_aarch64_get_qregoiv4si (__o, 1); \
+- return ret; \
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmlsq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
++ uint32x4_t __c, const int __lane)
++{
++ return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+ }
+
+-__LD2_LANE_FUNC (float16x8x2_t, float16x8_t, float16_t, v8hf, hf, f16)
+-__LD2_LANE_FUNC (float32x4x2_t, float32x4_t, float32_t, v4sf, sf, f32)
+-__LD2_LANE_FUNC (float64x2x2_t, float64x2_t, float64_t, v2df, df, f64)
+-__LD2_LANE_FUNC (poly8x16x2_t, poly8x16_t, poly8_t, v16qi, qi, p8)
+-__LD2_LANE_FUNC (poly16x8x2_t, poly16x8_t, poly16_t, v8hi, hi, p16)
+-__LD2_LANE_FUNC (int8x16x2_t, int8x16_t, int8_t, v16qi, qi, s8)
+-__LD2_LANE_FUNC (int16x8x2_t, int16x8_t, int16_t, v8hi, hi, s16)
+-__LD2_LANE_FUNC (int32x4x2_t, int32x4_t, int32_t, v4si, si, s32)
+-__LD2_LANE_FUNC (int64x2x2_t, int64x2_t, int64_t, v2di, di, s64)
+-__LD2_LANE_FUNC (uint8x16x2_t, uint8x16_t, uint8_t, v16qi, qi, u8)
+-__LD2_LANE_FUNC (uint16x8x2_t, uint16x8_t, uint16_t, v8hi, hi, u16)
+-__LD2_LANE_FUNC (uint32x4x2_t, uint32x4_t, uint32_t, v4si, si, u32)
+-__LD2_LANE_FUNC (uint64x2x2_t, uint64x2_t, uint64_t, v2di, di, u64)
++/* vmov_n_ */
+
+-#undef __LD2_LANE_FUNC
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_f16 (float16_t __a)
++{
++ return vdup_n_f16 (__a);
++}
+
+-/* vld3_lane */
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_f32 (float32_t __a)
++{
++ return vdup_n_f32 (__a);
++}
+
+-#define __LD3_LANE_FUNC(intype, vectype, largetype, ptrtype, mode, \
+- qmode, ptrmode, funcsuffix, signedtype) \
+-__extension__ static __inline intype __attribute__ ((__always_inline__)) \
+-vld3_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
+-{ \
+- __builtin_aarch64_simd_ci __o; \
+- largetype __temp; \
+- __temp.val[0] = \
+- vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0)); \
+- __temp.val[1] = \
+- vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0)); \
+- __temp.val[2] = \
+- vcombine_##funcsuffix (__b.val[2], vcreate_##funcsuffix (0)); \
+- __o = __builtin_aarch64_set_qregci##qmode (__o, \
+- (signedtype) __temp.val[0], \
+- 0); \
+- __o = __builtin_aarch64_set_qregci##qmode (__o, \
+- (signedtype) __temp.val[1], \
+- 1); \
+- __o = __builtin_aarch64_set_qregci##qmode (__o, \
+- (signedtype) __temp.val[2], \
+- 2); \
+- __o = __builtin_aarch64_ld3_lane##mode ( \
+- (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
+- __b.val[0] = (vectype) __builtin_aarch64_get_dregcidi (__o, 0); \
+- __b.val[1] = (vectype) __builtin_aarch64_get_dregcidi (__o, 1); \
+- __b.val[2] = (vectype) __builtin_aarch64_get_dregcidi (__o, 2); \
+- return __b; \
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_f64 (float64_t __a)
++{
++ return (float64x1_t) {__a};
+ }
+
+-__LD3_LANE_FUNC (float16x4x3_t, float16x4_t, float16x8x3_t, float16_t, v4hf,
+- v8hf, hf, f16, float16x8_t)
+-__LD3_LANE_FUNC (float32x2x3_t, float32x2_t, float32x4x3_t, float32_t, v2sf, v4sf,
+- sf, f32, float32x4_t)
+-__LD3_LANE_FUNC (float64x1x3_t, float64x1_t, float64x2x3_t, float64_t, df, v2df,
+- df, f64, float64x2_t)
+-__LD3_LANE_FUNC (poly8x8x3_t, poly8x8_t, poly8x16x3_t, poly8_t, v8qi, v16qi, qi, p8,
+- int8x16_t)
+-__LD3_LANE_FUNC (poly16x4x3_t, poly16x4_t, poly16x8x3_t, poly16_t, v4hi, v8hi, hi,
+- p16, int16x8_t)
+-__LD3_LANE_FUNC (int8x8x3_t, int8x8_t, int8x16x3_t, int8_t, v8qi, v16qi, qi, s8,
+- int8x16_t)
+-__LD3_LANE_FUNC (int16x4x3_t, int16x4_t, int16x8x3_t, int16_t, v4hi, v8hi, hi, s16,
+- int16x8_t)
+-__LD3_LANE_FUNC (int32x2x3_t, int32x2_t, int32x4x3_t, int32_t, v2si, v4si, si, s32,
+- int32x4_t)
+-__LD3_LANE_FUNC (int64x1x3_t, int64x1_t, int64x2x3_t, int64_t, di, v2di, di, s64,
+- int64x2_t)
+-__LD3_LANE_FUNC (uint8x8x3_t, uint8x8_t, uint8x16x3_t, uint8_t, v8qi, v16qi, qi, u8,
+- int8x16_t)
+-__LD3_LANE_FUNC (uint16x4x3_t, uint16x4_t, uint16x8x3_t, uint16_t, v4hi, v8hi, hi,
+- u16, int16x8_t)
+-__LD3_LANE_FUNC (uint32x2x3_t, uint32x2_t, uint32x4x3_t, uint32_t, v2si, v4si, si,
+- u32, int32x4_t)
+-__LD3_LANE_FUNC (uint64x1x3_t, uint64x1_t, uint64x2x3_t, uint64_t, di, v2di, di,
+- u64, int64x2_t)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_p8 (poly8_t __a)
++{
++ return vdup_n_p8 (__a);
++}
+
+-#undef __LD3_LANE_FUNC
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_p16 (poly16_t __a)
++{
++ return vdup_n_p16 (__a);
++}
+
+-/* vld3q_lane */
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_p64 (poly64_t __a)
++{
++ return vdup_n_p64 (__a);
++}
+
+-#define __LD3_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
+-__extension__ static __inline intype __attribute__ ((__always_inline__)) \
+-vld3q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
+-{ \
+- __builtin_aarch64_simd_ci __o; \
+- intype ret; \
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[0], 0); \
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[1], 1); \
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[2], 2); \
+- __o = __builtin_aarch64_ld3_lane##mode ( \
+- (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
+- ret.val[0] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 0); \
+- ret.val[1] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 1); \
+- ret.val[2] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 2); \
+- return ret; \
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_s8 (int8_t __a)
++{
++ return vdup_n_s8 (__a);
+ }
+
+-__LD3_LANE_FUNC (float16x8x3_t, float16x8_t, float16_t, v8hf, hf, f16)
+-__LD3_LANE_FUNC (float32x4x3_t, float32x4_t, float32_t, v4sf, sf, f32)
+-__LD3_LANE_FUNC (float64x2x3_t, float64x2_t, float64_t, v2df, df, f64)
+-__LD3_LANE_FUNC (poly8x16x3_t, poly8x16_t, poly8_t, v16qi, qi, p8)
+-__LD3_LANE_FUNC (poly16x8x3_t, poly16x8_t, poly16_t, v8hi, hi, p16)
+-__LD3_LANE_FUNC (int8x16x3_t, int8x16_t, int8_t, v16qi, qi, s8)
+-__LD3_LANE_FUNC (int16x8x3_t, int16x8_t, int16_t, v8hi, hi, s16)
+-__LD3_LANE_FUNC (int32x4x3_t, int32x4_t, int32_t, v4si, si, s32)
+-__LD3_LANE_FUNC (int64x2x3_t, int64x2_t, int64_t, v2di, di, s64)
+-__LD3_LANE_FUNC (uint8x16x3_t, uint8x16_t, uint8_t, v16qi, qi, u8)
+-__LD3_LANE_FUNC (uint16x8x3_t, uint16x8_t, uint16_t, v8hi, hi, u16)
+-__LD3_LANE_FUNC (uint32x4x3_t, uint32x4_t, uint32_t, v4si, si, u32)
+-__LD3_LANE_FUNC (uint64x2x3_t, uint64x2_t, uint64_t, v2di, di, u64)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_s16 (int16_t __a)
++{
++ return vdup_n_s16 (__a);
++}
+
+-#undef __LD3_LANE_FUNC
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_s32 (int32_t __a)
++{
++ return vdup_n_s32 (__a);
++}
+
+-/* vld4_lane */
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_s64 (int64_t __a)
++{
++ return (int64x1_t) {__a};
++}
+
+-#define __LD4_LANE_FUNC(intype, vectype, largetype, ptrtype, mode, \
+- qmode, ptrmode, funcsuffix, signedtype) \
+-__extension__ static __inline intype __attribute__ ((__always_inline__)) \
+-vld4_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
+-{ \
+- __builtin_aarch64_simd_xi __o; \
+- largetype __temp; \
+- __temp.val[0] = \
+- vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0)); \
+- __temp.val[1] = \
+- vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0)); \
+- __temp.val[2] = \
+- vcombine_##funcsuffix (__b.val[2], vcreate_##funcsuffix (0)); \
+- __temp.val[3] = \
+- vcombine_##funcsuffix (__b.val[3], vcreate_##funcsuffix (0)); \
+- __o = __builtin_aarch64_set_qregxi##qmode (__o, \
+- (signedtype) __temp.val[0], \
+- 0); \
+- __o = __builtin_aarch64_set_qregxi##qmode (__o, \
+- (signedtype) __temp.val[1], \
+- 1); \
+- __o = __builtin_aarch64_set_qregxi##qmode (__o, \
+- (signedtype) __temp.val[2], \
+- 2); \
+- __o = __builtin_aarch64_set_qregxi##qmode (__o, \
+- (signedtype) __temp.val[3], \
+- 3); \
+- __o = __builtin_aarch64_ld4_lane##mode ( \
+- (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
+- __b.val[0] = (vectype) __builtin_aarch64_get_dregxidi (__o, 0); \
+- __b.val[1] = (vectype) __builtin_aarch64_get_dregxidi (__o, 1); \
+- __b.val[2] = (vectype) __builtin_aarch64_get_dregxidi (__o, 2); \
+- __b.val[3] = (vectype) __builtin_aarch64_get_dregxidi (__o, 3); \
+- return __b; \
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_u8 (uint8_t __a)
++{
++ return vdup_n_u8 (__a);
+ }
+
+-/* vld4q_lane */
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_u16 (uint16_t __a)
++{
++ return vdup_n_u16 (__a);
++}
+
+-__LD4_LANE_FUNC (float16x4x4_t, float16x4_t, float16x8x4_t, float16_t, v4hf,
+- v8hf, hf, f16, float16x8_t)
+-__LD4_LANE_FUNC (float32x2x4_t, float32x2_t, float32x4x4_t, float32_t, v2sf, v4sf,
+- sf, f32, float32x4_t)
+-__LD4_LANE_FUNC (float64x1x4_t, float64x1_t, float64x2x4_t, float64_t, df, v2df,
+- df, f64, float64x2_t)
+-__LD4_LANE_FUNC (poly8x8x4_t, poly8x8_t, poly8x16x4_t, poly8_t, v8qi, v16qi, qi, p8,
+- int8x16_t)
+-__LD4_LANE_FUNC (poly16x4x4_t, poly16x4_t, poly16x8x4_t, poly16_t, v4hi, v8hi, hi,
+- p16, int16x8_t)
+-__LD4_LANE_FUNC (int8x8x4_t, int8x8_t, int8x16x4_t, int8_t, v8qi, v16qi, qi, s8,
+- int8x16_t)
+-__LD4_LANE_FUNC (int16x4x4_t, int16x4_t, int16x8x4_t, int16_t, v4hi, v8hi, hi, s16,
+- int16x8_t)
+-__LD4_LANE_FUNC (int32x2x4_t, int32x2_t, int32x4x4_t, int32_t, v2si, v4si, si, s32,
+- int32x4_t)
+-__LD4_LANE_FUNC (int64x1x4_t, int64x1_t, int64x2x4_t, int64_t, di, v2di, di, s64,
+- int64x2_t)
+-__LD4_LANE_FUNC (uint8x8x4_t, uint8x8_t, uint8x16x4_t, uint8_t, v8qi, v16qi, qi, u8,
+- int8x16_t)
+-__LD4_LANE_FUNC (uint16x4x4_t, uint16x4_t, uint16x8x4_t, uint16_t, v4hi, v8hi, hi,
+- u16, int16x8_t)
+-__LD4_LANE_FUNC (uint32x2x4_t, uint32x2_t, uint32x4x4_t, uint32_t, v2si, v4si, si,
+- u32, int32x4_t)
+-__LD4_LANE_FUNC (uint64x1x4_t, uint64x1_t, uint64x2x4_t, uint64_t, di, v2di, di,
+- u64, int64x2_t)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_u32 (uint32_t __a)
++{
++ return vdup_n_u32 (__a);
++}
++
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_u64 (uint64_t __a)
++{
++ return (uint64x1_t) {__a};
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_f16 (float16_t __a)
++{
++ return vdupq_n_f16 (__a);
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_f32 (float32_t __a)
++{
++ return vdupq_n_f32 (__a);
++}
++
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_f64 (float64_t __a)
++{
++ return vdupq_n_f64 (__a);
++}
+
+-#undef __LD4_LANE_FUNC
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_p8 (poly8_t __a)
++{
++ return vdupq_n_p8 (__a);
++}
+
+-/* vld4q_lane */
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_p16 (poly16_t __a)
++{
++ return vdupq_n_p16 (__a);
++}
+
+-#define __LD4_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
+-__extension__ static __inline intype __attribute__ ((__always_inline__)) \
+-vld4q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
+-{ \
+- __builtin_aarch64_simd_xi __o; \
+- intype ret; \
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[0], 0); \
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[1], 1); \
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[2], 2); \
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[3], 3); \
+- __o = __builtin_aarch64_ld4_lane##mode ( \
+- (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
+- ret.val[0] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 0); \
+- ret.val[1] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 1); \
+- ret.val[2] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 2); \
+- ret.val[3] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 3); \
+- return ret; \
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_p64 (poly64_t __a)
++{
++ return vdupq_n_p64 (__a);
+ }
+
+-__LD4_LANE_FUNC (float16x8x4_t, float16x8_t, float16_t, v8hf, hf, f16)
+-__LD4_LANE_FUNC (float32x4x4_t, float32x4_t, float32_t, v4sf, sf, f32)
+-__LD4_LANE_FUNC (float64x2x4_t, float64x2_t, float64_t, v2df, df, f64)
+-__LD4_LANE_FUNC (poly8x16x4_t, poly8x16_t, poly8_t, v16qi, qi, p8)
+-__LD4_LANE_FUNC (poly16x8x4_t, poly16x8_t, poly16_t, v8hi, hi, p16)
+-__LD4_LANE_FUNC (int8x16x4_t, int8x16_t, int8_t, v16qi, qi, s8)
+-__LD4_LANE_FUNC (int16x8x4_t, int16x8_t, int16_t, v8hi, hi, s16)
+-__LD4_LANE_FUNC (int32x4x4_t, int32x4_t, int32_t, v4si, si, s32)
+-__LD4_LANE_FUNC (int64x2x4_t, int64x2_t, int64_t, v2di, di, s64)
+-__LD4_LANE_FUNC (uint8x16x4_t, uint8x16_t, uint8_t, v16qi, qi, u8)
+-__LD4_LANE_FUNC (uint16x8x4_t, uint16x8_t, uint16_t, v8hi, hi, u16)
+-__LD4_LANE_FUNC (uint32x4x4_t, uint32x4_t, uint32_t, v4si, si, u32)
+-__LD4_LANE_FUNC (uint64x2x4_t, uint64x2_t, uint64_t, v2di, di, u64)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_s8 (int8_t __a)
++{
++ return vdupq_n_s8 (__a);
++}
+
+-#undef __LD4_LANE_FUNC
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_s16 (int16_t __a)
++{
++ return vdupq_n_s16 (__a);
++}
+
+-/* vmax */
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_s32 (int32_t __a)
++{
++ return vdupq_n_s32 (__a);
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmax_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_s64 (int64_t __a)
+ {
+- return __builtin_aarch64_smax_nanv2sf (__a, __b);
++ return vdupq_n_s64 (__a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vmax_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_u8 (uint8_t __a)
+ {
+- return __builtin_aarch64_smaxv8qi (__a, __b);
++ return vdupq_n_u8 (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmax_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_u16 (uint16_t __a)
+ {
+- return __builtin_aarch64_smaxv4hi (__a, __b);
++ return vdupq_n_u16 (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmax_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_u32 (uint32_t __a)
+ {
+- return __builtin_aarch64_smaxv2si (__a, __b);
++ return vdupq_n_u32 (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vmax_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_u64 (uint64_t __a)
+ {
+- return (uint8x8_t) __builtin_aarch64_umaxv8qi ((int8x8_t) __a,
+- (int8x8_t) __b);
++ return vdupq_n_u64 (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmax_u16 (uint16x4_t __a, uint16x4_t __b)
++/* vmul_lane */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_lane_f32 (float32x2_t __a, float32x2_t __b, const int __lane)
+ {
+- return (uint16x4_t) __builtin_aarch64_umaxv4hi ((int16x4_t) __a,
+- (int16x4_t) __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmax_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_lane_f64 (float64x1_t __a, float64x1_t __b, const int __lane)
+ {
+- return (uint32x2_t) __builtin_aarch64_umaxv2si ((int32x2_t) __a,
+- (int32x2_t) __b);
++ return __a * __b;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmaxq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_lane_s16 (int16x4_t __a, int16x4_t __b, const int __lane)
+ {
+- return __builtin_aarch64_smax_nanv4sf (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmaxq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_lane_s32 (int32x2_t __a, int32x2_t __b, const int __lane)
+ {
+- return __builtin_aarch64_smax_nanv2df (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vmaxq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_lane_u16 (uint16x4_t __a, uint16x4_t __b, const int __lane)
+ {
+- return __builtin_aarch64_smaxv16qi (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmaxq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_lane_u32 (uint32x2_t __a, uint32x2_t __b, const int __lane)
+ {
+- return __builtin_aarch64_smaxv8hi (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmaxq_s32 (int32x4_t __a, int32x4_t __b)
++/* vmuld_lane */
++
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmuld_lane_f64 (float64_t __a, float64x1_t __b, const int __lane)
+ {
+- return __builtin_aarch64_smaxv4si (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vmaxq_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmuld_laneq_f64 (float64_t __a, float64x2_t __b, const int __lane)
+ {
+- return (uint8x16_t) __builtin_aarch64_umaxv16qi ((int8x16_t) __a,
+- (int8x16_t) __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmaxq_u16 (uint16x8_t __a, uint16x8_t __b)
++/* vmuls_lane */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmuls_lane_f32 (float32_t __a, float32x2_t __b, const int __lane)
+ {
+- return (uint16x8_t) __builtin_aarch64_umaxv8hi ((int16x8_t) __a,
+- (int16x8_t) __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmaxq_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmuls_laneq_f32 (float32_t __a, float32x4_t __b, const int __lane)
+ {
+- return (uint32x4_t) __builtin_aarch64_umaxv4si ((int32x4_t) __a,
+- (int32x4_t) __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+-/* vmulx */
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmulx_f32 (float32x2_t __a, float32x2_t __b)
++/* vmul_laneq */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_laneq_f32 (float32x2_t __a, float32x4_t __b, const int __lane)
+ {
+- return __builtin_aarch64_fmulxv2sf (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmulxq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_laneq_f64 (float64x1_t __a, float64x2_t __b, const int __lane)
+ {
+- return __builtin_aarch64_fmulxv4sf (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vmulx_f64 (float64x1_t __a, float64x1_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __lane)
+ {
+- return (float64x1_t) {__builtin_aarch64_fmulxdf (__a[0], __b[0])};
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmulxq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __lane)
+ {
+- return __builtin_aarch64_fmulxv2df (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vmulxs_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_laneq_u16 (uint16x4_t __a, uint16x8_t __b, const int __lane)
+ {
+- return __builtin_aarch64_fmulxsf (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vmulxd_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_laneq_u32 (uint32x2_t __a, uint32x4_t __b, const int __lane)
+ {
+- return __builtin_aarch64_fmulxdf (__a, __b);
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmulx_lane_f32 (float32x2_t __a, float32x2_t __v, const int __lane)
++/* vmul_n */
++
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_n_f64 (float64x1_t __a, float64_t __b)
+ {
+- return vmulx_f32 (__a, __aarch64_vdup_lane_f32 (__v, __lane));
++ return (float64x1_t) { vget_lane_f64 (__a, 0) * __b };
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vmulx_lane_f64 (float64x1_t __a, float64x1_t __v, const int __lane)
++/* vmulq_lane */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_lane_f32 (float32x4_t __a, float32x2_t __b, const int __lane)
+ {
+- return vmulx_f64 (__a, __aarch64_vdup_lane_f64 (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmulxq_lane_f32 (float32x4_t __a, float32x2_t __v, const int __lane)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_lane_f64 (float64x2_t __a, float64x1_t __b, const int __lane)
+ {
+- return vmulxq_f32 (__a, __aarch64_vdupq_lane_f32 (__v, __lane));
++ __AARCH64_LANE_CHECK (__a, __lane);
++ return __a * __b[0];
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmulxq_lane_f64 (float64x2_t __a, float64x1_t __v, const int __lane)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __lane)
+ {
+- return vmulxq_f64 (__a, __aarch64_vdupq_lane_f64 (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmulx_laneq_f32 (float32x2_t __a, float32x4_t __v, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __lane)
+ {
+- return vmulx_f32 (__a, __aarch64_vdup_laneq_f32 (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vmulx_laneq_f64 (float64x1_t __a, float64x2_t __v, const int __lane)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_lane_u16 (uint16x8_t __a, uint16x4_t __b, const int __lane)
+ {
+- return vmulx_f64 (__a, __aarch64_vdup_laneq_f64 (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmulxq_laneq_f32 (float32x4_t __a, float32x4_t __v, const int __lane)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_lane_u32 (uint32x4_t __a, uint32x2_t __b, const int __lane)
+ {
+- return vmulxq_f32 (__a, __aarch64_vdupq_laneq_f32 (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmulxq_laneq_f64 (float64x2_t __a, float64x2_t __v, const int __lane)
++/* vmulq_laneq */
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_laneq_f32 (float32x4_t __a, float32x4_t __b, const int __lane)
+ {
+- return vmulxq_f64 (__a, __aarch64_vdupq_laneq_f64 (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vmulxs_lane_f32 (float32_t __a, float32x2_t __v, const int __lane)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_laneq_f64 (float64x2_t __a, float64x2_t __b, const int __lane)
+ {
+- return vmulxs_f32 (__a, __aarch64_vget_lane_any (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vmulxs_laneq_f32 (float32_t __a, float32x4_t __v, const int __lane)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __lane)
+ {
+- return vmulxs_f32 (__a, __aarch64_vget_lane_any (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vmulxd_lane_f64 (float64_t __a, float64x1_t __v, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __lane)
+ {
+- return vmulxd_f64 (__a, __aarch64_vget_lane_any (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vmulxd_laneq_f64 (float64_t __a, float64x2_t __v, const int __lane)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_laneq_u16 (uint16x8_t __a, uint16x8_t __b, const int __lane)
+ {
+- return vmulxd_f64 (__a, __aarch64_vget_lane_any (__v, __lane));
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-/* vpmax */
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_laneq_u32 (uint32x4_t __a, uint32x4_t __b, const int __lane)
++{
++ return __a * __aarch64_vget_lane_any (__b, __lane);
++}
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vpmax_s8 (int8x8_t a, int8x8_t b)
++/* vmul_n. */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_n_f32 (float32x2_t __a, float32_t __b)
+ {
+- return __builtin_aarch64_smaxpv8qi (a, b);
++ return __a * __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vpmax_s16 (int16x4_t a, int16x4_t b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_n_f32 (float32x4_t __a, float32_t __b)
+ {
+- return __builtin_aarch64_smaxpv4hi (a, b);
++ return __a * __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vpmax_s32 (int32x2_t a, int32x2_t b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_n_f64 (float64x2_t __a, float64_t __b)
+ {
+- return __builtin_aarch64_smaxpv2si (a, b);
++ return __a * __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vpmax_u8 (uint8x8_t a, uint8x8_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_n_s16 (int16x4_t __a, int16_t __b)
+ {
+- return (uint8x8_t) __builtin_aarch64_umaxpv8qi ((int8x8_t) a,
+- (int8x8_t) b);
++ return __a * __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vpmax_u16 (uint16x4_t a, uint16x4_t b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_n_s16 (int16x8_t __a, int16_t __b)
+ {
+- return (uint16x4_t) __builtin_aarch64_umaxpv4hi ((int16x4_t) a,
+- (int16x4_t) b);
++ return __a * __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vpmax_u32 (uint32x2_t a, uint32x2_t b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_n_s32 (int32x2_t __a, int32_t __b)
+ {
+- return (uint32x2_t) __builtin_aarch64_umaxpv2si ((int32x2_t) a,
+- (int32x2_t) b);
++ return __a * __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vpmaxq_s8 (int8x16_t a, int8x16_t b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_n_s32 (int32x4_t __a, int32_t __b)
+ {
+- return __builtin_aarch64_smaxpv16qi (a, b);
++ return __a * __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vpmaxq_s16 (int16x8_t a, int16x8_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_n_u16 (uint16x4_t __a, uint16_t __b)
+ {
+- return __builtin_aarch64_smaxpv8hi (a, b);
++ return __a * __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vpmaxq_s32 (int32x4_t a, int32x4_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_n_u16 (uint16x8_t __a, uint16_t __b)
++{
++ return __a * __b;
++}
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_n_u32 (uint32x2_t __a, uint32_t __b)
++{
++ return __a * __b;
++}
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_n_u32 (uint32x4_t __a, uint32_t __b)
++{
++ return __a * __b;
++}
++
++/* vmvn */
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvn_p8 (poly8x8_t __a)
+ {
+- return __builtin_aarch64_smaxpv4si (a, b);
++ return (poly8x8_t) ~((int8x8_t) __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vpmaxq_u8 (uint8x16_t a, uint8x16_t b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvn_s8 (int8x8_t __a)
+ {
+- return (uint8x16_t) __builtin_aarch64_umaxpv16qi ((int8x16_t) a,
+- (int8x16_t) b);
++ return ~__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vpmaxq_u16 (uint16x8_t a, uint16x8_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvn_s16 (int16x4_t __a)
+ {
+- return (uint16x8_t) __builtin_aarch64_umaxpv8hi ((int16x8_t) a,
+- (int16x8_t) b);
++ return ~__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vpmaxq_u32 (uint32x4_t a, uint32x4_t b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvn_s32 (int32x2_t __a)
+ {
+- return (uint32x4_t) __builtin_aarch64_umaxpv4si ((int32x4_t) a,
+- (int32x4_t) b);
++ return ~__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vpmax_f32 (float32x2_t a, float32x2_t b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvn_u8 (uint8x8_t __a)
+ {
+- return __builtin_aarch64_smax_nanpv2sf (a, b);
++ return ~__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vpmaxq_f32 (float32x4_t a, float32x4_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvn_u16 (uint16x4_t __a)
+ {
+- return __builtin_aarch64_smax_nanpv4sf (a, b);
++ return ~__a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vpmaxq_f64 (float64x2_t a, float64x2_t b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvn_u32 (uint32x2_t __a)
+ {
+- return __builtin_aarch64_smax_nanpv2df (a, b);
++ return ~__a;
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vpmaxqd_f64 (float64x2_t a)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvnq_p8 (poly8x16_t __a)
+ {
+- return __builtin_aarch64_reduc_smax_nan_scal_v2df (a);
++ return (poly8x16_t) ~((int8x16_t) __a);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vpmaxs_f32 (float32x2_t a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvnq_s8 (int8x16_t __a)
+ {
+- return __builtin_aarch64_reduc_smax_nan_scal_v2sf (a);
++ return ~__a;
+ }
+
+-/* vpmaxnm */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vpmaxnm_f32 (float32x2_t a, float32x2_t b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvnq_s16 (int16x8_t __a)
+ {
+- return __builtin_aarch64_smaxpv2sf (a, b);
++ return ~__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vpmaxnmq_f32 (float32x4_t a, float32x4_t b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvnq_s32 (int32x4_t __a)
+ {
+- return __builtin_aarch64_smaxpv4sf (a, b);
++ return ~__a;
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vpmaxnmq_f64 (float64x2_t a, float64x2_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvnq_u8 (uint8x16_t __a)
+ {
+- return __builtin_aarch64_smaxpv2df (a, b);
++ return ~__a;
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vpmaxnmqd_f64 (float64x2_t a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvnq_u16 (uint16x8_t __a)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v2df (a);
++ return ~__a;
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vpmaxnms_f32 (float32x2_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmvnq_u32 (uint32x4_t __a)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v2sf (a);
++ return ~__a;
+ }
+
+-/* vpmin */
++/* vneg */
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vpmin_s8 (int8x8_t a, int8x8_t b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vneg_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_sminpv8qi (a, b);
++ return -__a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vpmin_s16 (int16x4_t a, int16x4_t b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vneg_f64 (float64x1_t __a)
+ {
+- return __builtin_aarch64_sminpv4hi (a, b);
++ return -__a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vpmin_s32 (int32x2_t a, int32x2_t b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vneg_s8 (int8x8_t __a)
+ {
+- return __builtin_aarch64_sminpv2si (a, b);
++ return -__a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vpmin_u8 (uint8x8_t a, uint8x8_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vneg_s16 (int16x4_t __a)
+ {
+- return (uint8x8_t) __builtin_aarch64_uminpv8qi ((int8x8_t) a,
+- (int8x8_t) b);
++ return -__a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vpmin_u16 (uint16x4_t a, uint16x4_t b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vneg_s32 (int32x2_t __a)
+ {
+- return (uint16x4_t) __builtin_aarch64_uminpv4hi ((int16x4_t) a,
+- (int16x4_t) b);
++ return -__a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vpmin_u32 (uint32x2_t a, uint32x2_t b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vneg_s64 (int64x1_t __a)
+ {
+- return (uint32x2_t) __builtin_aarch64_uminpv2si ((int32x2_t) a,
+- (int32x2_t) b);
++ return -__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vpminq_s8 (int8x16_t a, int8x16_t b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vnegq_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_sminpv16qi (a, b);
++ return -__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vpminq_s16 (int16x8_t a, int16x8_t b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vnegq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_sminpv8hi (a, b);
++ return -__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vpminq_s32 (int32x4_t a, int32x4_t b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vnegq_s8 (int8x16_t __a)
+ {
+- return __builtin_aarch64_sminpv4si (a, b);
++ return -__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vpminq_u8 (uint8x16_t a, uint8x16_t b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vnegq_s16 (int16x8_t __a)
+ {
+- return (uint8x16_t) __builtin_aarch64_uminpv16qi ((int8x16_t) a,
+- (int8x16_t) b);
++ return -__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vpminq_u16 (uint16x8_t a, uint16x8_t b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vnegq_s32 (int32x4_t __a)
+ {
+- return (uint16x8_t) __builtin_aarch64_uminpv8hi ((int16x8_t) a,
+- (int16x8_t) b);
++ return -__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vpminq_u32 (uint32x4_t a, uint32x4_t b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vnegq_s64 (int64x2_t __a)
+ {
+- return (uint32x4_t) __builtin_aarch64_uminpv4si ((int32x4_t) a,
+- (int32x4_t) b);
++ return -__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vpmin_f32 (float32x2_t a, float32x2_t b)
++/* vpadd */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadd_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- return __builtin_aarch64_smin_nanpv2sf (a, b);
++ return __builtin_aarch64_faddpv2sf (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vpminq_f32 (float32x4_t a, float32x4_t b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- return __builtin_aarch64_smin_nanpv4sf (a, b);
++ return __builtin_aarch64_faddpv4sf (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vpminq_f64 (float64x2_t a, float64x2_t b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- return __builtin_aarch64_smin_nanpv2df (a, b);
++ return __builtin_aarch64_faddpv2df (__a, __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vpminqd_f64 (float64x2_t a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- return __builtin_aarch64_reduc_smin_nan_scal_v2df (a);
++ return __builtin_aarch64_addpv8qi (__a, __b);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vpmins_f32 (float32x2_t a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- return __builtin_aarch64_reduc_smin_nan_scal_v2sf (a);
++ return __builtin_aarch64_addpv4hi (__a, __b);
+ }
+
+-/* vpminnm */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vpminnm_f32 (float32x2_t a, float32x2_t b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- return __builtin_aarch64_sminpv2sf (a, b);
++ return __builtin_aarch64_addpv2si (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vpminnmq_f32 (float32x4_t a, float32x4_t b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- return __builtin_aarch64_sminpv4sf (a, b);
++ return (uint8x8_t) __builtin_aarch64_addpv8qi ((int8x8_t) __a,
++ (int8x8_t) __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vpminnmq_f64 (float64x2_t a, float64x2_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- return __builtin_aarch64_sminpv2df (a, b);
++ return (uint16x4_t) __builtin_aarch64_addpv4hi ((int16x4_t) __a,
++ (int16x4_t) __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vpminnmqd_f64 (float64x2_t a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v2df (a);
++ return (uint32x2_t) __builtin_aarch64_addpv2si ((int32x2_t) __a,
++ (int32x2_t) __b);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vpminnms_f32 (float32x2_t a)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadds_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v2sf (a);
++ return __builtin_aarch64_reduc_plus_scal_v2sf (__a);
+ }
+
+-/* vmaxnm */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmaxnm_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddd_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_fmaxv2sf (__a, __b);
++ return __builtin_aarch64_reduc_plus_scal_v2df (__a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmaxnmq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddd_s64 (int64x2_t __a)
+ {
+- return __builtin_aarch64_fmaxv4sf (__a, __b);
++ return __builtin_aarch64_addpdi (__a);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmaxnmq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddd_u64 (uint64x2_t __a)
+ {
+- return __builtin_aarch64_fmaxv2df (__a, __b);
++ return __builtin_aarch64_addpdi ((int64x2_t) __a);
+ }
+
+-/* vmaxv */
++/* vqabs */
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vmaxv_f32 (float32x2_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqabsq_s64 (int64x2_t __a)
+ {
+- return __builtin_aarch64_reduc_smax_nan_scal_v2sf (__a);
++ return (int64x2_t) __builtin_aarch64_sqabsv2di (__a);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vmaxv_s8 (int8x8_t __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqabsb_s8 (int8_t __a)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v8qi (__a);
++ return (int8_t) __builtin_aarch64_sqabsqi (__a);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vmaxv_s16 (int16x4_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqabsh_s16 (int16_t __a)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v4hi (__a);
++ return (int16_t) __builtin_aarch64_sqabshi (__a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vmaxv_s32 (int32x2_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqabss_s32 (int32_t __a)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v2si (__a);
++ return (int32_t) __builtin_aarch64_sqabssi (__a);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vmaxv_u8 (uint8x8_t __a)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqabsd_s64 (int64_t __a)
+ {
+- return __builtin_aarch64_reduc_umax_scal_v8qi_uu (__a);
++ return __builtin_aarch64_sqabsdi (__a);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vmaxv_u16 (uint16x4_t __a)
+-{
+- return __builtin_aarch64_reduc_umax_scal_v4hi_uu (__a);
+-}
++/* vqadd */
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vmaxv_u32 (uint32x2_t __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqaddb_s8 (int8_t __a, int8_t __b)
+ {
+- return __builtin_aarch64_reduc_umax_scal_v2si_uu (__a);
++ return (int8_t) __builtin_aarch64_sqaddqi (__a, __b);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vmaxvq_f32 (float32x4_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqaddh_s16 (int16_t __a, int16_t __b)
+ {
+- return __builtin_aarch64_reduc_smax_nan_scal_v4sf (__a);
++ return (int16_t) __builtin_aarch64_sqaddhi (__a, __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vmaxvq_f64 (float64x2_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqadds_s32 (int32_t __a, int32_t __b)
+ {
+- return __builtin_aarch64_reduc_smax_nan_scal_v2df (__a);
++ return (int32_t) __builtin_aarch64_sqaddsi (__a, __b);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vmaxvq_s8 (int8x16_t __a)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqaddd_s64 (int64_t __a, int64_t __b)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v16qi (__a);
++ return __builtin_aarch64_sqadddi (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vmaxvq_s16 (int16x8_t __a)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqaddb_u8 (uint8_t __a, uint8_t __b)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v8hi (__a);
++ return (uint8_t) __builtin_aarch64_uqaddqi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vmaxvq_s32 (int32x4_t __a)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqaddh_u16 (uint16_t __a, uint16_t __b)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v4si (__a);
++ return (uint16_t) __builtin_aarch64_uqaddhi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vmaxvq_u8 (uint8x16_t __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqadds_u32 (uint32_t __a, uint32_t __b)
+ {
+- return __builtin_aarch64_reduc_umax_scal_v16qi_uu (__a);
++ return (uint32_t) __builtin_aarch64_uqaddsi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vmaxvq_u16 (uint16x8_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqaddd_u64 (uint64_t __a, uint64_t __b)
+ {
+- return __builtin_aarch64_reduc_umax_scal_v8hi_uu (__a);
++ return __builtin_aarch64_uqadddi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vmaxvq_u32 (uint32x4_t __a)
++/* vqdmlal */
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+- return __builtin_aarch64_reduc_umax_scal_v4si_uu (__a);
++ return __builtin_aarch64_sqdmlalv4hi (__a, __b, __c);
+ }
+
+-/* vmaxnmv */
+-
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vmaxnmv_f32 (float32x2_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v2sf (__a);
++ return __builtin_aarch64_sqdmlal2v8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vmaxnmvq_f32 (float32x4_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
++ int const __d)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v4sf (__a);
++ return __builtin_aarch64_sqdmlal2_lanev8hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vmaxnmvq_f64 (float64x2_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_high_laneq_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
++ int const __d)
+ {
+- return __builtin_aarch64_reduc_smax_scal_v2df (__a);
++ return __builtin_aarch64_sqdmlal2_laneqv8hi (__a, __b, __c, __d);
+ }
+
+-/* vmin */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmin_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
+ {
+- return __builtin_aarch64_smin_nanv2sf (__a, __b);
++ return __builtin_aarch64_sqdmlal2_nv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vmin_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
+ {
+- return __builtin_aarch64_sminv8qi (__a, __b);
++ return __builtin_aarch64_sqdmlal_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmin_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_laneq_s16 (int32x4_t __a, int16x4_t __b, int16x8_t __c, int const __d)
+ {
+- return __builtin_aarch64_sminv4hi (__a, __b);
++ return __builtin_aarch64_sqdmlal_laneqv4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmin_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
+ {
+- return __builtin_aarch64_sminv2si (__a, __b);
++ return __builtin_aarch64_sqdmlal_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vmin_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+- return (uint8x8_t) __builtin_aarch64_uminv8qi ((int8x8_t) __a,
+- (int8x8_t) __b);
++ return __builtin_aarch64_sqdmlalv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmin_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
+ {
+- return (uint16x4_t) __builtin_aarch64_uminv4hi ((int16x4_t) __a,
+- (int16x4_t) __b);
++ return __builtin_aarch64_sqdmlal2v4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmin_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
++ int const __d)
+ {
+- return (uint32x2_t) __builtin_aarch64_uminv2si ((int32x2_t) __a,
+- (int32x2_t) __b);
++ return __builtin_aarch64_sqdmlal2_lanev4si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vminq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_high_laneq_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
++ int const __d)
+ {
+- return __builtin_aarch64_smin_nanv4sf (__a, __b);
++ return __builtin_aarch64_sqdmlal2_laneqv4si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vminq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
+ {
+- return __builtin_aarch64_smin_nanv2df (__a, __b);
++ return __builtin_aarch64_sqdmlal2_nv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vminq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
+ {
+- return __builtin_aarch64_sminv16qi (__a, __b);
++ return __builtin_aarch64_sqdmlal_lanev2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vminq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_laneq_s32 (int64x2_t __a, int32x2_t __b, int32x4_t __c, int const __d)
+ {
+- return __builtin_aarch64_sminv8hi (__a, __b);
++ return __builtin_aarch64_sqdmlal_laneqv2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vminq_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlal_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
+ {
+- return __builtin_aarch64_sminv4si (__a, __b);
++ return __builtin_aarch64_sqdmlal_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vminq_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlalh_s16 (int32_t __a, int16_t __b, int16_t __c)
+ {
+- return (uint8x16_t) __builtin_aarch64_uminv16qi ((int8x16_t) __a,
+- (int8x16_t) __b);
++ return __builtin_aarch64_sqdmlalhi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vminq_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlalh_lane_s16 (int32_t __a, int16_t __b, int16x4_t __c, const int __d)
+ {
+- return (uint16x8_t) __builtin_aarch64_uminv8hi ((int16x8_t) __a,
+- (int16x8_t) __b);
++ return __builtin_aarch64_sqdmlal_lanehi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vminq_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlalh_laneq_s16 (int32_t __a, int16_t __b, int16x8_t __c, const int __d)
+ {
+- return (uint32x4_t) __builtin_aarch64_uminv4si ((int32x4_t) __a,
+- (int32x4_t) __b);
++ return __builtin_aarch64_sqdmlal_laneqhi (__a, __b, __c, __d);
+ }
+
+-/* vminnm */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vminnm_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlals_s32 (int64_t __a, int32_t __b, int32_t __c)
+ {
+- return __builtin_aarch64_fminv2sf (__a, __b);
++ return __builtin_aarch64_sqdmlalsi (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vminnmq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlals_lane_s32 (int64_t __a, int32_t __b, int32x2_t __c, const int __d)
+ {
+- return __builtin_aarch64_fminv4sf (__a, __b);
++ return __builtin_aarch64_sqdmlal_lanesi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vminnmq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlals_laneq_s32 (int64_t __a, int32_t __b, int32x4_t __c, const int __d)
+ {
+- return __builtin_aarch64_fminv2df (__a, __b);
++ return __builtin_aarch64_sqdmlal_laneqsi (__a, __b, __c, __d);
+ }
+
+-/* vminv */
++/* vqdmlsl */
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vminv_f32 (float32x2_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+- return __builtin_aarch64_reduc_smin_nan_scal_v2sf (__a);
++ return __builtin_aarch64_sqdmlslv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vminv_s8 (int8x8_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v8qi (__a);
++ return __builtin_aarch64_sqdmlsl2v8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vminv_s16 (int16x4_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
++ int const __d)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v4hi (__a);
++ return __builtin_aarch64_sqdmlsl2_lanev8hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vminv_s32 (int32x2_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_high_laneq_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
++ int const __d)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v2si (__a);
++ return __builtin_aarch64_sqdmlsl2_laneqv8hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vminv_u8 (uint8x8_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
+ {
+- return __builtin_aarch64_reduc_umin_scal_v8qi_uu (__a);
++ return __builtin_aarch64_sqdmlsl2_nv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vminv_u16 (uint16x4_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
+ {
+- return __builtin_aarch64_reduc_umin_scal_v4hi_uu (__a);
++ return __builtin_aarch64_sqdmlsl_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vminv_u32 (uint32x2_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_laneq_s16 (int32x4_t __a, int16x4_t __b, int16x8_t __c, int const __d)
+ {
+- return __builtin_aarch64_reduc_umin_scal_v2si_uu (__a);
++ return __builtin_aarch64_sqdmlsl_laneqv4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vminvq_f32 (float32x4_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
+ {
+- return __builtin_aarch64_reduc_smin_nan_scal_v4sf (__a);
++ return __builtin_aarch64_sqdmlsl_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vminvq_f64 (float64x2_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+- return __builtin_aarch64_reduc_smin_nan_scal_v2df (__a);
++ return __builtin_aarch64_sqdmlslv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vminvq_s8 (int8x16_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v16qi (__a);
++ return __builtin_aarch64_sqdmlsl2v4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vminvq_s16 (int16x8_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
++ int const __d)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v8hi (__a);
++ return __builtin_aarch64_sqdmlsl2_lanev4si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vminvq_s32 (int32x4_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_high_laneq_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
++ int const __d)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v4si (__a);
++ return __builtin_aarch64_sqdmlsl2_laneqv4si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vminvq_u8 (uint8x16_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
+ {
+- return __builtin_aarch64_reduc_umin_scal_v16qi_uu (__a);
++ return __builtin_aarch64_sqdmlsl2_nv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vminvq_u16 (uint16x8_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
+ {
+- return __builtin_aarch64_reduc_umin_scal_v8hi_uu (__a);
++ return __builtin_aarch64_sqdmlsl_lanev2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vminvq_u32 (uint32x4_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_laneq_s32 (int64x2_t __a, int32x2_t __b, int32x4_t __c, int const __d)
+ {
+- return __builtin_aarch64_reduc_umin_scal_v4si_uu (__a);
++ return __builtin_aarch64_sqdmlsl_laneqv2si (__a, __b, __c, __d);
+ }
+
+-/* vminnmv */
+-
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vminnmv_f32 (float32x2_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsl_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v2sf (__a);
++ return __builtin_aarch64_sqdmlsl_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vminnmvq_f32 (float32x4_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlslh_s16 (int32_t __a, int16_t __b, int16_t __c)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v4sf (__a);
++ return __builtin_aarch64_sqdmlslhi (__a, __b, __c);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vminnmvq_f64 (float64x2_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlslh_lane_s16 (int32_t __a, int16_t __b, int16x4_t __c, const int __d)
+ {
+- return __builtin_aarch64_reduc_smin_scal_v2df (__a);
++ return __builtin_aarch64_sqdmlsl_lanehi (__a, __b, __c, __d);
+ }
+
+-/* vmla */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmla_f32 (float32x2_t a, float32x2_t b, float32x2_t c)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlslh_laneq_s16 (int32_t __a, int16_t __b, int16x8_t __c, const int __d)
+ {
+- return a + b * c;
++ return __builtin_aarch64_sqdmlsl_laneqhi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vmla_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsls_s32 (int64_t __a, int32_t __b, int32_t __c)
+ {
+- return __a + __b * __c;
++ return __builtin_aarch64_sqdmlslsi (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmlaq_f32 (float32x4_t a, float32x4_t b, float32x4_t c)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsls_lane_s32 (int64_t __a, int32_t __b, int32x2_t __c, const int __d)
+ {
+- return a + b * c;
++ return __builtin_aarch64_sqdmlsl_lanesi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmlaq_f64 (float64x2_t a, float64x2_t b, float64x2_t c)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmlsls_laneq_s32 (int64_t __a, int32_t __b, int32x4_t __c, const int __d)
+ {
+- return a + b * c;
++ return __builtin_aarch64_sqdmlsl_laneqsi (__a, __b, __c, __d);
+ }
+
+-/* vmla_lane */
++/* vqdmulh */
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmla_lane_f32 (float32x2_t __a, float32x2_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmulh_lanev4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmla_lane_s16 (int16x4_t __a, int16x4_t __b,
+- int16x4_t __c, const int __lane)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmulh_lanev2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmla_lane_s32 (int32x2_t __a, int32x2_t __b,
+- int32x2_t __c, const int __lane)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmulh_lanev8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmla_lane_u16 (uint16x4_t __a, uint16x4_t __b,
+- uint16x4_t __c, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmulh_lanev4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmla_lane_u32 (uint32x2_t __a, uint32x2_t __b,
+- uint32x2_t __c, const int __lane)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhh_s16 (int16_t __a, int16_t __b)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (int16_t) __builtin_aarch64_sqdmulhhi (__a, __b);
+ }
+
+-/* vmla_laneq */
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
++{
++ return __builtin_aarch64_sqdmulh_lanehi (__a, __b, __c);
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmla_laneq_f32 (float32x2_t __a, float32x2_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmulh_laneqhi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmla_laneq_s16 (int16x4_t __a, int16x4_t __b,
+- int16x8_t __c, const int __lane)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhs_s32 (int32_t __a, int32_t __b)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (int32_t) __builtin_aarch64_sqdmulhsi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmla_laneq_s32 (int32x2_t __a, int32x2_t __b,
+- int32x4_t __c, const int __lane)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhs_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmulh_lanesi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmla_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
+- uint16x8_t __c, const int __lane)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulhs_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmulh_laneqsi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmla_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
+- uint32x4_t __c, const int __lane)
++/* vqdmull */
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmullv4hi (__a, __b);
+ }
+
+-/* vmlaq_lane */
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_high_s16 (int16x8_t __a, int16x8_t __b)
++{
++ return __builtin_aarch64_sqdmull2v8hi (__a, __b);
++}
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmlaq_lane_f32 (float32x4_t __a, float32x4_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_high_lane_s16 (int16x8_t __a, int16x4_t __b, int const __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull2_lanev8hi (__a, __b,__c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlaq_lane_s16 (int16x8_t __a, int16x8_t __b,
+- int16x4_t __c, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_high_laneq_s16 (int16x8_t __a, int16x8_t __b, int const __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull2_laneqv8hi (__a, __b,__c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlaq_lane_s32 (int32x4_t __a, int32x4_t __b,
+- int32x2_t __c, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_high_n_s16 (int16x8_t __a, int16_t __b)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull2_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlaq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
+- uint16x4_t __c, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_lane_s16 (int16x4_t __a, int16x4_t __b, int const __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull_lanev4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlaq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
+- uint32x2_t __c, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_laneq_s16 (int16x4_t __a, int16x8_t __b, int const __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull_laneqv4hi (__a, __b, __c);
+ }
+
+- /* vmlaq_laneq */
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_n_s16 (int16x4_t __a, int16_t __b)
++{
++ return __builtin_aarch64_sqdmull_nv4hi (__a, __b);
++}
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmlaq_laneq_f32 (float32x4_t __a, float32x4_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmullv2si (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlaq_laneq_s16 (int16x8_t __a, int16x8_t __b,
+- int16x8_t __c, const int __lane)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_high_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull2v4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlaq_laneq_s32 (int32x4_t __a, int32x4_t __b,
+- int32x4_t __c, const int __lane)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_high_lane_s32 (int32x4_t __a, int32x2_t __b, int const __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull2_lanev4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlaq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
+- uint16x8_t __c, const int __lane)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_high_laneq_s32 (int32x4_t __a, int32x4_t __b, int const __c)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull2_laneqv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlaq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
+- uint32x4_t __c, const int __lane)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_high_n_s32 (int32x4_t __a, int32_t __b)
+ {
+- return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull2_nv4si (__a, __b);
+ }
+
+-/* vmls */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmls_f32 (float32x2_t a, float32x2_t b, float32x2_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_lane_s32 (int32x2_t __a, int32x2_t __b, int const __c)
+ {
+- return a - b * c;
++ return __builtin_aarch64_sqdmull_lanev2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vmls_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_laneq_s32 (int32x2_t __a, int32x4_t __b, int const __c)
+ {
+- return __a - __b * __c;
++ return __builtin_aarch64_sqdmull_laneqv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmlsq_f32 (float32x4_t a, float32x4_t b, float32x4_t c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmull_n_s32 (int32x2_t __a, int32_t __b)
+ {
+- return a - b * c;
++ return __builtin_aarch64_sqdmull_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmlsq_f64 (float64x2_t a, float64x2_t b, float64x2_t c)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmullh_s16 (int16_t __a, int16_t __b)
+ {
+- return a - b * c;
++ return (int32_t) __builtin_aarch64_sqdmullhi (__a, __b);
+ }
+
+-/* vmls_lane */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmls_lane_f32 (float32x2_t __a, float32x2_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmullh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull_lanehi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmls_lane_s16 (int16x4_t __a, int16x4_t __b,
+- int16x4_t __c, const int __lane)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmullh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull_laneqhi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmls_lane_s32 (int32x2_t __a, int32x2_t __b,
+- int32x2_t __c, const int __lane)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulls_s32 (int32_t __a, int32_t __b)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmullsi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmls_lane_u16 (uint16x4_t __a, uint16x4_t __b,
+- uint16x4_t __c, const int __lane)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulls_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull_lanesi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmls_lane_u32 (uint32x2_t __a, uint32x2_t __b,
+- uint32x2_t __c, const int __lane)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqdmulls_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return __builtin_aarch64_sqdmull_laneqsi (__a, __b, __c);
+ }
+
+-/* vmls_laneq */
++/* vqmovn */
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmls_laneq_f32 (float32x2_t __a, float32x2_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_s16 (int16x8_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (int8x8_t) __builtin_aarch64_sqmovnv8hi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmls_laneq_s16 (int16x4_t __a, int16x4_t __b,
+- int16x8_t __c, const int __lane)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_s32 (int32x4_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (int16x4_t) __builtin_aarch64_sqmovnv4si (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmls_laneq_s32 (int32x2_t __a, int32x2_t __b,
+- int32x4_t __c, const int __lane)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_s64 (int64x2_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (int32x2_t) __builtin_aarch64_sqmovnv2di (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmls_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
+- uint16x8_t __c, const int __lane)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_u16 (uint16x8_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (uint8x8_t) __builtin_aarch64_uqmovnv8hi ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmls_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
+- uint32x4_t __c, const int __lane)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_u32 (uint32x4_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (uint16x4_t) __builtin_aarch64_uqmovnv4si ((int32x4_t) __a);
+ }
+
+-/* vmlsq_lane */
+-
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmlsq_lane_f32 (float32x4_t __a, float32x4_t __b,
+- float32x2_t __c, const int __lane)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovn_u64 (uint64x2_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (uint32x2_t) __builtin_aarch64_uqmovnv2di ((int64x2_t) __a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlsq_lane_s16 (int16x8_t __a, int16x8_t __b,
+- int16x4_t __c, const int __lane)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovnh_s16 (int16_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (int8_t) __builtin_aarch64_sqmovnhi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlsq_lane_s32 (int32x4_t __a, int32x4_t __b,
+- int32x2_t __c, const int __lane)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovns_s32 (int32_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (int16_t) __builtin_aarch64_sqmovnsi (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlsq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
+- uint16x4_t __c, const int __lane)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovnd_s64 (int64_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (int32_t) __builtin_aarch64_sqmovndi (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlsq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
+- uint32x2_t __c, const int __lane)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovnh_u16 (uint16_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (uint8_t) __builtin_aarch64_uqmovnhi (__a);
+ }
+
+- /* vmlsq_laneq */
+-
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmlsq_laneq_f32 (float32x4_t __a, float32x4_t __b,
+- float32x4_t __c, const int __lane)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovns_u32 (uint32_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (uint16_t) __builtin_aarch64_uqmovnsi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmlsq_laneq_s16 (int16x8_t __a, int16x8_t __b,
+- int16x8_t __c, const int __lane)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovnd_u64 (uint64_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (uint32_t) __builtin_aarch64_uqmovndi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmlsq_laneq_s32 (int32x4_t __a, int32x4_t __b,
+- int32x4_t __c, const int __lane)
++/* vqmovun */
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovun_s16 (int16x8_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (uint8x8_t) __builtin_aarch64_sqmovunv8hi (__a);
+ }
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmlsq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
+- uint16x8_t __c, const int __lane)
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovun_s32 (int32x4_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (uint16x4_t) __builtin_aarch64_sqmovunv4si (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmlsq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
+- uint32x4_t __c, const int __lane)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovun_s64 (int64x2_t __a)
+ {
+- return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
++ return (uint32x2_t) __builtin_aarch64_sqmovunv2di (__a);
+ }
+
+-/* vmov_n_ */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmov_n_f32 (float32_t __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovunh_s16 (int16_t __a)
+ {
+- return vdup_n_f32 (__a);
++ return (int8_t) __builtin_aarch64_sqmovunhi (__a);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vmov_n_f64 (float64_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovuns_s32 (int32_t __a)
+ {
+- return (float64x1_t) {__a};
++ return (int16_t) __builtin_aarch64_sqmovunsi (__a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vmov_n_p8 (poly8_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqmovund_s64 (int64_t __a)
+ {
+- return vdup_n_p8 (__a);
++ return (int32_t) __builtin_aarch64_sqmovundi (__a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vmov_n_p16 (poly16_t __a)
++/* vqneg */
++
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqnegq_s64 (int64x2_t __a)
+ {
+- return vdup_n_p16 (__a);
++ return (int64x2_t) __builtin_aarch64_sqnegv2di (__a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vmov_n_s8 (int8_t __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqnegb_s8 (int8_t __a)
+ {
+- return vdup_n_s8 (__a);
++ return (int8_t) __builtin_aarch64_sqnegqi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmov_n_s16 (int16_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqnegh_s16 (int16_t __a)
+ {
+- return vdup_n_s16 (__a);
++ return (int16_t) __builtin_aarch64_sqneghi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmov_n_s32 (int32_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqnegs_s32 (int32_t __a)
+ {
+- return vdup_n_s32 (__a);
++ return (int32_t) __builtin_aarch64_sqnegsi (__a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vmov_n_s64 (int64_t __a)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqnegd_s64 (int64_t __a)
+ {
+- return (int64x1_t) {__a};
++ return __builtin_aarch64_sqnegdi (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vmov_n_u8 (uint8_t __a)
++/* vqrdmulh */
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+- return vdup_n_u8 (__a);
++ return __builtin_aarch64_sqrdmulh_lanev4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmov_n_u16 (uint16_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+- return vdup_n_u16 (__a);
++ return __builtin_aarch64_sqrdmulh_lanev2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmov_n_u32 (uint32_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
+ {
+- return vdup_n_u32 (__a);
++ return __builtin_aarch64_sqrdmulh_lanev8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vmov_n_u64 (uint64_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
+ {
+- return (uint64x1_t) {__a};
++ return __builtin_aarch64_sqrdmulh_lanev4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmovq_n_f32 (float32_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhh_s16 (int16_t __a, int16_t __b)
+ {
+- return vdupq_n_f32 (__a);
++ return (int16_t) __builtin_aarch64_sqrdmulhhi (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmovq_n_f64 (float64_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
+ {
+- return vdupq_n_f64 (__a);
++ return __builtin_aarch64_sqrdmulh_lanehi (__a, __b, __c);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vmovq_n_p8 (poly8_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
+ {
+- return vdupq_n_p8 (__a);
++ return __builtin_aarch64_sqrdmulh_laneqhi (__a, __b, __c);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vmovq_n_p16 (poly16_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhs_s32 (int32_t __a, int32_t __b)
+ {
+- return vdupq_n_p16 (__a);
++ return (int32_t) __builtin_aarch64_sqrdmulhsi (__a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vmovq_n_s8 (int8_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhs_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
+ {
+- return vdupq_n_s8 (__a);
++ return __builtin_aarch64_sqrdmulh_lanesi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmovq_n_s16 (int16_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrdmulhs_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
+ {
+- return vdupq_n_s16 (__a);
++ return __builtin_aarch64_sqrdmulh_laneqsi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmovq_n_s32 (int32_t __a)
++/* vqrshl */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- return vdupq_n_s32 (__a);
++ return __builtin_aarch64_sqrshlv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vmovq_n_s64 (int64_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- return vdupq_n_s64 (__a);
++ return __builtin_aarch64_sqrshlv4hi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vmovq_n_u8 (uint8_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- return vdupq_n_u8 (__a);
++ return __builtin_aarch64_sqrshlv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmovq_n_u16 (uint16_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshl_s64 (int64x1_t __a, int64x1_t __b)
+ {
+- return vdupq_n_u16 (__a);
++ return (int64x1_t) {__builtin_aarch64_sqrshldi (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmovq_n_u32 (uint32_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshl_u8 (uint8x8_t __a, int8x8_t __b)
+ {
+- return vdupq_n_u32 (__a);
++ return __builtin_aarch64_uqrshlv8qi_uus ( __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vmovq_n_u64 (uint64_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshl_u16 (uint16x4_t __a, int16x4_t __b)
+ {
+- return vdupq_n_u64 (__a);
++ return __builtin_aarch64_uqrshlv4hi_uus ( __a, __b);
+ }
+
+-/* vmul_lane */
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshl_u32 (uint32x2_t __a, int32x2_t __b)
++{
++ return __builtin_aarch64_uqrshlv2si_uus ( __a, __b);
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmul_lane_f32 (float32x2_t __a, float32x2_t __b, const int __lane)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshl_u64 (uint64x1_t __a, int64x1_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return (uint64x1_t) {__builtin_aarch64_uqrshldi_uus (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vmul_lane_f64 (float64x1_t __a, float64x1_t __b, const int __lane)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- return __a * __b;
++ return __builtin_aarch64_sqrshlv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmul_lane_s16 (int16x4_t __a, int16x4_t __b, const int __lane)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_sqrshlv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmul_lane_s32 (int32x2_t __a, int32x2_t __b, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_sqrshlv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmul_lane_u16 (uint16x4_t __a, uint16x4_t __b, const int __lane)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_sqrshlv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmul_lane_u32 (uint32x2_t __a, uint32x2_t __b, const int __lane)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlq_u8 (uint8x16_t __a, int8x16_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshlv16qi_uus ( __a, __b);
+ }
+
+-/* vmuld_lane */
+-
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vmuld_lane_f64 (float64_t __a, float64x1_t __b, const int __lane)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlq_u16 (uint16x8_t __a, int16x8_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshlv8hi_uus ( __a, __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vmuld_laneq_f64 (float64_t __a, float64x2_t __b, const int __lane)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlq_u32 (uint32x4_t __a, int32x4_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshlv4si_uus ( __a, __b);
+ }
+
+-/* vmuls_lane */
+-
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vmuls_lane_f32 (float32_t __a, float32x2_t __b, const int __lane)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlq_u64 (uint64x2_t __a, int64x2_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshlv2di_uus ( __a, __b);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vmuls_laneq_f32 (float32_t __a, float32x4_t __b, const int __lane)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlb_s8 (int8_t __a, int8_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_sqrshlqi (__a, __b);
+ }
+
+-/* vmul_laneq */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vmul_laneq_f32 (float32x2_t __a, float32x4_t __b, const int __lane)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlh_s16 (int16_t __a, int16_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_sqrshlhi (__a, __b);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vmul_laneq_f64 (float64x1_t __a, float64x2_t __b, const int __lane)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshls_s32 (int32_t __a, int32_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_sqrshlsi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vmul_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __lane)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshld_s64 (int64_t __a, int64_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_sqrshldi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vmul_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __lane)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlb_u8 (uint8_t __a, uint8_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshlqi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vmul_laneq_u16 (uint16x4_t __a, uint16x8_t __b, const int __lane)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshlh_u16 (uint16_t __a, uint16_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshlhi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vmul_laneq_u32 (uint32x2_t __a, uint32x4_t __b, const int __lane)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshls_u32 (uint32_t __a, uint32_t __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshlsi_uus (__a, __b);
+ }
+
+-/* vmul_n */
+-
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vmul_n_f64 (float64x1_t __a, float64_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshld_u64 (uint64_t __a, uint64_t __b)
+ {
+- return (float64x1_t) { vget_lane_f64 (__a, 0) * __b };
++ return __builtin_aarch64_uqrshldi_uus (__a, __b);
+ }
+
+-/* vmulq_lane */
++/* vqrshrn */
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmulq_lane_f32 (float32x4_t __a, float32x2_t __b, const int __lane)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrn_n_s16 (int16x8_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return (int8x8_t) __builtin_aarch64_sqrshrn_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmulq_lane_f64 (float64x2_t __a, float64x1_t __b, const int __lane)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrn_n_s32 (int32x4_t __a, const int __b)
+ {
+- __AARCH64_LANE_CHECK (__a, __lane);
+- return __a * __b[0];
++ return (int16x4_t) __builtin_aarch64_sqrshrn_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmulq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __lane)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrn_n_s64 (int64x2_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return (int32x2_t) __builtin_aarch64_sqrshrn_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmulq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __lane)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrn_n_u16 (uint16x8_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshrn_nv8hi_uus ( __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmulq_lane_u16 (uint16x8_t __a, uint16x4_t __b, const int __lane)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrn_n_u32 (uint32x4_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshrn_nv4si_uus ( __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmulq_lane_u32 (uint32x4_t __a, uint32x2_t __b, const int __lane)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrn_n_u64 (uint64x2_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshrn_nv2di_uus ( __a, __b);
+ }
+
+-/* vmulq_laneq */
+-
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vmulq_laneq_f32 (float32x4_t __a, float32x4_t __b, const int __lane)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrnh_n_s16 (int16_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return (int8_t) __builtin_aarch64_sqrshrn_nhi (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vmulq_laneq_f64 (float64x2_t __a, float64x2_t __b, const int __lane)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrns_n_s32 (int32_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return (int16_t) __builtin_aarch64_sqrshrn_nsi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vmulq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __lane)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrnd_n_s64 (int64_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return (int32_t) __builtin_aarch64_sqrshrn_ndi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vmulq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __lane)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrnh_n_u16 (uint16_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshrn_nhi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vmulq_laneq_u16 (uint16x8_t __a, uint16x8_t __b, const int __lane)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrns_n_u32 (uint32_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshrn_nsi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vmulq_laneq_u32 (uint32x4_t __a, uint32x4_t __b, const int __lane)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrnd_n_u64 (uint64_t __a, const int __b)
+ {
+- return __a * __aarch64_vget_lane_any (__b, __lane);
++ return __builtin_aarch64_uqrshrn_ndi_uus (__a, __b);
+ }
+
+-/* vneg */
++/* vqrshrun */
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vneg_f32 (float32x2_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrun_n_s16 (int16x8_t __a, const int __b)
+ {
+- return -__a;
++ return (uint8x8_t) __builtin_aarch64_sqrshrun_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vneg_f64 (float64x1_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrun_n_s32 (int32x4_t __a, const int __b)
+ {
+- return -__a;
++ return (uint16x4_t) __builtin_aarch64_sqrshrun_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vneg_s8 (int8x8_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrun_n_s64 (int64x2_t __a, const int __b)
+ {
+- return -__a;
++ return (uint32x2_t) __builtin_aarch64_sqrshrun_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vneg_s16 (int16x4_t __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrunh_n_s16 (int16_t __a, const int __b)
+ {
+- return -__a;
++ return (int8_t) __builtin_aarch64_sqrshrun_nhi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vneg_s32 (int32x2_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshruns_n_s32 (int32_t __a, const int __b)
+ {
+- return -__a;
++ return (int16_t) __builtin_aarch64_sqrshrun_nsi (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vneg_s64 (int64x1_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqrshrund_n_s64 (int64_t __a, const int __b)
+ {
+- return -__a;
++ return (int32_t) __builtin_aarch64_sqrshrun_ndi (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vnegq_f32 (float32x4_t __a)
++/* vqshl */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- return -__a;
++ return __builtin_aarch64_sqshlv8qi (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vnegq_f64 (float64x2_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- return -__a;
++ return __builtin_aarch64_sqshlv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vnegq_s8 (int8x16_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- return -__a;
++ return __builtin_aarch64_sqshlv2si (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vnegq_s16 (int16x8_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_s64 (int64x1_t __a, int64x1_t __b)
+ {
+- return -__a;
++ return (int64x1_t) {__builtin_aarch64_sqshldi (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vnegq_s32 (int32x4_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_u8 (uint8x8_t __a, int8x8_t __b)
+ {
+- return -__a;
++ return __builtin_aarch64_uqshlv8qi_uus ( __a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vnegq_s64 (int64x2_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_u16 (uint16x4_t __a, int16x4_t __b)
+ {
+- return -__a;
++ return __builtin_aarch64_uqshlv4hi_uus ( __a, __b);
+ }
+
+-/* vpadd */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vpadd_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_u32 (uint32x2_t __a, int32x2_t __b)
+ {
+- return __builtin_aarch64_addpv8qi (__a, __b);
++ return __builtin_aarch64_uqshlv2si_uus ( __a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vpadd_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_u64 (uint64x1_t __a, int64x1_t __b)
+ {
+- return __builtin_aarch64_addpv4hi (__a, __b);
++ return (uint64x1_t) {__builtin_aarch64_uqshldi_uus (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vpadd_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- return __builtin_aarch64_addpv2si (__a, __b);
++ return __builtin_aarch64_sqshlv16qi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vpadd_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- return (uint8x8_t) __builtin_aarch64_addpv8qi ((int8x8_t) __a,
+- (int8x8_t) __b);
++ return __builtin_aarch64_sqshlv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vpadd_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- return (uint16x4_t) __builtin_aarch64_addpv4hi ((int16x4_t) __a,
+- (int16x4_t) __b);
++ return __builtin_aarch64_sqshlv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vpadd_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- return (uint32x2_t) __builtin_aarch64_addpv2si ((int32x2_t) __a,
+- (int32x2_t) __b);
++ return __builtin_aarch64_sqshlv2di (__a, __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vpaddd_f64 (float64x2_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_u8 (uint8x16_t __a, int8x16_t __b)
+ {
+- return __builtin_aarch64_reduc_plus_scal_v2df (__a);
++ return __builtin_aarch64_uqshlv16qi_uus ( __a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vpaddd_s64 (int64x2_t __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_u16 (uint16x8_t __a, int16x8_t __b)
+ {
+- return __builtin_aarch64_addpdi (__a);
++ return __builtin_aarch64_uqshlv8hi_uus ( __a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vpaddd_u64 (uint64x2_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_u32 (uint32x4_t __a, int32x4_t __b)
+ {
+- return __builtin_aarch64_addpdi ((int64x2_t) __a);
++ return __builtin_aarch64_uqshlv4si_uus ( __a, __b);
+ }
+
+-/* vqabs */
+-
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqabsq_s64 (int64x2_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_u64 (uint64x2_t __a, int64x2_t __b)
+ {
+- return (int64x2_t) __builtin_aarch64_sqabsv2di (__a);
++ return __builtin_aarch64_uqshlv2di_uus ( __a, __b);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqabsb_s8 (int8_t __a)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlb_s8 (int8_t __a, int8_t __b)
+ {
+- return (int8_t) __builtin_aarch64_sqabsqi (__a);
++ return __builtin_aarch64_sqshlqi (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqabsh_s16 (int16_t __a)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlh_s16 (int16_t __a, int16_t __b)
+ {
+- return (int16_t) __builtin_aarch64_sqabshi (__a);
++ return __builtin_aarch64_sqshlhi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqabss_s32 (int32_t __a)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshls_s32 (int32_t __a, int32_t __b)
+ {
+- return (int32_t) __builtin_aarch64_sqabssi (__a);
++ return __builtin_aarch64_sqshlsi (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqabsd_s64 (int64_t __a)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshld_s64 (int64_t __a, int64_t __b)
+ {
+- return __builtin_aarch64_sqabsdi (__a);
++ return __builtin_aarch64_sqshldi (__a, __b);
+ }
+
+-/* vqadd */
+-
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqaddb_s8 (int8_t __a, int8_t __b)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlb_u8 (uint8_t __a, uint8_t __b)
+ {
+- return (int8_t) __builtin_aarch64_sqaddqi (__a, __b);
++ return __builtin_aarch64_uqshlqi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqaddh_s16 (int16_t __a, int16_t __b)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlh_u16 (uint16_t __a, uint16_t __b)
+ {
+- return (int16_t) __builtin_aarch64_sqaddhi (__a, __b);
++ return __builtin_aarch64_uqshlhi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqadds_s32 (int32_t __a, int32_t __b)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshls_u32 (uint32_t __a, uint32_t __b)
+ {
+- return (int32_t) __builtin_aarch64_sqaddsi (__a, __b);
++ return __builtin_aarch64_uqshlsi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqaddd_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshld_u64 (uint64_t __a, uint64_t __b)
+ {
+- return __builtin_aarch64_sqadddi (__a, __b);
++ return __builtin_aarch64_uqshldi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vqaddb_u8 (uint8_t __a, uint8_t __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_n_s8 (int8x8_t __a, const int __b)
+ {
+- return (uint8_t) __builtin_aarch64_uqaddqi_uuu (__a, __b);
++ return (int8x8_t) __builtin_aarch64_sqshl_nv8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vqaddh_u16 (uint16_t __a, uint16_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_n_s16 (int16x4_t __a, const int __b)
+ {
+- return (uint16_t) __builtin_aarch64_uqaddhi_uuu (__a, __b);
++ return (int16x4_t) __builtin_aarch64_sqshl_nv4hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vqadds_u32 (uint32_t __a, uint32_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_n_s32 (int32x2_t __a, const int __b)
+ {
+- return (uint32_t) __builtin_aarch64_uqaddsi_uuu (__a, __b);
++ return (int32x2_t) __builtin_aarch64_sqshl_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vqaddd_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_n_s64 (int64x1_t __a, const int __b)
+ {
+- return __builtin_aarch64_uqadddi_uuu (__a, __b);
++ return (int64x1_t) {__builtin_aarch64_sqshl_ndi (__a[0], __b)};
+ }
+
+-/* vqdmlal */
+-
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlal_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_n_u8 (uint8x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlalv4hi (__a, __b, __c);
++ return __builtin_aarch64_uqshl_nv8qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlal_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_n_u16 (uint16x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal2v8hi (__a, __b, __c);
++ return __builtin_aarch64_uqshl_nv4hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlal_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
+- int const __d)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_n_u32 (uint32x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal2_lanev8hi (__a, __b, __c, __d);
++ return __builtin_aarch64_uqshl_nv2si_uus (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlal_high_laneq_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
+- int const __d)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshl_n_u64 (uint64x1_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal2_laneqv8hi (__a, __b, __c, __d);
++ return (uint64x1_t) {__builtin_aarch64_uqshl_ndi_uus (__a[0], __b)};
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlal_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_n_s8 (int8x16_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal2_nv8hi (__a, __b, __c);
++ return (int8x16_t) __builtin_aarch64_sqshl_nv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlal_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_n_s16 (int16x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_lanev4hi (__a, __b, __c, __d);
++ return (int16x8_t) __builtin_aarch64_sqshl_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlal_laneq_s16 (int32x4_t __a, int16x4_t __b, int16x8_t __c, int const __d)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_n_s32 (int32x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_laneqv4hi (__a, __b, __c, __d);
++ return (int32x4_t) __builtin_aarch64_sqshl_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlal_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_n_s64 (int64x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_nv4hi (__a, __b, __c);
++ return (int64x2_t) __builtin_aarch64_sqshl_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlal_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_n_u8 (uint8x16_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlalv2si (__a, __b, __c);
++ return __builtin_aarch64_uqshl_nv16qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlal_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_n_u16 (uint16x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal2v4si (__a, __b, __c);
++ return __builtin_aarch64_uqshl_nv8hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
+- int const __d)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_n_u32 (uint32x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal2_lanev4si (__a, __b, __c, __d);
++ return __builtin_aarch64_uqshl_nv4si_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlal_high_laneq_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
+- int const __d)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlq_n_u64 (uint64x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal2_laneqv4si (__a, __b, __c, __d);
++ return __builtin_aarch64_uqshl_nv2di_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlal_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlb_n_s8 (int8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal2_nv4si (__a, __b, __c);
++ return (int8_t) __builtin_aarch64_sqshl_nqi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlal_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlh_n_s16 (int16_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_lanev2si (__a, __b, __c, __d);
++ return (int16_t) __builtin_aarch64_sqshl_nhi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlal_laneq_s32 (int64x2_t __a, int32x2_t __b, int32x4_t __c, int const __d)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshls_n_s32 (int32_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_laneqv2si (__a, __b, __c, __d);
++ return (int32_t) __builtin_aarch64_sqshl_nsi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlal_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshld_n_s64 (int64_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_nv2si (__a, __b, __c);
++ return __builtin_aarch64_sqshl_ndi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmlalh_s16 (int32_t __a, int16_t __b, int16_t __c)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlb_n_u8 (uint8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlalhi (__a, __b, __c);
++ return __builtin_aarch64_uqshl_nqi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmlalh_lane_s16 (int32_t __a, int16_t __b, int16x4_t __c, const int __d)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlh_n_u16 (uint16_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_lanehi (__a, __b, __c, __d);
++ return __builtin_aarch64_uqshl_nhi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmlalh_laneq_s16 (int32_t __a, int16_t __b, int16x8_t __c, const int __d)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshls_n_u32 (uint32_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_laneqhi (__a, __b, __c, __d);
++ return __builtin_aarch64_uqshl_nsi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqdmlals_s32 (int64_t __a, int32_t __b, int32_t __c)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshld_n_u64 (uint64_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlalsi (__a, __b, __c);
++ return __builtin_aarch64_uqshl_ndi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqdmlals_lane_s32 (int64_t __a, int32_t __b, int32x2_t __c, const int __d)
++/* vqshlu */
++
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlu_n_s8 (int8x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_lanesi (__a, __b, __c, __d);
++ return __builtin_aarch64_sqshlu_nv8qi_uss (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqdmlals_laneq_s32 (int64_t __a, int32_t __b, int32x4_t __c, const int __d)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlu_n_s16 (int16x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlal_laneqsi (__a, __b, __c, __d);
++ return __builtin_aarch64_sqshlu_nv4hi_uss (__a, __b);
+ }
+
+-/* vqdmlsl */
+-
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlsl_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlu_n_s32 (int32x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlslv4hi (__a, __b, __c);
++ return __builtin_aarch64_sqshlu_nv2si_uss (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlsl_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlu_n_s64 (int64x1_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl2v8hi (__a, __b, __c);
++ return (uint64x1_t) {__builtin_aarch64_sqshlu_ndi_uss (__a[0], __b)};
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlsl_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
+- int const __d)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshluq_n_s8 (int8x16_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl2_lanev8hi (__a, __b, __c, __d);
++ return __builtin_aarch64_sqshlu_nv16qi_uss (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlsl_high_laneq_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
+- int const __d)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshluq_n_s16 (int16x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl2_laneqv8hi (__a, __b, __c, __d);
++ return __builtin_aarch64_sqshlu_nv8hi_uss (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlsl_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshluq_n_s32 (int32x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl2_nv8hi (__a, __b, __c);
++ return __builtin_aarch64_sqshlu_nv4si_uss (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlsl_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshluq_n_s64 (int64x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_lanev4hi (__a, __b, __c, __d);
++ return __builtin_aarch64_sqshlu_nv2di_uss (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlsl_laneq_s16 (int32x4_t __a, int16x4_t __b, int16x8_t __c, int const __d)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlub_n_s8 (int8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_laneqv4hi (__a, __b, __c, __d);
++ return (int8_t) __builtin_aarch64_sqshlu_nqi_uss (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmlsl_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshluh_n_s16 (int16_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_nv4hi (__a, __b, __c);
++ return (int16_t) __builtin_aarch64_sqshlu_nhi_uss (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlsl_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlus_n_s32 (int32_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlslv2si (__a, __b, __c);
++ return (int32_t) __builtin_aarch64_sqshlu_nsi_uss (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlsl_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshlud_n_s64 (int64_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl2v4si (__a, __b, __c);
++ return __builtin_aarch64_sqshlu_ndi_uss (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
+- int const __d)
++/* vqshrn */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrn_n_s16 (int16x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl2_lanev4si (__a, __b, __c, __d);
++ return (int8x8_t) __builtin_aarch64_sqshrn_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlsl_high_laneq_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
+- int const __d)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrn_n_s32 (int32x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl2_laneqv4si (__a, __b, __c, __d);
++ return (int16x4_t) __builtin_aarch64_sqshrn_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlsl_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrn_n_s64 (int64x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl2_nv4si (__a, __b, __c);
++ return (int32x2_t) __builtin_aarch64_sqshrn_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlsl_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrn_n_u16 (uint16x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_lanev2si (__a, __b, __c, __d);
++ return __builtin_aarch64_uqshrn_nv8hi_uus ( __a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlsl_laneq_s32 (int64x2_t __a, int32x2_t __b, int32x4_t __c, int const __d)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrn_n_u32 (uint32x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_laneqv2si (__a, __b, __c, __d);
++ return __builtin_aarch64_uqshrn_nv4si_uus ( __a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmlsl_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrn_n_u64 (uint64x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_nv2si (__a, __b, __c);
++ return __builtin_aarch64_uqshrn_nv2di_uus ( __a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmlslh_s16 (int32_t __a, int16_t __b, int16_t __c)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrnh_n_s16 (int16_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlslhi (__a, __b, __c);
++ return (int8_t) __builtin_aarch64_sqshrn_nhi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmlslh_lane_s16 (int32_t __a, int16_t __b, int16x4_t __c, const int __d)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrns_n_s32 (int32_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_lanehi (__a, __b, __c, __d);
++ return (int16_t) __builtin_aarch64_sqshrn_nsi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmlslh_laneq_s16 (int32_t __a, int16_t __b, int16x8_t __c, const int __d)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrnd_n_s64 (int64_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_laneqhi (__a, __b, __c, __d);
++ return (int32_t) __builtin_aarch64_sqshrn_ndi (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqdmlsls_s32 (int64_t __a, int32_t __b, int32_t __c)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrnh_n_u16 (uint16_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlslsi (__a, __b, __c);
++ return __builtin_aarch64_uqshrn_nhi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqdmlsls_lane_s32 (int64_t __a, int32_t __b, int32x2_t __c, const int __d)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrns_n_u32 (uint32_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_lanesi (__a, __b, __c, __d);
++ return __builtin_aarch64_uqshrn_nsi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqdmlsls_laneq_s32 (int64_t __a, int32_t __b, int32x4_t __c, const int __d)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrnd_n_u64 (uint64_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmlsl_laneqsi (__a, __b, __c, __d);
++ return __builtin_aarch64_uqshrn_ndi_uus (__a, __b);
+ }
+
+-/* vqdmulh */
++/* vqshrun */
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrun_n_s16 (int16x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmulh_lanev4hi (__a, __b, __c);
++ return (uint8x8_t) __builtin_aarch64_sqshrun_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrun_n_s32 (int32x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmulh_lanev2si (__a, __b, __c);
++ return (uint16x4_t) __builtin_aarch64_sqshrun_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrun_n_s64 (int64x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmulh_lanev8hi (__a, __b, __c);
++ return (uint32x2_t) __builtin_aarch64_sqshrun_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrunh_n_s16 (int16_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmulh_lanev4si (__a, __b, __c);
++ return (int8_t) __builtin_aarch64_sqshrun_nhi (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqdmulhh_s16 (int16_t __a, int16_t __b)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshruns_n_s32 (int32_t __a, const int __b)
+ {
+- return (int16_t) __builtin_aarch64_sqdmulhhi (__a, __b);
++ return (int16_t) __builtin_aarch64_sqshrun_nsi (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqdmulhh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqshrund_n_s64 (int64_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqdmulh_lanehi (__a, __b, __c);
++ return (int32_t) __builtin_aarch64_sqshrun_ndi (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqdmulhh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
++/* vqsub */
++
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqsubb_s8 (int8_t __a, int8_t __b)
+ {
+- return __builtin_aarch64_sqdmulh_laneqhi (__a, __b, __c);
++ return (int8_t) __builtin_aarch64_sqsubqi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmulhs_s32 (int32_t __a, int32_t __b)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqsubh_s16 (int16_t __a, int16_t __b)
+ {
+- return (int32_t) __builtin_aarch64_sqdmulhsi (__a, __b);
++ return (int16_t) __builtin_aarch64_sqsubhi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmulhs_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqsubs_s32 (int32_t __a, int32_t __b)
+ {
+- return __builtin_aarch64_sqdmulh_lanesi (__a, __b, __c);
++ return (int32_t) __builtin_aarch64_sqsubsi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmulhs_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqsubd_s64 (int64_t __a, int64_t __b)
+ {
+- return __builtin_aarch64_sqdmulh_laneqsi (__a, __b, __c);
++ return __builtin_aarch64_sqsubdi (__a, __b);
+ }
+
+-/* vqdmull */
+-
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmull_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqsubb_u8 (uint8_t __a, uint8_t __b)
+ {
+- return __builtin_aarch64_sqdmullv4hi (__a, __b);
++ return (uint8_t) __builtin_aarch64_uqsubqi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmull_high_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqsubh_u16 (uint16_t __a, uint16_t __b)
+ {
+- return __builtin_aarch64_sqdmull2v8hi (__a, __b);
++ return (uint16_t) __builtin_aarch64_uqsubhi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmull_high_lane_s16 (int16x8_t __a, int16x4_t __b, int const __c)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqsubs_u32 (uint32_t __a, uint32_t __b)
+ {
+- return __builtin_aarch64_sqdmull2_lanev8hi (__a, __b,__c);
++ return (uint32_t) __builtin_aarch64_uqsubsi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmull_high_laneq_s16 (int16x8_t __a, int16x8_t __b, int const __c)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqsubd_u64 (uint64_t __a, uint64_t __b)
+ {
+- return __builtin_aarch64_sqdmull2_laneqv8hi (__a, __b,__c);
++ return __builtin_aarch64_uqsubdi_uuu (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmull_high_n_s16 (int16x8_t __a, int16_t __b)
++/* vqtbl2 */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl2_s8 (int8x16x2_t tab, uint8x8_t idx)
+ {
+- return __builtin_aarch64_sqdmull2_nv8hi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[1], 1);
++ return __builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmull_lane_s16 (int16x4_t __a, int16x4_t __b, int const __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl2_u8 (uint8x16x2_t tab, uint8x8_t idx)
+ {
+- return __builtin_aarch64_sqdmull_lanev4hi (__a, __b, __c);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ return (uint8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmull_laneq_s16 (int16x4_t __a, int16x8_t __b, int const __c)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl2_p8 (poly8x16x2_t tab, uint8x8_t idx)
+ {
+- return __builtin_aarch64_sqdmull_laneqv4hi (__a, __b, __c);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ return (poly8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqdmull_n_s16 (int16x4_t __a, int16_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl2q_s8 (int8x16x2_t tab, uint8x16_t idx)
+ {
+- return __builtin_aarch64_sqdmull_nv4hi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ return __builtin_aarch64_tbl3v16qi (__o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmull_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl2q_u8 (uint8x16x2_t tab, uint8x16_t idx)
+ {
+- return __builtin_aarch64_sqdmullv2si (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ return (uint8x16_t)__builtin_aarch64_tbl3v16qi (__o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmull_high_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl2q_p8 (poly8x16x2_t tab, uint8x16_t idx)
+ {
+- return __builtin_aarch64_sqdmull2v4si (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ return (poly8x16_t)__builtin_aarch64_tbl3v16qi (__o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmull_high_lane_s32 (int32x4_t __a, int32x2_t __b, int const __c)
++/* vqtbl3 */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl3_s8 (int8x16x3_t tab, uint8x8_t idx)
+ {
+- return __builtin_aarch64_sqdmull2_lanev4si (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return __builtin_aarch64_qtbl3v8qi (__o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmull_high_laneq_s32 (int32x4_t __a, int32x4_t __b, int const __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl3_u8 (uint8x16x3_t tab, uint8x8_t idx)
+ {
+- return __builtin_aarch64_sqdmull2_laneqv4si (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return (uint8x8_t)__builtin_aarch64_qtbl3v8qi (__o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmull_high_n_s32 (int32x4_t __a, int32_t __b)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl3_p8 (poly8x16x3_t tab, uint8x8_t idx)
+ {
+- return __builtin_aarch64_sqdmull2_nv4si (__a, __b);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return (poly8x8_t)__builtin_aarch64_qtbl3v8qi (__o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmull_lane_s32 (int32x2_t __a, int32x2_t __b, int const __c)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl3q_s8 (int8x16x3_t tab, uint8x16_t idx)
+ {
+- return __builtin_aarch64_sqdmull_lanev2si (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return __builtin_aarch64_qtbl3v16qi (__o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmull_laneq_s32 (int32x2_t __a, int32x4_t __b, int const __c)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl3q_u8 (uint8x16x3_t tab, uint8x16_t idx)
+ {
+- return __builtin_aarch64_sqdmull_laneqv2si (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return (uint8x16_t)__builtin_aarch64_qtbl3v16qi (__o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqdmull_n_s32 (int32x2_t __a, int32_t __b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl3q_p8 (poly8x16x3_t tab, uint8x16_t idx)
+ {
+- return __builtin_aarch64_sqdmull_nv2si (__a, __b);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return (poly8x16_t)__builtin_aarch64_qtbl3v16qi (__o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmullh_s16 (int16_t __a, int16_t __b)
++/* vqtbl4 */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl4_s8 (int8x16x4_t tab, uint8x8_t idx)
+ {
+- return (int32_t) __builtin_aarch64_sqdmullhi (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return __builtin_aarch64_qtbl4v8qi (__o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmullh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl4_u8 (uint8x16x4_t tab, uint8x8_t idx)
+ {
+- return __builtin_aarch64_sqdmull_lanehi (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return (uint8x8_t)__builtin_aarch64_qtbl4v8qi (__o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqdmullh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl4_p8 (poly8x16x4_t tab, uint8x8_t idx)
+ {
+- return __builtin_aarch64_sqdmull_laneqhi (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return (poly8x8_t)__builtin_aarch64_qtbl4v8qi (__o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqdmulls_s32 (int32_t __a, int32_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl4q_s8 (int8x16x4_t tab, uint8x16_t idx)
+ {
+- return __builtin_aarch64_sqdmullsi (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return __builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqdmulls_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl4q_u8 (uint8x16x4_t tab, uint8x16_t idx)
+ {
+- return __builtin_aarch64_sqdmull_lanesi (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return (uint8x16_t)__builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqdmulls_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbl4q_p8 (poly8x16x4_t tab, uint8x16_t idx)
+ {
+- return __builtin_aarch64_sqdmull_laneqsi (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return (poly8x16_t)__builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)idx);
+ }
+
+-/* vqmovn */
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqmovn_s16 (int16x8_t __a)
++/* vqtbx2 */
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx2_s8 (int8x8_t r, int8x16x2_t tab, uint8x8_t idx)
+ {
+- return (int8x8_t) __builtin_aarch64_sqmovnv8hi (__a);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[1], 1);
++ return __builtin_aarch64_tbx4v8qi (r, __o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqmovn_s32 (int32x4_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx2_u8 (uint8x8_t r, uint8x16x2_t tab, uint8x8_t idx)
+ {
+- return (int16x4_t) __builtin_aarch64_sqmovnv4si (__a);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ return (uint8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)r, __o,
++ (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqmovn_s64 (int64x2_t __a)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx2_p8 (poly8x8_t r, poly8x16x2_t tab, uint8x8_t idx)
+ {
+- return (int32x2_t) __builtin_aarch64_sqmovnv2di (__a);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ return (poly8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)r, __o,
++ (int8x8_t)idx);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqmovn_u16 (uint16x8_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx2q_s8 (int8x16_t r, int8x16x2_t tab, uint8x16_t idx)
+ {
+- return (uint8x8_t) __builtin_aarch64_uqmovnv8hi ((int16x8_t) __a);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[1], 1);
++ return __builtin_aarch64_tbx4v16qi (r, __o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqmovn_u32 (uint32x4_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx2q_u8 (uint8x16_t r, uint8x16x2_t tab, uint8x16_t idx)
+ {
+- return (uint16x4_t) __builtin_aarch64_uqmovnv4si ((int32x4_t) __a);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ return (uint8x16_t)__builtin_aarch64_tbx4v16qi ((int8x16_t)r, __o,
++ (int8x16_t)idx);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqmovn_u64 (uint64x2_t __a)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx2q_p8 (poly8x16_t r, poly8x16x2_t tab, uint8x16_t idx)
+ {
+- return (uint32x2_t) __builtin_aarch64_uqmovnv2di ((int64x2_t) __a);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ return (poly8x16_t)__builtin_aarch64_tbx4v16qi ((int8x16_t)r, __o,
++ (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqmovnh_s16 (int16_t __a)
++/* vqtbx3 */
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx3_s8 (int8x8_t r, int8x16x3_t tab, uint8x8_t idx)
+ {
+- return (int8_t) __builtin_aarch64_sqmovnhi (__a);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[2], 2);
++ return __builtin_aarch64_qtbx3v8qi (r, __o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqmovns_s32 (int32_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx3_u8 (uint8x8_t r, uint8x16x3_t tab, uint8x8_t idx)
+ {
+- return (int16_t) __builtin_aarch64_sqmovnsi (__a);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return (uint8x8_t)__builtin_aarch64_qtbx3v8qi ((int8x8_t)r, __o,
++ (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqmovnd_s64 (int64_t __a)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx3_p8 (poly8x8_t r, poly8x16x3_t tab, uint8x8_t idx)
+ {
+- return (int32_t) __builtin_aarch64_sqmovndi (__a);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return (poly8x8_t)__builtin_aarch64_qtbx3v8qi ((int8x8_t)r, __o,
++ (int8x8_t)idx);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vqmovnh_u16 (uint16_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx3q_s8 (int8x16_t r, int8x16x3_t tab, uint8x16_t idx)
+ {
+- return (uint8_t) __builtin_aarch64_uqmovnhi (__a);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[2], 2);
++ return __builtin_aarch64_qtbx3v16qi (r, __o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vqmovns_u32 (uint32_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx3q_u8 (uint8x16_t r, uint8x16x3_t tab, uint8x16_t idx)
+ {
+- return (uint16_t) __builtin_aarch64_uqmovnsi (__a);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return (uint8x16_t)__builtin_aarch64_qtbx3v16qi ((int8x16_t)r, __o,
++ (int8x16_t)idx);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vqmovnd_u64 (uint64_t __a)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx3q_p8 (poly8x16_t r, poly8x16x3_t tab, uint8x16_t idx)
+ {
+- return (uint32_t) __builtin_aarch64_uqmovndi (__a);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
++ return (poly8x16_t)__builtin_aarch64_qtbx3v16qi ((int8x16_t)r, __o,
++ (int8x16_t)idx);
+ }
+
+-/* vqmovun */
++/* vqtbx4 */
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqmovun_s16 (int16x8_t __a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx4_s8 (int8x8_t r, int8x16x4_t tab, uint8x8_t idx)
+ {
+- return (uint8x8_t) __builtin_aarch64_sqmovunv8hi (__a);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[3], 3);
++ return __builtin_aarch64_qtbx4v8qi (r, __o, (int8x8_t)idx);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqmovun_s32 (int32x4_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx4_u8 (uint8x8_t r, uint8x16x4_t tab, uint8x8_t idx)
+ {
+- return (uint16x4_t) __builtin_aarch64_sqmovunv4si (__a);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return (uint8x8_t)__builtin_aarch64_qtbx4v8qi ((int8x8_t)r, __o,
++ (int8x8_t)idx);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqmovun_s64 (int64x2_t __a)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx4_p8 (poly8x8_t r, poly8x16x4_t tab, uint8x8_t idx)
+ {
+- return (uint32x2_t) __builtin_aarch64_sqmovunv2di (__a);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return (poly8x8_t)__builtin_aarch64_qtbx4v8qi ((int8x8_t)r, __o,
++ (int8x8_t)idx);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqmovunh_s16 (int16_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx4q_s8 (int8x16_t r, int8x16x4_t tab, uint8x16_t idx)
+ {
+- return (int8_t) __builtin_aarch64_sqmovunhi (__a);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[3], 3);
++ return __builtin_aarch64_qtbx4v16qi (r, __o, (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqmovuns_s32 (int32_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx4q_u8 (uint8x16_t r, uint8x16x4_t tab, uint8x16_t idx)
+ {
+- return (int16_t) __builtin_aarch64_sqmovunsi (__a);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return (uint8x16_t)__builtin_aarch64_qtbx4v16qi ((int8x16_t)r, __o,
++ (int8x16_t)idx);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqmovund_s64 (int64_t __a)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vqtbx4q_p8 (poly8x16_t r, poly8x16x4_t tab, uint8x16_t idx)
+ {
+- return (int32_t) __builtin_aarch64_sqmovundi (__a);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
++ return (poly8x16_t)__builtin_aarch64_qtbx4v16qi ((int8x16_t)r, __o,
++ (int8x16_t)idx);
+ }
+
+-/* vqneg */
++/* vrbit */
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqnegq_s64 (int64x2_t __a)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrbit_p8 (poly8x8_t __a)
+ {
+- return (int64x2_t) __builtin_aarch64_sqnegv2di (__a);
++ return (poly8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqnegb_s8 (int8_t __a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrbit_s8 (int8x8_t __a)
+ {
+- return (int8_t) __builtin_aarch64_sqnegqi (__a);
++ return __builtin_aarch64_rbitv8qi (__a);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqnegh_s16 (int16_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrbit_u8 (uint8x8_t __a)
+ {
+- return (int16_t) __builtin_aarch64_sqneghi (__a);
++ return (uint8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqnegs_s32 (int32_t __a)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrbitq_p8 (poly8x16_t __a)
+ {
+- return (int32_t) __builtin_aarch64_sqnegsi (__a);
++ return (poly8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t)__a);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqnegd_s64 (int64_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrbitq_s8 (int8x16_t __a)
+ {
+- return __builtin_aarch64_sqnegdi (__a);
++ return __builtin_aarch64_rbitv16qi (__a);
+ }
+
+-/* vqrdmulh */
+-
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrbitq_u8 (uint8x16_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_lanev4hi (__a, __b, __c);
++ return (uint8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
++/* vrecpe */
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpe_u32 (uint32x2_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_lanev2si (__a, __b, __c);
++ return (uint32x2_t) __builtin_aarch64_urecpev2si ((int32x2_t) __a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpeq_u32 (uint32x4_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_lanev8hi (__a, __b, __c);
++ return (uint32x4_t) __builtin_aarch64_urecpev4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpes_f32 (float32_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_lanev4si (__a, __b, __c);
++ return __builtin_aarch64_frecpesf (__a);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrdmulhh_s16 (int16_t __a, int16_t __b)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecped_f64 (float64_t __a)
+ {
+- return (int16_t) __builtin_aarch64_sqrdmulhhi (__a, __b);
++ return __builtin_aarch64_frecpedf (__a);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrdmulhh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpe_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_lanehi (__a, __b, __c);
++ return __builtin_aarch64_frecpev2sf (__a);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrdmulhh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpe_f64 (float64x1_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_laneqhi (__a, __b, __c);
++ return (float64x1_t) { vrecped_f64 (vget_lane_f64 (__a, 0)) };
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrdmulhs_s32 (int32_t __a, int32_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpeq_f32 (float32x4_t __a)
+ {
+- return (int32_t) __builtin_aarch64_sqrdmulhsi (__a, __b);
++ return __builtin_aarch64_frecpev4sf (__a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrdmulhs_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpeq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_sqrdmulh_lanesi (__a, __b, __c);
++ return __builtin_aarch64_frecpev2df (__a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrdmulhs_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
++/* vrecps */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpss_f32 (float32_t __a, float32_t __b)
+ {
+- return __builtin_aarch64_sqrdmulh_laneqsi (__a, __b, __c);
++ return __builtin_aarch64_frecpssf (__a, __b);
+ }
+
+-/* vqrshl */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqrshl_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpsd_f64 (float64_t __a, float64_t __b)
+ {
+- return __builtin_aarch64_sqrshlv8qi (__a, __b);
++ return __builtin_aarch64_frecpsdf (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrshl_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecps_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- return __builtin_aarch64_sqrshlv4hi (__a, __b);
++ return __builtin_aarch64_frecpsv2sf (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrshl_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecps_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- return __builtin_aarch64_sqrshlv2si (__a, __b);
++ return (float64x1_t) { vrecpsd_f64 (vget_lane_f64 (__a, 0),
++ vget_lane_f64 (__b, 0)) };
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vqrshl_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpsq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- return (int64x1_t) {__builtin_aarch64_sqrshldi (__a[0], __b[0])};
++ return __builtin_aarch64_frecpsv4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqrshl_u8 (uint8x8_t __a, int8x8_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpsq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- return __builtin_aarch64_uqrshlv8qi_uus ( __a, __b);
++ return __builtin_aarch64_frecpsv2df (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqrshl_u16 (uint16x4_t __a, int16x4_t __b)
++/* vrecpx */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpxs_f32 (float32_t __a)
+ {
+- return __builtin_aarch64_uqrshlv4hi_uus ( __a, __b);
++ return __builtin_aarch64_frecpxsf (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqrshl_u32 (uint32x2_t __a, int32x2_t __b)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpxd_f64 (float64_t __a)
+ {
+- return __builtin_aarch64_uqrshlv2si_uus ( __a, __b);
++ return __builtin_aarch64_frecpxdf (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vqrshl_u64 (uint64x1_t __a, int64x1_t __b)
++
++/* vrev */
++
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev16_p8 (poly8x8_t a)
+ {
+- return (uint64x1_t) {__builtin_aarch64_uqrshldi_uus (__a[0], __b[0])};
++ return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqrshlq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev16_s8 (int8x8_t a)
+ {
+- return __builtin_aarch64_sqrshlv16qi (__a, __b);
++ return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqrshlq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev16_u8 (uint8x8_t a)
+ {
+- return __builtin_aarch64_sqrshlv8hi (__a, __b);
++ return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqrshlq_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev16q_p8 (poly8x16_t a)
+ {
+- return __builtin_aarch64_sqrshlv4si (__a, __b);
++ return __builtin_shuffle (a,
++ (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqrshlq_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev16q_s8 (int8x16_t a)
+ {
+- return __builtin_aarch64_sqrshlv2di (__a, __b);
++ return __builtin_shuffle (a,
++ (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqrshlq_u8 (uint8x16_t __a, int8x16_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev16q_u8 (uint8x16_t a)
+ {
+- return __builtin_aarch64_uqrshlv16qi_uus ( __a, __b);
++ return __builtin_shuffle (a,
++ (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vqrshlq_u16 (uint16x8_t __a, int16x8_t __b)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32_p8 (poly8x8_t a)
+ {
+- return __builtin_aarch64_uqrshlv8hi_uus ( __a, __b);
++ return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vqrshlq_u32 (uint32x4_t __a, int32x4_t __b)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32_p16 (poly16x4_t a)
+ {
+- return __builtin_aarch64_uqrshlv4si_uus ( __a, __b);
++ return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vqrshlq_u64 (uint64x2_t __a, int64x2_t __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32_s8 (int8x8_t a)
+ {
+- return __builtin_aarch64_uqrshlv2di_uus ( __a, __b);
++ return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqrshlb_s8 (int8_t __a, int8_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32_s16 (int16x4_t a)
+ {
+- return __builtin_aarch64_sqrshlqi (__a, __b);
++ return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrshlh_s16 (int16_t __a, int16_t __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32_u8 (uint8x8_t a)
+ {
+- return __builtin_aarch64_sqrshlhi (__a, __b);
++ return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrshls_s32 (int32_t __a, int32_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32_u16 (uint16x4_t a)
+ {
+- return __builtin_aarch64_sqrshlsi (__a, __b);
++ return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqrshld_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32q_p8 (poly8x16_t a)
+ {
+- return __builtin_aarch64_sqrshldi (__a, __b);
++ return __builtin_shuffle (a,
++ (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vqrshlb_u8 (uint8_t __a, uint8_t __b)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32q_p16 (poly16x8_t a)
+ {
+- return __builtin_aarch64_uqrshlqi_uus (__a, __b);
++ return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vqrshlh_u16 (uint16_t __a, uint16_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32q_s8 (int8x16_t a)
+ {
+- return __builtin_aarch64_uqrshlhi_uus (__a, __b);
++ return __builtin_shuffle (a,
++ (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vqrshls_u32 (uint32_t __a, uint32_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32q_s16 (int16x8_t a)
+ {
+- return __builtin_aarch64_uqrshlsi_uus (__a, __b);
++ return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vqrshld_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32q_u8 (uint8x16_t a)
+ {
+- return __builtin_aarch64_uqrshldi_uus (__a, __b);
++ return __builtin_shuffle (a,
++ (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
+ }
+
+-/* vqrshrn */
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev32q_u16 (uint16x8_t a)
++{
++ return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
++}
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqrshrn_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_f16 (float16x4_t __a)
+ {
+- return (int8x8_t) __builtin_aarch64_sqrshrn_nv8hi (__a, __b);
++ return __builtin_shuffle (__a, (uint16x4_t) { 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqrshrn_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_f32 (float32x2_t a)
+ {
+- return (int16x4_t) __builtin_aarch64_sqrshrn_nv4si (__a, __b);
++ return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqrshrn_n_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_p8 (poly8x8_t a)
+ {
+- return (int32x2_t) __builtin_aarch64_sqrshrn_nv2di (__a, __b);
++ return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqrshrn_n_u16 (uint16x8_t __a, const int __b)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_p16 (poly16x4_t a)
+ {
+- return __builtin_aarch64_uqrshrn_nv8hi_uus ( __a, __b);
++ return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqrshrn_n_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_s8 (int8x8_t a)
+ {
+- return __builtin_aarch64_uqrshrn_nv4si_uus ( __a, __b);
++ return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqrshrn_n_u64 (uint64x2_t __a, const int __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_s16 (int16x4_t a)
+ {
+- return __builtin_aarch64_uqrshrn_nv2di_uus ( __a, __b);
++ return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqrshrnh_n_s16 (int16_t __a, const int __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_s32 (int32x2_t a)
+ {
+- return (int8_t) __builtin_aarch64_sqrshrn_nhi (__a, __b);
++ return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrshrns_n_s32 (int32_t __a, const int __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_u8 (uint8x8_t a)
+ {
+- return (int16_t) __builtin_aarch64_sqrshrn_nsi (__a, __b);
++ return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrshrnd_n_s64 (int64_t __a, const int __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_u16 (uint16x4_t a)
+ {
+- return (int32_t) __builtin_aarch64_sqrshrn_ndi (__a, __b);
++ return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vqrshrnh_n_u16 (uint16_t __a, const int __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_u32 (uint32x2_t a)
+ {
+- return __builtin_aarch64_uqrshrn_nhi_uus (__a, __b);
++ return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vqrshrns_n_u32 (uint32_t __a, const int __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_f16 (float16x8_t __a)
+ {
+- return __builtin_aarch64_uqrshrn_nsi_uus (__a, __b);
++ return __builtin_shuffle (__a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vqrshrnd_n_u64 (uint64_t __a, const int __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_f32 (float32x4_t a)
+ {
+- return __builtin_aarch64_uqrshrn_ndi_uus (__a, __b);
++ return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
+ }
+
+-/* vqrshrun */
+-
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqrshrun_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_p8 (poly8x16_t a)
+ {
+- return (uint8x8_t) __builtin_aarch64_sqrshrun_nv8hi (__a, __b);
++ return __builtin_shuffle (a,
++ (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqrshrun_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_p16 (poly16x8_t a)
+ {
+- return (uint16x4_t) __builtin_aarch64_sqrshrun_nv4si (__a, __b);
++ return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqrshrun_n_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_s8 (int8x16_t a)
+ {
+- return (uint32x2_t) __builtin_aarch64_sqrshrun_nv2di (__a, __b);
++ return __builtin_shuffle (a,
++ (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqrshrunh_n_s16 (int16_t __a, const int __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_s16 (int16x8_t a)
+ {
+- return (int8_t) __builtin_aarch64_sqrshrun_nhi (__a, __b);
++ return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqrshruns_n_s32 (int32_t __a, const int __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_s32 (int32x4_t a)
+ {
+- return (int16_t) __builtin_aarch64_sqrshrun_nsi (__a, __b);
++ return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqrshrund_n_s64 (int64_t __a, const int __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_u8 (uint8x16_t a)
+ {
+- return (int32_t) __builtin_aarch64_sqrshrun_ndi (__a, __b);
++ return __builtin_shuffle (a,
++ (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
+ }
+
+-/* vqshl */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqshl_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_u16 (uint16x8_t a)
+ {
+- return __builtin_aarch64_sqshlv8qi (__a, __b);
++ return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqshl_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_u32 (uint32x4_t a)
+ {
+- return __builtin_aarch64_sqshlv4hi (__a, __b);
++ return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqshl_s32 (int32x2_t __a, int32x2_t __b)
++/* vrnd */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrnd_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_sqshlv2si (__a, __b);
++ return __builtin_aarch64_btruncv2sf (__a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vqshl_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrnd_f64 (float64x1_t __a)
+ {
+- return (int64x1_t) {__builtin_aarch64_sqshldi (__a[0], __b[0])};
++ return vset_lane_f64 (__builtin_trunc (vget_lane_f64 (__a, 0)), __a, 0);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqshl_u8 (uint8x8_t __a, int8x8_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndq_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_uqshlv8qi_uus ( __a, __b);
++ return __builtin_aarch64_btruncv4sf (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqshl_u16 (uint16x4_t __a, int16x4_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_uqshlv4hi_uus ( __a, __b);
++ return __builtin_aarch64_btruncv2df (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqshl_u32 (uint32x2_t __a, int32x2_t __b)
++/* vrnda */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrnda_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_uqshlv2si_uus ( __a, __b);
++ return __builtin_aarch64_roundv2sf (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vqshl_u64 (uint64x1_t __a, int64x1_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrnda_f64 (float64x1_t __a)
+ {
+- return (uint64x1_t) {__builtin_aarch64_uqshldi_uus (__a[0], __b[0])};
++ return vset_lane_f64 (__builtin_round (vget_lane_f64 (__a, 0)), __a, 0);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqshlq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndaq_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_sqshlv16qi (__a, __b);
++ return __builtin_aarch64_roundv4sf (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqshlq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndaq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_sqshlv8hi (__a, __b);
++ return __builtin_aarch64_roundv2df (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqshlq_s32 (int32x4_t __a, int32x4_t __b)
++/* vrndi */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndi_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_sqshlv4si (__a, __b);
++ return __builtin_aarch64_nearbyintv2sf (__a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqshlq_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndi_f64 (float64x1_t __a)
+ {
+- return __builtin_aarch64_sqshlv2di (__a, __b);
++ return vset_lane_f64 (__builtin_nearbyint (vget_lane_f64 (__a, 0)), __a, 0);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqshlq_u8 (uint8x16_t __a, int8x16_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndiq_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_uqshlv16qi_uus ( __a, __b);
++ return __builtin_aarch64_nearbyintv4sf (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vqshlq_u16 (uint16x8_t __a, int16x8_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndiq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_uqshlv8hi_uus ( __a, __b);
++ return __builtin_aarch64_nearbyintv2df (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vqshlq_u32 (uint32x4_t __a, int32x4_t __b)
++/* vrndm */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndm_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_uqshlv4si_uus ( __a, __b);
++ return __builtin_aarch64_floorv2sf (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vqshlq_u64 (uint64x2_t __a, int64x2_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndm_f64 (float64x1_t __a)
+ {
+- return __builtin_aarch64_uqshlv2di_uus ( __a, __b);
++ return vset_lane_f64 (__builtin_floor (vget_lane_f64 (__a, 0)), __a, 0);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqshlb_s8 (int8_t __a, int8_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndmq_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_sqshlqi (__a, __b);
++ return __builtin_aarch64_floorv4sf (__a);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqshlh_s16 (int16_t __a, int16_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndmq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_sqshlhi (__a, __b);
++ return __builtin_aarch64_floorv2df (__a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqshls_s32 (int32_t __a, int32_t __b)
++/* vrndn */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndn_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_sqshlsi (__a, __b);
++ return __builtin_aarch64_frintnv2sf (__a);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqshld_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndn_f64 (float64x1_t __a)
+ {
+- return __builtin_aarch64_sqshldi (__a, __b);
++ return (float64x1_t) {__builtin_aarch64_frintndf (__a[0])};
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vqshlb_u8 (uint8_t __a, uint8_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndnq_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_uqshlqi_uus (__a, __b);
++ return __builtin_aarch64_frintnv4sf (__a);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vqshlh_u16 (uint16_t __a, uint16_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndnq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_uqshlhi_uus (__a, __b);
++ return __builtin_aarch64_frintnv2df (__a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vqshls_u32 (uint32_t __a, uint32_t __b)
++/* vrndp */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndp_f32 (float32x2_t __a)
+ {
+- return __builtin_aarch64_uqshlsi_uus (__a, __b);
++ return __builtin_aarch64_ceilv2sf (__a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vqshld_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndp_f64 (float64x1_t __a)
+ {
+- return __builtin_aarch64_uqshldi_uus (__a, __b);
++ return vset_lane_f64 (__builtin_ceil (vget_lane_f64 (__a, 0)), __a, 0);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqshl_n_s8 (int8x8_t __a, const int __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndpq_f32 (float32x4_t __a)
+ {
+- return (int8x8_t) __builtin_aarch64_sqshl_nv8qi (__a, __b);
++ return __builtin_aarch64_ceilv4sf (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqshl_n_s16 (int16x4_t __a, const int __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndpq_f64 (float64x2_t __a)
+ {
+- return (int16x4_t) __builtin_aarch64_sqshl_nv4hi (__a, __b);
++ return __builtin_aarch64_ceilv2df (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqshl_n_s32 (int32x2_t __a, const int __b)
++/* vrndx */
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndx_f32 (float32x2_t __a)
+ {
+- return (int32x2_t) __builtin_aarch64_sqshl_nv2si (__a, __b);
++ return __builtin_aarch64_rintv2sf (__a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vqshl_n_s64 (int64x1_t __a, const int __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndx_f64 (float64x1_t __a)
+ {
+- return (int64x1_t) {__builtin_aarch64_sqshl_ndi (__a[0], __b)};
++ return vset_lane_f64 (__builtin_rint (vget_lane_f64 (__a, 0)), __a, 0);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqshl_n_u8 (uint8x8_t __a, const int __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndxq_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_uqshl_nv8qi_uus (__a, __b);
++ return __builtin_aarch64_rintv4sf (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqshl_n_u16 (uint16x4_t __a, const int __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndxq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_uqshl_nv4hi_uus (__a, __b);
++ return __builtin_aarch64_rintv2df (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqshl_n_u32 (uint32x2_t __a, const int __b)
++/* vrshl */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- return __builtin_aarch64_uqshl_nv2si_uus (__a, __b);
++ return (int8x8_t) __builtin_aarch64_srshlv8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vqshl_n_u64 (uint64x1_t __a, const int __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- return (uint64x1_t) {__builtin_aarch64_uqshl_ndi_uus (__a[0], __b)};
++ return (int16x4_t) __builtin_aarch64_srshlv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqshlq_n_s8 (int8x16_t __a, const int __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- return (int8x16_t) __builtin_aarch64_sqshl_nv16qi (__a, __b);
++ return (int32x2_t) __builtin_aarch64_srshlv2si (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vqshlq_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshl_s64 (int64x1_t __a, int64x1_t __b)
+ {
+- return (int16x8_t) __builtin_aarch64_sqshl_nv8hi (__a, __b);
++ return (int64x1_t) {__builtin_aarch64_srshldi (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vqshlq_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshl_u8 (uint8x8_t __a, int8x8_t __b)
+ {
+- return (int32x4_t) __builtin_aarch64_sqshl_nv4si (__a, __b);
++ return __builtin_aarch64_urshlv8qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vqshlq_n_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshl_u16 (uint16x4_t __a, int16x4_t __b)
+ {
+- return (int64x2_t) __builtin_aarch64_sqshl_nv2di (__a, __b);
++ return __builtin_aarch64_urshlv4hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqshlq_n_u8 (uint8x16_t __a, const int __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshl_u32 (uint32x2_t __a, int32x2_t __b)
+ {
+- return __builtin_aarch64_uqshl_nv16qi_uus (__a, __b);
++ return __builtin_aarch64_urshlv2si_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vqshlq_n_u16 (uint16x8_t __a, const int __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshl_u64 (uint64x1_t __a, int64x1_t __b)
+ {
+- return __builtin_aarch64_uqshl_nv8hi_uus (__a, __b);
++ return (uint64x1_t) {__builtin_aarch64_urshldi_uus (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vqshlq_n_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshlq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- return __builtin_aarch64_uqshl_nv4si_uus (__a, __b);
++ return (int8x16_t) __builtin_aarch64_srshlv16qi (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vqshlq_n_u64 (uint64x2_t __a, const int __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshlq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- return __builtin_aarch64_uqshl_nv2di_uus (__a, __b);
++ return (int16x8_t) __builtin_aarch64_srshlv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqshlb_n_s8 (int8_t __a, const int __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshlq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- return (int8_t) __builtin_aarch64_sqshl_nqi (__a, __b);
++ return (int32x4_t) __builtin_aarch64_srshlv4si (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqshlh_n_s16 (int16_t __a, const int __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshlq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- return (int16_t) __builtin_aarch64_sqshl_nhi (__a, __b);
++ return (int64x2_t) __builtin_aarch64_srshlv2di (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqshls_n_s32 (int32_t __a, const int __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshlq_u8 (uint8x16_t __a, int8x16_t __b)
+ {
+- return (int32_t) __builtin_aarch64_sqshl_nsi (__a, __b);
++ return __builtin_aarch64_urshlv16qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqshld_n_s64 (int64_t __a, const int __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshlq_u16 (uint16x8_t __a, int16x8_t __b)
+ {
+- return __builtin_aarch64_sqshl_ndi (__a, __b);
++ return __builtin_aarch64_urshlv8hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vqshlb_n_u8 (uint8_t __a, const int __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshlq_u32 (uint32x4_t __a, int32x4_t __b)
+ {
+- return __builtin_aarch64_uqshl_nqi_uus (__a, __b);
++ return __builtin_aarch64_urshlv4si_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vqshlh_n_u16 (uint16_t __a, const int __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshlq_u64 (uint64x2_t __a, int64x2_t __b)
+ {
+- return __builtin_aarch64_uqshl_nhi_uus (__a, __b);
++ return __builtin_aarch64_urshlv2di_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vqshls_n_u32 (uint32_t __a, const int __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshld_s64 (int64_t __a, int64_t __b)
+ {
+- return __builtin_aarch64_uqshl_nsi_uus (__a, __b);
++ return __builtin_aarch64_srshldi (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vqshld_n_u64 (uint64_t __a, const int __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshld_u64 (uint64_t __a, int64_t __b)
+ {
+- return __builtin_aarch64_uqshl_ndi_uus (__a, __b);
++ return __builtin_aarch64_urshldi_uus (__a, __b);
+ }
+
+-/* vqshlu */
++/* vrshr */
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqshlu_n_s8 (int8x8_t __a, const int __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshr_n_s8 (int8x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqshlu_nv8qi_uss (__a, __b);
++ return (int8x8_t) __builtin_aarch64_srshr_nv8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqshlu_n_s16 (int16x4_t __a, const int __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshr_n_s16 (int16x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqshlu_nv4hi_uss (__a, __b);
++ return (int16x4_t) __builtin_aarch64_srshr_nv4hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqshlu_n_s32 (int32x2_t __a, const int __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshr_n_s32 (int32x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqshlu_nv2si_uss (__a, __b);
++ return (int32x2_t) __builtin_aarch64_srshr_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vqshlu_n_s64 (int64x1_t __a, const int __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshr_n_s64 (int64x1_t __a, const int __b)
+ {
+- return (uint64x1_t) {__builtin_aarch64_sqshlu_ndi_uss (__a[0], __b)};
++ return (int64x1_t) {__builtin_aarch64_srshr_ndi (__a[0], __b)};
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqshluq_n_s8 (int8x16_t __a, const int __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshr_n_u8 (uint8x8_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqshlu_nv16qi_uss (__a, __b);
++ return __builtin_aarch64_urshr_nv8qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vqshluq_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshr_n_u16 (uint16x4_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqshlu_nv8hi_uss (__a, __b);
++ return __builtin_aarch64_urshr_nv4hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vqshluq_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshr_n_u32 (uint32x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqshlu_nv4si_uss (__a, __b);
++ return __builtin_aarch64_urshr_nv2si_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vqshluq_n_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshr_n_u64 (uint64x1_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqshlu_nv2di_uss (__a, __b);
++ return (uint64x1_t) {__builtin_aarch64_urshr_ndi_uus (__a[0], __b)};
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqshlub_n_s8 (int8_t __a, const int __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrq_n_s8 (int8x16_t __a, const int __b)
+ {
+- return (int8_t) __builtin_aarch64_sqshlu_nqi_uss (__a, __b);
++ return (int8x16_t) __builtin_aarch64_srshr_nv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqshluh_n_s16 (int16_t __a, const int __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrq_n_s16 (int16x8_t __a, const int __b)
+ {
+- return (int16_t) __builtin_aarch64_sqshlu_nhi_uss (__a, __b);
++ return (int16x8_t) __builtin_aarch64_srshr_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqshlus_n_s32 (int32_t __a, const int __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrq_n_s32 (int32x4_t __a, const int __b)
+ {
+- return (int32_t) __builtin_aarch64_sqshlu_nsi_uss (__a, __b);
++ return (int32x4_t) __builtin_aarch64_srshr_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vqshlud_n_s64 (int64_t __a, const int __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrq_n_s64 (int64x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_sqshlu_ndi_uss (__a, __b);
++ return (int64x2_t) __builtin_aarch64_srshr_nv2di (__a, __b);
+ }
+
+-/* vqshrn */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqshrn_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrq_n_u8 (uint8x16_t __a, const int __b)
+ {
+- return (int8x8_t) __builtin_aarch64_sqshrn_nv8hi (__a, __b);
++ return __builtin_aarch64_urshr_nv16qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vqshrn_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrq_n_u16 (uint16x8_t __a, const int __b)
+ {
+- return (int16x4_t) __builtin_aarch64_sqshrn_nv4si (__a, __b);
++ return __builtin_aarch64_urshr_nv8hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vqshrn_n_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrq_n_u32 (uint32x4_t __a, const int __b)
+ {
+- return (int32x2_t) __builtin_aarch64_sqshrn_nv2di (__a, __b);
++ return __builtin_aarch64_urshr_nv4si_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqshrn_n_u16 (uint16x8_t __a, const int __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrq_n_u64 (uint64x2_t __a, const int __b)
+ {
+- return __builtin_aarch64_uqshrn_nv8hi_uus ( __a, __b);
++ return __builtin_aarch64_urshr_nv2di_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqshrn_n_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrd_n_s64 (int64_t __a, const int __b)
+ {
+- return __builtin_aarch64_uqshrn_nv4si_uus ( __a, __b);
++ return __builtin_aarch64_srshr_ndi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqshrn_n_u64 (uint64x2_t __a, const int __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrshrd_n_u64 (uint64_t __a, const int __b)
+ {
+- return __builtin_aarch64_uqshrn_nv2di_uus ( __a, __b);
++ return __builtin_aarch64_urshr_ndi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqshrnh_n_s16 (int16_t __a, const int __b)
++/* vrsqrte. */
++
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrtes_f32 (float32_t __a)
+ {
+- return (int8_t) __builtin_aarch64_sqshrn_nhi (__a, __b);
++ return __builtin_aarch64_rsqrtesf (__a);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqshrns_n_s32 (int32_t __a, const int __b)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrted_f64 (float64_t __a)
+ {
+- return (int16_t) __builtin_aarch64_sqshrn_nsi (__a, __b);
++ return __builtin_aarch64_rsqrtedf (__a);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqshrnd_n_s64 (int64_t __a, const int __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrte_f32 (float32x2_t __a)
+ {
+- return (int32_t) __builtin_aarch64_sqshrn_ndi (__a, __b);
++ return __builtin_aarch64_rsqrtev2sf (__a);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vqshrnh_n_u16 (uint16_t __a, const int __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrte_f64 (float64x1_t __a)
+ {
+- return __builtin_aarch64_uqshrn_nhi_uus (__a, __b);
++ return (float64x1_t) {vrsqrted_f64 (vget_lane_f64 (__a, 0))};
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vqshrns_n_u32 (uint32_t __a, const int __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrteq_f32 (float32x4_t __a)
+ {
+- return __builtin_aarch64_uqshrn_nsi_uus (__a, __b);
++ return __builtin_aarch64_rsqrtev4sf (__a);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vqshrnd_n_u64 (uint64_t __a, const int __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrteq_f64 (float64x2_t __a)
+ {
+- return __builtin_aarch64_uqshrn_ndi_uus (__a, __b);
++ return __builtin_aarch64_rsqrtev2df (__a);
+ }
+
+-/* vqshrun */
++/* vrsqrts. */
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqshrun_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrtss_f32 (float32_t __a, float32_t __b)
+ {
+- return (uint8x8_t) __builtin_aarch64_sqshrun_nv8hi (__a, __b);
++ return __builtin_aarch64_rsqrtssf (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vqshrun_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline float64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrtsd_f64 (float64_t __a, float64_t __b)
+ {
+- return (uint16x4_t) __builtin_aarch64_sqshrun_nv4si (__a, __b);
++ return __builtin_aarch64_rsqrtsdf (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vqshrun_n_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrts_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- return (uint32x2_t) __builtin_aarch64_sqshrun_nv2di (__a, __b);
++ return __builtin_aarch64_rsqrtsv2sf (__a, __b);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqshrunh_n_s16 (int16_t __a, const int __b)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrts_f64 (float64x1_t __a, float64x1_t __b)
+ {
+- return (int8_t) __builtin_aarch64_sqshrun_nhi (__a, __b);
++ return (float64x1_t) {vrsqrtsd_f64 (vget_lane_f64 (__a, 0),
++ vget_lane_f64 (__b, 0))};
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqshruns_n_s32 (int32_t __a, const int __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrtsq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- return (int16_t) __builtin_aarch64_sqshrun_nsi (__a, __b);
++ return __builtin_aarch64_rsqrtsv4sf (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqshrund_n_s64 (int64_t __a, const int __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrtsq_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- return (int32_t) __builtin_aarch64_sqshrun_ndi (__a, __b);
++ return __builtin_aarch64_rsqrtsv2df (__a, __b);
+ }
+
+-/* vqsub */
++/* vrsra */
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vqsubb_s8 (int8_t __a, int8_t __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+ {
+- return (int8_t) __builtin_aarch64_sqsubqi (__a, __b);
++ return (int8x8_t) __builtin_aarch64_srsra_nv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vqsubh_s16 (int16_t __a, int16_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+- return (int16_t) __builtin_aarch64_sqsubhi (__a, __b);
++ return (int16x4_t) __builtin_aarch64_srsra_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vqsubs_s32 (int32_t __a, int32_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+- return (int32_t) __builtin_aarch64_sqsubsi (__a, __b);
++ return (int32x2_t) __builtin_aarch64_srsra_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vqsubd_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+ {
+- return __builtin_aarch64_sqsubdi (__a, __b);
++ return (int64x1_t) {__builtin_aarch64_srsra_ndi (__a[0], __b[0], __c)};
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vqsubb_u8 (uint8_t __a, uint8_t __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+ {
+- return (uint8_t) __builtin_aarch64_uqsubqi_uuu (__a, __b);
++ return __builtin_aarch64_ursra_nv8qi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vqsubh_u16 (uint16_t __a, uint16_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+- return (uint16_t) __builtin_aarch64_uqsubhi_uuu (__a, __b);
++ return __builtin_aarch64_ursra_nv4hi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vqsubs_u32 (uint32_t __a, uint32_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+- return (uint32_t) __builtin_aarch64_uqsubsi_uuu (__a, __b);
++ return __builtin_aarch64_ursra_nv2si_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vqsubd_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+ {
+- return __builtin_aarch64_uqsubdi_uuu (__a, __b);
++ return (uint64x1_t) {__builtin_aarch64_ursra_ndi_uuus (__a[0], __b[0], __c)};
+ }
+
+-/* vqtbl2 */
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
++{
++ return (int8x16_t) __builtin_aarch64_srsra_nv16qi (__a, __b, __c);
++}
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqtbl2_s8 (int8x16x2_t tab, uint8x8_t idx)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[1], 1);
+- return __builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
++ return (int16x8_t) __builtin_aarch64_srsra_nv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqtbl2_u8 (uint8x16x2_t tab, uint8x8_t idx)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- return (uint8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
++ return (int32x4_t) __builtin_aarch64_srsra_nv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vqtbl2_p8 (poly8x16x2_t tab, uint8x8_t idx)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- return (poly8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
++ return (int64x2_t) __builtin_aarch64_srsra_nv2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqtbl2q_s8 (int8x16x2_t tab, uint8x16_t idx)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- return __builtin_aarch64_tbl3v16qi (__o, (int8x16_t)idx);
++ return __builtin_aarch64_ursra_nv16qi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqtbl2q_u8 (uint8x16x2_t tab, uint8x16_t idx)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- return (uint8x16_t)__builtin_aarch64_tbl3v16qi (__o, (int8x16_t)idx);
++ return __builtin_aarch64_ursra_nv8hi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vqtbl2q_p8 (poly8x16x2_t tab, uint8x16_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- return (poly8x16_t)__builtin_aarch64_tbl3v16qi (__o, (int8x16_t)idx);
++ return __builtin_aarch64_ursra_nv4si_uuus (__a, __b, __c);
+ }
+
+-/* vqtbl3 */
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
++{
++ return __builtin_aarch64_ursra_nv2di_uuus (__a, __b, __c);
++}
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqtbl3_s8 (int8x16x3_t tab, uint8x8_t idx)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsrad_n_s64 (int64_t __a, int64_t __b, const int __c)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return __builtin_aarch64_qtbl3v8qi (__o, (int8x8_t)idx);
++ return __builtin_aarch64_srsra_ndi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqtbl3_u8 (uint8x16x3_t tab, uint8x8_t idx)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsrad_n_u64 (uint64_t __a, uint64_t __b, const int __c)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return (uint8x8_t)__builtin_aarch64_qtbl3v8qi (__o, (int8x8_t)idx);
++ return __builtin_aarch64_ursra_ndi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vqtbl3_p8 (poly8x16x3_t tab, uint8x8_t idx)
++#pragma GCC push_options
++#pragma GCC target ("+nothing+crypto")
++
++/* vsha1 */
++
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha1cq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return (poly8x8_t)__builtin_aarch64_qtbl3v8qi (__o, (int8x8_t)idx);
++ return __builtin_aarch64_crypto_sha1cv4si_uuuu (hash_abcd, hash_e, wk);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqtbl3q_s8 (int8x16x3_t tab, uint8x16_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha1mq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return __builtin_aarch64_qtbl3v16qi (__o, (int8x16_t)idx);
++ return __builtin_aarch64_crypto_sha1mv4si_uuuu (hash_abcd, hash_e, wk);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqtbl3q_u8 (uint8x16x3_t tab, uint8x16_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha1pq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return (uint8x16_t)__builtin_aarch64_qtbl3v16qi (__o, (int8x16_t)idx);
++ return __builtin_aarch64_crypto_sha1pv4si_uuuu (hash_abcd, hash_e, wk);
++}
++
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha1h_u32 (uint32_t hash_e)
++{
++ return __builtin_aarch64_crypto_sha1hsi_uu (hash_e);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vqtbl3q_p8 (poly8x16x3_t tab, uint8x16_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha1su0q_u32 (uint32x4_t w0_3, uint32x4_t w4_7, uint32x4_t w8_11)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return (poly8x16_t)__builtin_aarch64_qtbl3v16qi (__o, (int8x16_t)idx);
++ return __builtin_aarch64_crypto_sha1su0v4si_uuuu (w0_3, w4_7, w8_11);
+ }
+
+-/* vqtbl4 */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqtbl4_s8 (int8x16x4_t tab, uint8x8_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha1su1q_u32 (uint32x4_t tw0_3, uint32x4_t w12_15)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return __builtin_aarch64_qtbl4v8qi (__o, (int8x8_t)idx);
++ return __builtin_aarch64_crypto_sha1su1v4si_uuu (tw0_3, w12_15);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqtbl4_u8 (uint8x16x4_t tab, uint8x8_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha256hq_u32 (uint32x4_t hash_abcd, uint32x4_t hash_efgh, uint32x4_t wk)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return (uint8x8_t)__builtin_aarch64_qtbl4v8qi (__o, (int8x8_t)idx);
++ return __builtin_aarch64_crypto_sha256hv4si_uuuu (hash_abcd, hash_efgh, wk);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vqtbl4_p8 (poly8x16x4_t tab, uint8x8_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha256h2q_u32 (uint32x4_t hash_efgh, uint32x4_t hash_abcd, uint32x4_t wk)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return (poly8x8_t)__builtin_aarch64_qtbl4v8qi (__o, (int8x8_t)idx);
++ return __builtin_aarch64_crypto_sha256h2v4si_uuuu (hash_efgh, hash_abcd, wk);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqtbl4q_s8 (int8x16x4_t tab, uint8x16_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha256su0q_u32 (uint32x4_t w0_3, uint32x4_t w4_7)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return __builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)idx);
++ return __builtin_aarch64_crypto_sha256su0v4si_uuu (w0_3, w4_7);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqtbl4q_u8 (uint8x16x4_t tab, uint8x16_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsha256su1q_u32 (uint32x4_t tw0_3, uint32x4_t w8_11, uint32x4_t w12_15)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return (uint8x16_t)__builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)idx);
++ return __builtin_aarch64_crypto_sha256su1v4si_uuuu (tw0_3, w8_11, w12_15);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vqtbl4q_p8 (poly8x16x4_t tab, uint8x16_t idx)
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_p64 (poly64_t a, poly64_t b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return (poly8x16_t)__builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)idx);
++ return
++ __builtin_aarch64_crypto_pmulldi_ppp (a, b);
+ }
+
+-
+-/* vqtbx2 */
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqtbx2_s8 (int8x8_t r, int8x16x2_t tab, uint8x8_t idx)
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmull_high_p64 (poly64x2_t a, poly64x2_t b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[1], 1);
+- return __builtin_aarch64_tbx4v8qi (r, __o, (int8x8_t)idx);
++ return __builtin_aarch64_crypto_pmullv2di_ppp (a, b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqtbx2_u8 (uint8x8_t r, uint8x16x2_t tab, uint8x8_t idx)
++#pragma GCC pop_options
++
++/* vshl */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_n_s8 (int8x8_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- return (uint8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)r, __o,
+- (int8x8_t)idx);
++ return (int8x8_t) __builtin_aarch64_ashlv8qi (__a, __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vqtbx2_p8 (poly8x8_t r, poly8x16x2_t tab, uint8x8_t idx)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_n_s16 (int16x4_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- return (poly8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)r, __o,
+- (int8x8_t)idx);
++ return (int16x4_t) __builtin_aarch64_ashlv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqtbx2q_s8 (int8x16_t r, int8x16x2_t tab, uint8x16_t idx)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_n_s32 (int32x2_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[1], 1);
+- return __builtin_aarch64_tbx4v16qi (r, __o, (int8x16_t)idx);
++ return (int32x2_t) __builtin_aarch64_ashlv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqtbx2q_u8 (uint8x16_t r, uint8x16x2_t tab, uint8x16_t idx)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_n_s64 (int64x1_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- return (uint8x16_t)__builtin_aarch64_tbx4v16qi ((int8x16_t)r, __o,
+- (int8x16_t)idx);
++ return (int64x1_t) {__builtin_aarch64_ashldi (__a[0], __b)};
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vqtbx2q_p8 (poly8x16_t r, poly8x16x2_t tab, uint8x16_t idx)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_n_u8 (uint8x8_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- return (poly8x16_t)__builtin_aarch64_tbx4v16qi ((int8x16_t)r, __o,
+- (int8x16_t)idx);
++ return (uint8x8_t) __builtin_aarch64_ashlv8qi ((int8x8_t) __a, __b);
+ }
+
+-/* vqtbx3 */
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqtbx3_s8 (int8x8_t r, int8x16x3_t tab, uint8x8_t idx)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_n_u16 (uint16x4_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[2], 2);
+- return __builtin_aarch64_qtbx3v8qi (r, __o, (int8x8_t)idx);
++ return (uint16x4_t) __builtin_aarch64_ashlv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqtbx3_u8 (uint8x8_t r, uint8x16x3_t tab, uint8x8_t idx)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_n_u32 (uint32x2_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return (uint8x8_t)__builtin_aarch64_qtbx3v8qi ((int8x8_t)r, __o,
+- (int8x8_t)idx);
++ return (uint32x2_t) __builtin_aarch64_ashlv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vqtbx3_p8 (poly8x8_t r, poly8x16x3_t tab, uint8x8_t idx)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_n_u64 (uint64x1_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return (poly8x8_t)__builtin_aarch64_qtbx3v8qi ((int8x8_t)r, __o,
+- (int8x8_t)idx);
++ return (uint64x1_t) {__builtin_aarch64_ashldi ((int64_t) __a[0], __b)};
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqtbx3q_s8 (int8x16_t r, int8x16x3_t tab, uint8x16_t idx)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_n_s8 (int8x16_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[2], 2);
+- return __builtin_aarch64_qtbx3v16qi (r, __o, (int8x16_t)idx);
++ return (int8x16_t) __builtin_aarch64_ashlv16qi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqtbx3q_u8 (uint8x16_t r, uint8x16x3_t tab, uint8x16_t idx)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_n_s16 (int16x8_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return (uint8x16_t)__builtin_aarch64_qtbx3v16qi ((int8x16_t)r, __o,
+- (int8x16_t)idx);
++ return (int16x8_t) __builtin_aarch64_ashlv8hi (__a, __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vqtbx3q_p8 (poly8x16_t r, poly8x16x3_t tab, uint8x16_t idx)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_n_s32 (int32x4_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+- return (poly8x16_t)__builtin_aarch64_qtbx3v16qi ((int8x16_t)r, __o,
+- (int8x16_t)idx);
++ return (int32x4_t) __builtin_aarch64_ashlv4si (__a, __b);
+ }
+
+-/* vqtbx4 */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vqtbx4_s8 (int8x8_t r, int8x16x4_t tab, uint8x8_t idx)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_n_s64 (int64x2_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[3], 3);
+- return __builtin_aarch64_qtbx4v8qi (r, __o, (int8x8_t)idx);
++ return (int64x2_t) __builtin_aarch64_ashlv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vqtbx4_u8 (uint8x8_t r, uint8x16x4_t tab, uint8x8_t idx)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_n_u8 (uint8x16_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return (uint8x8_t)__builtin_aarch64_qtbx4v8qi ((int8x8_t)r, __o,
+- (int8x8_t)idx);
++ return (uint8x16_t) __builtin_aarch64_ashlv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vqtbx4_p8 (poly8x8_t r, poly8x16x4_t tab, uint8x8_t idx)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_n_u16 (uint16x8_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return (poly8x8_t)__builtin_aarch64_qtbx4v8qi ((int8x8_t)r, __o,
+- (int8x8_t)idx);
++ return (uint16x8_t) __builtin_aarch64_ashlv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vqtbx4q_s8 (int8x16_t r, int8x16x4_t tab, uint8x16_t idx)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_n_u32 (uint32x4_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[3], 3);
+- return __builtin_aarch64_qtbx4v16qi (r, __o, (int8x16_t)idx);
++ return (uint32x4_t) __builtin_aarch64_ashlv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vqtbx4q_u8 (uint8x16_t r, uint8x16x4_t tab, uint8x16_t idx)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_n_u64 (uint64x2_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return (uint8x16_t)__builtin_aarch64_qtbx4v16qi ((int8x16_t)r, __o,
+- (int8x16_t)idx);
++ return (uint64x2_t) __builtin_aarch64_ashlv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vqtbx4q_p8 (poly8x16_t r, poly8x16x4_t tab, uint8x16_t idx)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshld_n_s64 (int64_t __a, const int __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+- return (poly8x16_t)__builtin_aarch64_qtbx4v16qi ((int8x16_t)r, __o,
+- (int8x16_t)idx);
++ return __builtin_aarch64_ashldi (__a, __b);
+ }
+
+-/* vrbit */
+-
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vrbit_p8 (poly8x8_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshld_n_u64 (uint64_t __a, const int __b)
+ {
+- return (poly8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
++ return (uint64_t) __builtin_aarch64_ashldi (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vrbit_s8 (int8x8_t __a)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- return __builtin_aarch64_rbitv8qi (__a);
++ return __builtin_aarch64_sshlv8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vrbit_u8 (uint8x8_t __a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- return (uint8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
++ return __builtin_aarch64_sshlv4hi (__a, __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vrbitq_p8 (poly8x16_t __a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- return (poly8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t)__a);
++ return __builtin_aarch64_sshlv2si (__a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vrbitq_s8 (int8x16_t __a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_s64 (int64x1_t __a, int64x1_t __b)
+ {
+- return __builtin_aarch64_rbitv16qi (__a);
++ return (int64x1_t) {__builtin_aarch64_sshldi (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vrbitq_u8 (uint8x16_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_u8 (uint8x8_t __a, int8x8_t __b)
+ {
+- return (uint8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t) __a);
++ return __builtin_aarch64_ushlv8qi_uus (__a, __b);
+ }
+
+-/* vrecpe */
+-
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vrecpe_u32 (uint32x2_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_u16 (uint16x4_t __a, int16x4_t __b)
+ {
+- return (uint32x2_t) __builtin_aarch64_urecpev2si ((int32x2_t) __a);
++ return __builtin_aarch64_ushlv4hi_uus (__a, __b);
+ }
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vrecpeq_u32 (uint32x4_t __a)
++
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_u32 (uint32x2_t __a, int32x2_t __b)
+ {
+- return (uint32x4_t) __builtin_aarch64_urecpev4si ((int32x4_t) __a);
++ return __builtin_aarch64_ushlv2si_uus (__a, __b);
+ }
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vrecpes_f32 (float32_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshl_u64 (uint64x1_t __a, int64x1_t __b)
+ {
+- return __builtin_aarch64_frecpesf (__a);
++ return (uint64x1_t) {__builtin_aarch64_ushldi_uus (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vrecped_f64 (float64_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- return __builtin_aarch64_frecpedf (__a);
++ return __builtin_aarch64_sshlv16qi (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrecpe_f32 (float32x2_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- return __builtin_aarch64_frecpev2sf (__a);
++ return __builtin_aarch64_sshlv8hi (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrecpeq_f32 (float32x4_t __a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- return __builtin_aarch64_frecpev4sf (__a);
++ return __builtin_aarch64_sshlv4si (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrecpeq_f64 (float64x2_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- return __builtin_aarch64_frecpev2df (__a);
++ return __builtin_aarch64_sshlv2di (__a, __b);
+ }
+
+-/* vrecps */
+-
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vrecpss_f32 (float32_t __a, float32_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_u8 (uint8x16_t __a, int8x16_t __b)
+ {
+- return __builtin_aarch64_frecpssf (__a, __b);
++ return __builtin_aarch64_ushlv16qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vrecpsd_f64 (float64_t __a, float64_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_u16 (uint16x8_t __a, int16x8_t __b)
+ {
+- return __builtin_aarch64_frecpsdf (__a, __b);
++ return __builtin_aarch64_ushlv8hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrecps_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_u32 (uint32x4_t __a, int32x4_t __b)
+ {
+- return __builtin_aarch64_frecpsv2sf (__a, __b);
++ return __builtin_aarch64_ushlv4si_uus (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrecpsq_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshlq_u64 (uint64x2_t __a, int64x2_t __b)
+ {
+- return __builtin_aarch64_frecpsv4sf (__a, __b);
++ return __builtin_aarch64_ushlv2di_uus (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrecpsq_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshld_s64 (int64_t __a, int64_t __b)
+ {
+- return __builtin_aarch64_frecpsv2df (__a, __b);
++ return __builtin_aarch64_sshldi (__a, __b);
+ }
+
+-/* vrecpx */
+-
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
+-vrecpxs_f32 (float32_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshld_u64 (uint64_t __a, uint64_t __b)
+ {
+- return __builtin_aarch64_frecpxsf (__a);
++ return __builtin_aarch64_ushldi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float64_t __attribute__ ((__always_inline__))
+-vrecpxd_f64 (float64_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_high_n_s8 (int8x16_t __a, const int __b)
+ {
+- return __builtin_aarch64_frecpxdf (__a);
++ return __builtin_aarch64_sshll2_nv16qi (__a, __b);
+ }
+
+-
+-/* vrev */
+-
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vrev16_p8 (poly8x8_t a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_high_n_s16 (int16x8_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
++ return __builtin_aarch64_sshll2_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vrev16_s8 (int8x8_t a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_high_n_s32 (int32x4_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
++ return __builtin_aarch64_sshll2_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vrev16_u8 (uint8x8_t a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_high_n_u8 (uint8x16_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
++ return (uint16x8_t) __builtin_aarch64_ushll2_nv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vrev16q_p8 (poly8x16_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_high_n_u16 (uint16x8_t __a, const int __b)
+ {
+- return __builtin_shuffle (a,
+- (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
++ return (uint32x4_t) __builtin_aarch64_ushll2_nv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vrev16q_s8 (int8x16_t a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_high_n_u32 (uint32x4_t __a, const int __b)
+ {
+- return __builtin_shuffle (a,
+- (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
++ return (uint64x2_t) __builtin_aarch64_ushll2_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vrev16q_u8 (uint8x16_t a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_n_s8 (int8x8_t __a, const int __b)
+ {
+- return __builtin_shuffle (a,
+- (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
++ return __builtin_aarch64_sshll_nv8qi (__a, __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vrev32_p8 (poly8x8_t a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_n_s16 (int16x4_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
++ return __builtin_aarch64_sshll_nv4hi (__a, __b);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vrev32_p16 (poly16x4_t a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_n_s32 (int32x2_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
++ return __builtin_aarch64_sshll_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vrev32_s8 (int8x8_t a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_n_u8 (uint8x8_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
++ return __builtin_aarch64_ushll_nv8qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vrev32_s16 (int16x4_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_n_u16 (uint16x4_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
++ return __builtin_aarch64_ushll_nv4hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vrev32_u8 (uint8x8_t a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshll_n_u32 (uint32x2_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
++ return __builtin_aarch64_ushll_nv2si_uus (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vrev32_u16 (uint16x4_t a)
++/* vshr */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshr_n_s8 (int8x8_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
++ return (int8x8_t) __builtin_aarch64_ashrv8qi (__a, __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vrev32q_p8 (poly8x16_t a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshr_n_s16 (int16x4_t __a, const int __b)
+ {
+- return __builtin_shuffle (a,
+- (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
++ return (int16x4_t) __builtin_aarch64_ashrv4hi (__a, __b);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vrev32q_p16 (poly16x8_t a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshr_n_s32 (int32x2_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
++ return (int32x2_t) __builtin_aarch64_ashrv2si (__a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vrev32q_s8 (int8x16_t a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshr_n_s64 (int64x1_t __a, const int __b)
+ {
+- return __builtin_shuffle (a,
+- (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
++ return (int64x1_t) {__builtin_aarch64_ashr_simddi (__a[0], __b)};
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vrev32q_s16 (int16x8_t a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshr_n_u8 (uint8x8_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
++ return (uint8x8_t) __builtin_aarch64_lshrv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vrev32q_u8 (uint8x16_t a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshr_n_u16 (uint16x4_t __a, const int __b)
+ {
+- return __builtin_shuffle (a,
+- (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
++ return (uint16x4_t) __builtin_aarch64_lshrv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vrev32q_u16 (uint16x8_t a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshr_n_u32 (uint32x2_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
++ return (uint32x2_t) __builtin_aarch64_lshrv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrev64_f32 (float32x2_t a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshr_n_u64 (uint64x1_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
++ return (uint64x1_t) {__builtin_aarch64_lshr_simddi_uus ( __a[0], __b)};
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vrev64_p8 (poly8x8_t a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrq_n_s8 (int8x16_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
++ return (int8x16_t) __builtin_aarch64_ashrv16qi (__a, __b);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vrev64_p16 (poly16x4_t a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrq_n_s16 (int16x8_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
++ return (int16x8_t) __builtin_aarch64_ashrv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vrev64_s8 (int8x8_t a)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrq_n_s32 (int32x4_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
++ return (int32x4_t) __builtin_aarch64_ashrv4si (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vrev64_s16 (int16x4_t a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrq_n_s64 (int64x2_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
++ return (int64x2_t) __builtin_aarch64_ashrv2di (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vrev64_s32 (int32x2_t a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrq_n_u8 (uint8x16_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
++ return (uint8x16_t) __builtin_aarch64_lshrv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vrev64_u8 (uint8x8_t a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrq_n_u16 (uint16x8_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
++ return (uint16x8_t) __builtin_aarch64_lshrv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vrev64_u16 (uint16x4_t a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrq_n_u32 (uint32x4_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
++ return (uint32x4_t) __builtin_aarch64_lshrv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vrev64_u32 (uint32x2_t a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrq_n_u64 (uint64x2_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
++ return (uint64x2_t) __builtin_aarch64_lshrv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrev64q_f32 (float32x4_t a)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrd_n_s64 (int64_t __a, const int __b)
+ {
+- return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
++ return __builtin_aarch64_ashr_simddi (__a, __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vrev64q_p8 (poly8x16_t a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrd_n_u64 (uint64_t __a, const int __b)
+ {
+- return __builtin_shuffle (a,
+- (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
++ return __builtin_aarch64_lshr_simddi_uus (__a, __b);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vrev64q_p16 (poly16x8_t a)
++/* vsli */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsli_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+ {
+- return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
++ return (int8x8_t) __builtin_aarch64_ssli_nv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vrev64q_s8 (int8x16_t a)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsli_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+- return __builtin_shuffle (a,
+- (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
++ return (int16x4_t) __builtin_aarch64_ssli_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vrev64q_s16 (int16x8_t a)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsli_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+- return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
++ return (int32x2_t) __builtin_aarch64_ssli_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vrev64q_s32 (int32x4_t a)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsli_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+ {
+- return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
++ return (int64x1_t) {__builtin_aarch64_ssli_ndi (__a[0], __b[0], __c)};
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vrev64q_u8 (uint8x16_t a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsli_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+ {
+- return __builtin_shuffle (a,
+- (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
++ return __builtin_aarch64_usli_nv8qi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vrev64q_u16 (uint16x8_t a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsli_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+- return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
++ return __builtin_aarch64_usli_nv4hi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vrev64q_u32 (uint32x4_t a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsli_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+- return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
++ return __builtin_aarch64_usli_nv2si_uuus (__a, __b, __c);
+ }
+
+-/* vrnd */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrnd_f32 (float32x2_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsli_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+ {
+- return __builtin_aarch64_btruncv2sf (__a);
++ return (uint64x1_t) {__builtin_aarch64_usli_ndi_uuus (__a[0], __b[0], __c)};
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vrnd_f64 (float64x1_t __a)
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsli_n_p64 (poly64x1_t __a, poly64x1_t __b, const int __c)
+ {
+- return vset_lane_f64 (__builtin_trunc (vget_lane_f64 (__a, 0)), __a, 0);
++ return (poly64x1_t) {__builtin_aarch64_ssli_ndi_ppps (__a[0], __b[0], __c)};
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrndq_f32 (float32x4_t __a)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsliq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+ {
+- return __builtin_aarch64_btruncv4sf (__a);
++ return (int8x16_t) __builtin_aarch64_ssli_nv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrndq_f64 (float64x2_t __a)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsliq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+ {
+- return __builtin_aarch64_btruncv2df (__a);
++ return (int16x8_t) __builtin_aarch64_ssli_nv8hi (__a, __b, __c);
+ }
+
+-/* vrnda */
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsliq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
++{
++ return (int32x4_t) __builtin_aarch64_ssli_nv4si (__a, __b, __c);
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrnda_f32 (float32x2_t __a)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsliq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+ {
+- return __builtin_aarch64_roundv2sf (__a);
++ return (int64x2_t) __builtin_aarch64_ssli_nv2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vrnda_f64 (float64x1_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsliq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+ {
+- return vset_lane_f64 (__builtin_round (vget_lane_f64 (__a, 0)), __a, 0);
++ return __builtin_aarch64_usli_nv16qi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrndaq_f32 (float32x4_t __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsliq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+ {
+- return __builtin_aarch64_roundv4sf (__a);
++ return __builtin_aarch64_usli_nv8hi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrndaq_f64 (float64x2_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsliq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+ {
+- return __builtin_aarch64_roundv2df (__a);
++ return __builtin_aarch64_usli_nv4si_uuus (__a, __b, __c);
+ }
+
+-/* vrndi */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrndi_f32 (float32x2_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsliq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+ {
+- return __builtin_aarch64_nearbyintv2sf (__a);
++ return __builtin_aarch64_usli_nv2di_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vrndi_f64 (float64x1_t __a)
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsliq_n_p64 (poly64x2_t __a, poly64x2_t __b, const int __c)
+ {
+- return vset_lane_f64 (__builtin_nearbyint (vget_lane_f64 (__a, 0)), __a, 0);
++ return __builtin_aarch64_ssli_nv2di_ppps (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrndiq_f32 (float32x4_t __a)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vslid_n_s64 (int64_t __a, int64_t __b, const int __c)
+ {
+- return __builtin_aarch64_nearbyintv4sf (__a);
++ return __builtin_aarch64_ssli_ndi (__a, __b, __c);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrndiq_f64 (float64x2_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vslid_n_u64 (uint64_t __a, uint64_t __b, const int __c)
+ {
+- return __builtin_aarch64_nearbyintv2df (__a);
++ return __builtin_aarch64_usli_ndi_uuus (__a, __b, __c);
+ }
+
+-/* vrndm */
++/* vsqadd */
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrndm_f32 (float32x2_t __a)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqadd_u8 (uint8x8_t __a, int8x8_t __b)
+ {
+- return __builtin_aarch64_floorv2sf (__a);
++ return __builtin_aarch64_usqaddv8qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vrndm_f64 (float64x1_t __a)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqadd_u16 (uint16x4_t __a, int16x4_t __b)
+ {
+- return vset_lane_f64 (__builtin_floor (vget_lane_f64 (__a, 0)), __a, 0);
++ return __builtin_aarch64_usqaddv4hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrndmq_f32 (float32x4_t __a)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqadd_u32 (uint32x2_t __a, int32x2_t __b)
+ {
+- return __builtin_aarch64_floorv4sf (__a);
++ return __builtin_aarch64_usqaddv2si_uus (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrndmq_f64 (float64x2_t __a)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqadd_u64 (uint64x1_t __a, int64x1_t __b)
+ {
+- return __builtin_aarch64_floorv2df (__a);
++ return (uint64x1_t) {__builtin_aarch64_usqadddi_uus (__a[0], __b[0])};
+ }
+
+-/* vrndn */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrndn_f32 (float32x2_t __a)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqaddq_u8 (uint8x16_t __a, int8x16_t __b)
+ {
+- return __builtin_aarch64_frintnv2sf (__a);
++ return __builtin_aarch64_usqaddv16qi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vrndn_f64 (float64x1_t __a)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqaddq_u16 (uint16x8_t __a, int16x8_t __b)
+ {
+- return (float64x1_t) {__builtin_aarch64_frintndf (__a[0])};
++ return __builtin_aarch64_usqaddv8hi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrndnq_f32 (float32x4_t __a)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqaddq_u32 (uint32x4_t __a, int32x4_t __b)
+ {
+- return __builtin_aarch64_frintnv4sf (__a);
++ return __builtin_aarch64_usqaddv4si_uus (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrndnq_f64 (float64x2_t __a)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqaddq_u64 (uint64x2_t __a, int64x2_t __b)
+ {
+- return __builtin_aarch64_frintnv2df (__a);
++ return __builtin_aarch64_usqaddv2di_uus (__a, __b);
+ }
+
+-/* vrndp */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrndp_f32 (float32x2_t __a)
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqaddb_u8 (uint8_t __a, int8_t __b)
+ {
+- return __builtin_aarch64_ceilv2sf (__a);
++ return __builtin_aarch64_usqaddqi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vrndp_f64 (float64x1_t __a)
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqaddh_u16 (uint16_t __a, int16_t __b)
+ {
+- return vset_lane_f64 (__builtin_ceil (vget_lane_f64 (__a, 0)), __a, 0);
++ return __builtin_aarch64_usqaddhi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrndpq_f32 (float32x4_t __a)
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqadds_u32 (uint32_t __a, int32_t __b)
+ {
+- return __builtin_aarch64_ceilv4sf (__a);
++ return __builtin_aarch64_usqaddsi_uus (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrndpq_f64 (float64x2_t __a)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqaddd_u64 (uint64_t __a, int64_t __b)
+ {
+- return __builtin_aarch64_ceilv2df (__a);
++ return __builtin_aarch64_usqadddi_uus (__a, __b);
+ }
+
+-/* vrndx */
+-
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vrndx_f32 (float32x2_t __a)
++/* vsqrt */
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqrt_f32 (float32x2_t a)
+ {
+- return __builtin_aarch64_rintv2sf (__a);
++ return __builtin_aarch64_sqrtv2sf (a);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vrndx_f64 (float64x1_t __a)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqrtq_f32 (float32x4_t a)
+ {
+- return vset_lane_f64 (__builtin_rint (vget_lane_f64 (__a, 0)), __a, 0);
++ return __builtin_aarch64_sqrtv4sf (a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vrndxq_f32 (float32x4_t __a)
++__extension__ extern __inline float64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqrt_f64 (float64x1_t a)
+ {
+- return __builtin_aarch64_rintv4sf (__a);
++ return (float64x1_t) { __builtin_aarch64_sqrtdf (a[0]) };
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vrndxq_f64 (float64x2_t __a)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqrtq_f64 (float64x2_t a)
+ {
+- return __builtin_aarch64_rintv2df (__a);
++ return __builtin_aarch64_sqrtv2df (a);
+ }
+
+-/* vrshl */
++/* vsra */
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vrshl_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+ {
+- return (int8x8_t) __builtin_aarch64_srshlv8qi (__a, __b);
++ return (int8x8_t) __builtin_aarch64_ssra_nv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vrshl_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+- return (int16x4_t) __builtin_aarch64_srshlv4hi (__a, __b);
++ return (int16x4_t) __builtin_aarch64_ssra_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vrshl_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+- return (int32x2_t) __builtin_aarch64_srshlv2si (__a, __b);
++ return (int32x2_t) __builtin_aarch64_ssra_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vrshl_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+ {
+- return (int64x1_t) {__builtin_aarch64_srshldi (__a[0], __b[0])};
++ return (int64x1_t) {__builtin_aarch64_ssra_ndi (__a[0], __b[0], __c)};
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vrshl_u8 (uint8x8_t __a, int8x8_t __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshlv8qi_uus (__a, __b);
++ return __builtin_aarch64_usra_nv8qi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vrshl_u16 (uint16x4_t __a, int16x4_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshlv4hi_uus (__a, __b);
++ return __builtin_aarch64_usra_nv4hi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vrshl_u32 (uint32x2_t __a, int32x2_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshlv2si_uus (__a, __b);
++ return __builtin_aarch64_usra_nv2si_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vrshl_u64 (uint64x1_t __a, int64x1_t __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+ {
+- return (uint64x1_t) {__builtin_aarch64_urshldi_uus (__a[0], __b[0])};
++ return (uint64x1_t) {__builtin_aarch64_usra_ndi_uuus (__a[0], __b[0], __c)};
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vrshlq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+ {
+- return (int8x16_t) __builtin_aarch64_srshlv16qi (__a, __b);
++ return (int8x16_t) __builtin_aarch64_ssra_nv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vrshlq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+ {
+- return (int16x8_t) __builtin_aarch64_srshlv8hi (__a, __b);
++ return (int16x8_t) __builtin_aarch64_ssra_nv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vrshlq_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+ {
+- return (int32x4_t) __builtin_aarch64_srshlv4si (__a, __b);
++ return (int32x4_t) __builtin_aarch64_ssra_nv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vrshlq_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+ {
+- return (int64x2_t) __builtin_aarch64_srshlv2di (__a, __b);
++ return (int64x2_t) __builtin_aarch64_ssra_nv2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vrshlq_u8 (uint8x16_t __a, int8x16_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshlv16qi_uus (__a, __b);
++ return __builtin_aarch64_usra_nv16qi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vrshlq_u16 (uint16x8_t __a, int16x8_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshlv8hi_uus (__a, __b);
++ return __builtin_aarch64_usra_nv8hi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vrshlq_u32 (uint32x4_t __a, int32x4_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshlv4si_uus (__a, __b);
++ return __builtin_aarch64_usra_nv4si_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vrshlq_u64 (uint64x2_t __a, int64x2_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshlv2di_uus (__a, __b);
++ return __builtin_aarch64_usra_nv2di_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vrshld_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsrad_n_s64 (int64_t __a, int64_t __b, const int __c)
+ {
+- return __builtin_aarch64_srshldi (__a, __b);
++ return __builtin_aarch64_ssra_ndi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vrshld_u64 (uint64_t __a, int64_t __b)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsrad_n_u64 (uint64_t __a, uint64_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshldi_uus (__a, __b);
++ return __builtin_aarch64_usra_ndi_uuus (__a, __b, __c);
+ }
+
+-/* vrshr */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vrshr_n_s8 (int8x8_t __a, const int __b)
+-{
+- return (int8x8_t) __builtin_aarch64_srshr_nv8qi (__a, __b);
+-}
++/* vsri */
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vrshr_n_s16 (int16x4_t __a, const int __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsri_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+ {
+- return (int16x4_t) __builtin_aarch64_srshr_nv4hi (__a, __b);
++ return (int8x8_t) __builtin_aarch64_ssri_nv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vrshr_n_s32 (int32x2_t __a, const int __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsri_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+- return (int32x2_t) __builtin_aarch64_srshr_nv2si (__a, __b);
++ return (int16x4_t) __builtin_aarch64_ssri_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vrshr_n_s64 (int64x1_t __a, const int __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsri_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+- return (int64x1_t) {__builtin_aarch64_srshr_ndi (__a[0], __b)};
++ return (int32x2_t) __builtin_aarch64_ssri_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vrshr_n_u8 (uint8x8_t __a, const int __b)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsri_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshr_nv8qi_uus (__a, __b);
++ return (int64x1_t) {__builtin_aarch64_ssri_ndi (__a[0], __b[0], __c)};
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vrshr_n_u16 (uint16x4_t __a, const int __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsri_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshr_nv4hi_uus (__a, __b);
++ return __builtin_aarch64_usri_nv8qi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vrshr_n_u32 (uint32x2_t __a, const int __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsri_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshr_nv2si_uus (__a, __b);
++ return __builtin_aarch64_usri_nv4hi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vrshr_n_u64 (uint64x1_t __a, const int __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsri_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+- return (uint64x1_t) {__builtin_aarch64_urshr_ndi_uus (__a[0], __b)};
++ return __builtin_aarch64_usri_nv2si_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vrshrq_n_s8 (int8x16_t __a, const int __b)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsri_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+ {
+- return (int8x16_t) __builtin_aarch64_srshr_nv16qi (__a, __b);
++ return (uint64x1_t) {__builtin_aarch64_usri_ndi_uuus (__a[0], __b[0], __c)};
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vrshrq_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsriq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+ {
+- return (int16x8_t) __builtin_aarch64_srshr_nv8hi (__a, __b);
++ return (int8x16_t) __builtin_aarch64_ssri_nv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vrshrq_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsriq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+ {
+- return (int32x4_t) __builtin_aarch64_srshr_nv4si (__a, __b);
++ return (int16x8_t) __builtin_aarch64_ssri_nv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vrshrq_n_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsriq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+ {
+- return (int64x2_t) __builtin_aarch64_srshr_nv2di (__a, __b);
++ return (int32x4_t) __builtin_aarch64_ssri_nv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vrshrq_n_u8 (uint8x16_t __a, const int __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsriq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshr_nv16qi_uus (__a, __b);
++ return (int64x2_t) __builtin_aarch64_ssri_nv2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vrshrq_n_u16 (uint16x8_t __a, const int __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsriq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshr_nv8hi_uus (__a, __b);
++ return __builtin_aarch64_usri_nv16qi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vrshrq_n_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsriq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshr_nv4si_uus (__a, __b);
++ return __builtin_aarch64_usri_nv8hi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vrshrq_n_u64 (uint64x2_t __a, const int __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsriq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshr_nv2di_uus (__a, __b);
++ return __builtin_aarch64_usri_nv4si_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vrshrd_n_s64 (int64_t __a, const int __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsriq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+ {
+- return __builtin_aarch64_srshr_ndi (__a, __b);
++ return __builtin_aarch64_usri_nv2di_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vrshrd_n_u64 (uint64_t __a, const int __b)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsrid_n_s64 (int64_t __a, int64_t __b, const int __c)
+ {
+- return __builtin_aarch64_urshr_ndi_uus (__a, __b);
++ return __builtin_aarch64_ssri_ndi (__a, __b, __c);
+ }
+
+-/* vrsra */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vrsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsrid_n_u64 (uint64_t __a, uint64_t __b, const int __c)
+ {
+- return (int8x8_t) __builtin_aarch64_srsra_nv8qi (__a, __b, __c);
++ return __builtin_aarch64_usri_ndi_uuus (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vrsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+-{
+- return (int16x4_t) __builtin_aarch64_srsra_nv4hi (__a, __b, __c);
+-}
++/* vst1 */
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vrsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_f16 (float16_t *__a, float16x4_t __b)
+ {
+- return (int32x2_t) __builtin_aarch64_srsra_nv2si (__a, __b, __c);
++ __builtin_aarch64_st1v4hf (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vrsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_f32 (float32_t *a, float32x2_t b)
+ {
+- return (int64x1_t) {__builtin_aarch64_srsra_ndi (__a[0], __b[0], __c)};
++ __builtin_aarch64_st1v2sf ((__builtin_aarch64_simd_sf *) a, b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vrsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_f64 (float64_t *a, float64x1_t b)
+ {
+- return __builtin_aarch64_ursra_nv8qi_uuus (__a, __b, __c);
++ *a = b[0];
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vrsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_p8 (poly8_t *a, poly8x8_t b)
+ {
+- return __builtin_aarch64_ursra_nv4hi_uuus (__a, __b, __c);
++ __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a,
++ (int8x8_t) b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vrsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_p16 (poly16_t *a, poly16x4_t b)
+ {
+- return __builtin_aarch64_ursra_nv2si_uuus (__a, __b, __c);
++ __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a,
++ (int16x4_t) b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vrsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_p64 (poly64_t *a, poly64x1_t b)
+ {
+- return (uint64x1_t) {__builtin_aarch64_ursra_ndi_uuus (__a[0], __b[0], __c)};
++ *a = b[0];
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vrsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_s8 (int8_t *a, int8x8_t b)
+ {
+- return (int8x16_t) __builtin_aarch64_srsra_nv16qi (__a, __b, __c);
++ __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a, b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vrsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_s16 (int16_t *a, int16x4_t b)
+ {
+- return (int16x8_t) __builtin_aarch64_srsra_nv8hi (__a, __b, __c);
++ __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a, b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vrsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_s32 (int32_t *a, int32x2_t b)
+ {
+- return (int32x4_t) __builtin_aarch64_srsra_nv4si (__a, __b, __c);
++ __builtin_aarch64_st1v2si ((__builtin_aarch64_simd_si *) a, b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vrsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_s64 (int64_t *a, int64x1_t b)
+ {
+- return (int64x2_t) __builtin_aarch64_srsra_nv2di (__a, __b, __c);
++ *a = b[0];
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vrsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_u8 (uint8_t *a, uint8x8_t b)
+ {
+- return __builtin_aarch64_ursra_nv16qi_uuus (__a, __b, __c);
++ __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a,
++ (int8x8_t) b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vrsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_u16 (uint16_t *a, uint16x4_t b)
+ {
+- return __builtin_aarch64_ursra_nv8hi_uuus (__a, __b, __c);
++ __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a,
++ (int16x4_t) b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vrsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_u32 (uint32_t *a, uint32x2_t b)
+ {
+- return __builtin_aarch64_ursra_nv4si_uuus (__a, __b, __c);
++ __builtin_aarch64_st1v2si ((__builtin_aarch64_simd_si *) a,
++ (int32x2_t) b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vrsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_u64 (uint64_t *a, uint64x1_t b)
+ {
+- return __builtin_aarch64_ursra_nv2di_uuus (__a, __b, __c);
++ *a = b[0];
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vrsrad_n_s64 (int64_t __a, int64_t __b, const int __c)
++/* vst1q */
++
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_f16 (float16_t *__a, float16x8_t __b)
+ {
+- return __builtin_aarch64_srsra_ndi (__a, __b, __c);
++ __builtin_aarch64_st1v8hf (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vrsrad_n_u64 (uint64_t __a, uint64_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_f32 (float32_t *a, float32x4_t b)
+ {
+- return __builtin_aarch64_ursra_ndi_uuus (__a, __b, __c);
++ __builtin_aarch64_st1v4sf ((__builtin_aarch64_simd_sf *) a, b);
+ }
+
+-#pragma GCC push_options
+-#pragma GCC target ("+nothing+crypto")
+-
+-/* vsha1 */
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1cq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_f64 (float64_t *a, float64x2_t b)
+ {
+- return __builtin_aarch64_crypto_sha1cv4si_uuuu (hash_abcd, hash_e, wk);
++ __builtin_aarch64_st1v2df ((__builtin_aarch64_simd_df *) a, b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1mq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_p8 (poly8_t *a, poly8x16_t b)
+ {
+- return __builtin_aarch64_crypto_sha1mv4si_uuuu (hash_abcd, hash_e, wk);
++ __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a,
++ (int8x16_t) b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1pq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_p16 (poly16_t *a, poly16x8_t b)
+ {
+- return __builtin_aarch64_crypto_sha1pv4si_uuuu (hash_abcd, hash_e, wk);
++ __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a,
++ (int16x8_t) b);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vsha1h_u32 (uint32_t hash_e)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_p64 (poly64_t *a, poly64x2_t b)
+ {
+- return __builtin_aarch64_crypto_sha1hsi_uu (hash_e);
++ __builtin_aarch64_st1v2di_sp ((__builtin_aarch64_simd_di *) a,
++ (poly64x2_t) b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1su0q_u32 (uint32x4_t w0_3, uint32x4_t w4_7, uint32x4_t w8_11)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_s8 (int8_t *a, int8x16_t b)
+ {
+- return __builtin_aarch64_crypto_sha1su0v4si_uuuu (w0_3, w4_7, w8_11);
++ __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a, b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1su1q_u32 (uint32x4_t tw0_3, uint32x4_t w12_15)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_s16 (int16_t *a, int16x8_t b)
+ {
+- return __builtin_aarch64_crypto_sha1su1v4si_uuu (tw0_3, w12_15);
++ __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a, b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha256hq_u32 (uint32x4_t hash_abcd, uint32x4_t hash_efgh, uint32x4_t wk)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_s32 (int32_t *a, int32x4_t b)
+ {
+- return __builtin_aarch64_crypto_sha256hv4si_uuuu (hash_abcd, hash_efgh, wk);
++ __builtin_aarch64_st1v4si ((__builtin_aarch64_simd_si *) a, b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha256h2q_u32 (uint32x4_t hash_efgh, uint32x4_t hash_abcd, uint32x4_t wk)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_s64 (int64_t *a, int64x2_t b)
+ {
+- return __builtin_aarch64_crypto_sha256h2v4si_uuuu (hash_efgh, hash_abcd, wk);
++ __builtin_aarch64_st1v2di ((__builtin_aarch64_simd_di *) a, b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha256su0q_u32 (uint32x4_t w0_3, uint32x4_t w4_7)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_u8 (uint8_t *a, uint8x16_t b)
+ {
+- return __builtin_aarch64_crypto_sha256su0v4si_uuu (w0_3, w4_7);
++ __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a,
++ (int8x16_t) b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha256su1q_u32 (uint32x4_t tw0_3, uint32x4_t w8_11, uint32x4_t w12_15)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_u16 (uint16_t *a, uint16x8_t b)
+ {
+- return __builtin_aarch64_crypto_sha256su1v4si_uuuu (tw0_3, w8_11, w12_15);
++ __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a,
++ (int16x8_t) b);
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
+-vmull_p64 (poly64_t a, poly64_t b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_u32 (uint32_t *a, uint32x4_t b)
+ {
+- return
+- __builtin_aarch64_crypto_pmulldi_ppp (a, b);
++ __builtin_aarch64_st1v4si ((__builtin_aarch64_simd_si *) a,
++ (int32x4_t) b);
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
+-vmull_high_p64 (poly64x2_t a, poly64x2_t b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_u64 (uint64_t *a, uint64x2_t b)
+ {
+- return __builtin_aarch64_crypto_pmullv2di_ppp (a, b);
++ __builtin_aarch64_st1v2di ((__builtin_aarch64_simd_di *) a,
++ (int64x2_t) b);
+ }
+
+-#pragma GCC pop_options
++/* vst1_lane */
+
+-/* vshl */
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_f16 (float16_t *__a, float16x4_t __b, const int __lane)
++{
++ *__a = __aarch64_vget_lane_any (__b, __lane);
++}
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vshl_n_s8 (int8x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_f32 (float32_t *__a, float32x2_t __b, const int __lane)
+ {
+- return (int8x8_t) __builtin_aarch64_ashlv8qi (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vshl_n_s16 (int16x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_f64 (float64_t *__a, float64x1_t __b, const int __lane)
+ {
+- return (int16x4_t) __builtin_aarch64_ashlv4hi (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vshl_n_s32 (int32x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_p8 (poly8_t *__a, poly8x8_t __b, const int __lane)
+ {
+- return (int32x2_t) __builtin_aarch64_ashlv2si (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vshl_n_s64 (int64x1_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_p16 (poly16_t *__a, poly16x4_t __b, const int __lane)
+ {
+- return (int64x1_t) {__builtin_aarch64_ashldi (__a[0], __b)};
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vshl_n_u8 (uint8x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_p64 (poly64_t *__a, poly64x1_t __b, const int __lane)
+ {
+- return (uint8x8_t) __builtin_aarch64_ashlv8qi ((int8x8_t) __a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vshl_n_u16 (uint16x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_s8 (int8_t *__a, int8x8_t __b, const int __lane)
+ {
+- return (uint16x4_t) __builtin_aarch64_ashlv4hi ((int16x4_t) __a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vshl_n_u32 (uint32x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_s16 (int16_t *__a, int16x4_t __b, const int __lane)
+ {
+- return (uint32x2_t) __builtin_aarch64_ashlv2si ((int32x2_t) __a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vshl_n_u64 (uint64x1_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_s32 (int32_t *__a, int32x2_t __b, const int __lane)
+ {
+- return (uint64x1_t) {__builtin_aarch64_ashldi ((int64_t) __a[0], __b)};
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vshlq_n_s8 (int8x16_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_s64 (int64_t *__a, int64x1_t __b, const int __lane)
+ {
+- return (int8x16_t) __builtin_aarch64_ashlv16qi (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vshlq_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_u8 (uint8_t *__a, uint8x8_t __b, const int __lane)
+ {
+- return (int16x8_t) __builtin_aarch64_ashlv8hi (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vshlq_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_u16 (uint16_t *__a, uint16x4_t __b, const int __lane)
+ {
+- return (int32x4_t) __builtin_aarch64_ashlv4si (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vshlq_n_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_u32 (uint32_t *__a, uint32x2_t __b, const int __lane)
+ {
+- return (int64x2_t) __builtin_aarch64_ashlv2di (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vshlq_n_u8 (uint8x16_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1_lane_u64 (uint64_t *__a, uint64x1_t __b, const int __lane)
+ {
+- return (uint8x16_t) __builtin_aarch64_ashlv16qi ((int8x16_t) __a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vshlq_n_u16 (uint16x8_t __a, const int __b)
++/* vst1q_lane */
++
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_f16 (float16_t *__a, float16x8_t __b, const int __lane)
+ {
+- return (uint16x8_t) __builtin_aarch64_ashlv8hi ((int16x8_t) __a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vshlq_n_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_f32 (float32_t *__a, float32x4_t __b, const int __lane)
+ {
+- return (uint32x4_t) __builtin_aarch64_ashlv4si ((int32x4_t) __a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vshlq_n_u64 (uint64x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_f64 (float64_t *__a, float64x2_t __b, const int __lane)
+ {
+- return (uint64x2_t) __builtin_aarch64_ashlv2di ((int64x2_t) __a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vshld_n_s64 (int64_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_p8 (poly8_t *__a, poly8x16_t __b, const int __lane)
+ {
+- return __builtin_aarch64_ashldi (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vshld_n_u64 (uint64_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_p16 (poly16_t *__a, poly16x8_t __b, const int __lane)
+ {
+- return (uint64_t) __builtin_aarch64_ashldi (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vshl_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_p64 (poly64_t *__a, poly64x2_t __b, const int __lane)
+ {
+- return __builtin_aarch64_sshlv8qi (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vshl_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_s8 (int8_t *__a, int8x16_t __b, const int __lane)
+ {
+- return __builtin_aarch64_sshlv4hi (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vshl_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_s16 (int16_t *__a, int16x8_t __b, const int __lane)
+ {
+- return __builtin_aarch64_sshlv2si (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vshl_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_s32 (int32_t *__a, int32x4_t __b, const int __lane)
+ {
+- return (int64x1_t) {__builtin_aarch64_sshldi (__a[0], __b[0])};
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vshl_u8 (uint8x8_t __a, int8x8_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_s64 (int64_t *__a, int64x2_t __b, const int __lane)
+ {
+- return __builtin_aarch64_ushlv8qi_uus (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vshl_u16 (uint16x4_t __a, int16x4_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_u8 (uint8_t *__a, uint8x16_t __b, const int __lane)
+ {
+- return __builtin_aarch64_ushlv4hi_uus (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vshl_u32 (uint32x2_t __a, int32x2_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_u16 (uint16_t *__a, uint16x8_t __b, const int __lane)
+ {
+- return __builtin_aarch64_ushlv2si_uus (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vshl_u64 (uint64x1_t __a, int64x1_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_u32 (uint32_t *__a, uint32x4_t __b, const int __lane)
+ {
+- return (uint64x1_t) {__builtin_aarch64_ushldi_uus (__a[0], __b[0])};
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vshlq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst1q_lane_u64 (uint64_t *__a, uint64x2_t __b, const int __lane)
+ {
+- return __builtin_aarch64_sshlv16qi (__a, __b);
++ *__a = __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vshlq_s16 (int16x8_t __a, int16x8_t __b)
++/* vstn */
++
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_s64 (int64_t * __a, int64x1x2_t val)
+ {
+- return __builtin_aarch64_sshlv8hi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ int64x2x2_t temp;
++ temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
++ __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vshlq_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_u64 (uint64_t * __a, uint64x1x2_t val)
+ {
+- return __builtin_aarch64_sshlv4si (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ uint64x2x2_t temp;
++ temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
++ __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vshlq_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_f64 (float64_t * __a, float64x1x2_t val)
+ {
+- return __builtin_aarch64_sshlv2di (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ float64x2x2_t temp;
++ temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[1], 1);
++ __builtin_aarch64_st2df ((__builtin_aarch64_simd_df *) __a, __o);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vshlq_u8 (uint8x16_t __a, int8x16_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_s8 (int8_t * __a, int8x8x2_t val)
+ {
+- return __builtin_aarch64_ushlv16qi_uus (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ int8x16x2_t temp;
++ temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
++ __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vshlq_u16 (uint16x8_t __a, int16x8_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_p8 (poly8_t * __a, poly8x8x2_t val)
+ {
+- return __builtin_aarch64_ushlv8hi_uus (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ poly8x16x2_t temp;
++ temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
++ __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vshlq_u32 (uint32x4_t __a, int32x4_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_s16 (int16_t * __a, int16x4x2_t val)
+ {
+- return __builtin_aarch64_ushlv4si_uus (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ int16x8x2_t temp;
++ temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
++ __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vshlq_u64 (uint64x2_t __a, int64x2_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_p16 (poly16_t * __a, poly16x4x2_t val)
+ {
+- return __builtin_aarch64_ushlv2di_uus (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ poly16x8x2_t temp;
++ temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
++ __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vshld_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_s32 (int32_t * __a, int32x2x2_t val)
+ {
+- return __builtin_aarch64_sshldi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ int32x4x2_t temp;
++ temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
++ __builtin_aarch64_st2v2si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vshld_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_u8 (uint8_t * __a, uint8x8x2_t val)
+ {
+- return __builtin_aarch64_ushldi_uus (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ uint8x16x2_t temp;
++ temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
++ __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vshll_high_n_s8 (int8x16_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_u16 (uint16_t * __a, uint16x4x2_t val)
+ {
+- return __builtin_aarch64_sshll2_nv16qi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ uint16x8x2_t temp;
++ temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
++ __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vshll_high_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_u32 (uint32_t * __a, uint32x2x2_t val)
+ {
+- return __builtin_aarch64_sshll2_nv8hi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ uint32x4x2_t temp;
++ temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
++ __builtin_aarch64_st2v2si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vshll_high_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_f16 (float16_t * __a, float16x4x2_t val)
+ {
+- return __builtin_aarch64_sshll2_nv4si (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ float16x8x2_t temp;
++ temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv8hf (__o, temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv8hf (__o, temp.val[1], 1);
++ __builtin_aarch64_st2v4hf (__a, __o);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vshll_high_n_u8 (uint8x16_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_f32 (float32_t * __a, float32x2x2_t val)
+ {
+- return (uint16x8_t) __builtin_aarch64_ushll2_nv16qi ((int8x16_t) __a, __b);
++ __builtin_aarch64_simd_oi __o;
++ float32x4x2_t temp;
++ temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[1], 1);
++ __builtin_aarch64_st2v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vshll_high_n_u16 (uint16x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2_p64 (poly64_t * __a, poly64x1x2_t val)
+ {
+- return (uint32x4_t) __builtin_aarch64_ushll2_nv8hi ((int16x8_t) __a, __b);
++ __builtin_aarch64_simd_oi __o;
++ poly64x2x2_t temp;
++ temp.val[0] = vcombine_p64 (val.val[0], vcreate_p64 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_p64 (val.val[1], vcreate_p64 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
++ (poly64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
++ (poly64x2_t) temp.val[1], 1);
++ __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vshll_high_n_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_s8 (int8_t * __a, int8x16x2_t val)
+ {
+- return (uint64x2_t) __builtin_aarch64_ushll2_nv4si ((int32x4_t) __a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
++ __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vshll_n_s8 (int8x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_p8 (poly8_t * __a, poly8x16x2_t val)
+ {
+- return __builtin_aarch64_sshll_nv8qi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
++ __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vshll_n_s16 (int16x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_s16 (int16_t * __a, int16x8x2_t val)
+ {
+- return __builtin_aarch64_sshll_nv4hi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
++ __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vshll_n_s32 (int32x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_p16 (poly16_t * __a, poly16x8x2_t val)
+ {
+- return __builtin_aarch64_sshll_nv2si (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
++ __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vshll_n_u8 (uint8x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_s32 (int32_t * __a, int32x4x2_t val)
+ {
+- return __builtin_aarch64_ushll_nv8qi_uus (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
++ __builtin_aarch64_st2v4si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vshll_n_u16 (uint16x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_s64 (int64_t * __a, int64x2x2_t val)
+ {
+- return __builtin_aarch64_ushll_nv4hi_uus (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
++ __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vshll_n_u32 (uint32x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_u8 (uint8_t * __a, uint8x16x2_t val)
+ {
+- return __builtin_aarch64_ushll_nv2si_uus (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
++ __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-/* vshr */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vshr_n_s8 (int8x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_u16 (uint16_t * __a, uint16x8x2_t val)
+ {
+- return (int8x8_t) __builtin_aarch64_ashrv8qi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
++ __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vshr_n_s16 (int16x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_u32 (uint32_t * __a, uint32x4x2_t val)
+ {
+- return (int16x4_t) __builtin_aarch64_ashrv4hi (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
++ __builtin_aarch64_st2v4si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vshr_n_s32 (int32x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_u64 (uint64_t * __a, uint64x2x2_t val)
+ {
+- return (int32x2_t) __builtin_aarch64_ashrv2si (__a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
++ __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vshr_n_s64 (int64x1_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_f16 (float16_t * __a, float16x8x2_t val)
+ {
+- return (int64x1_t) {__builtin_aarch64_ashr_simddi (__a[0], __b)};
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv8hf (__o, val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv8hf (__o, val.val[1], 1);
++ __builtin_aarch64_st2v8hf (__a, __o);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vshr_n_u8 (uint8x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_f32 (float32_t * __a, float32x4x2_t val)
+ {
+- return (uint8x8_t) __builtin_aarch64_lshrv8qi ((int8x8_t) __a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[1], 1);
++ __builtin_aarch64_st2v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vshr_n_u16 (uint16x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_f64 (float64_t * __a, float64x2x2_t val)
+ {
+- return (uint16x4_t) __builtin_aarch64_lshrv4hi ((int16x4_t) __a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[1], 1);
++ __builtin_aarch64_st2v2df ((__builtin_aarch64_simd_df *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vshr_n_u32 (uint32x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst2q_p64 (poly64_t * __a, poly64x2x2_t val)
+ {
+- return (uint32x2_t) __builtin_aarch64_lshrv2si ((int32x2_t) __a, __b);
++ __builtin_aarch64_simd_oi __o;
++ __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
++ (poly64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
++ (poly64x2_t) val.val[1], 1);
++ __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vshr_n_u64 (uint64x1_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_s64 (int64_t * __a, int64x1x3_t val)
+ {
+- return (uint64x1_t) {__builtin_aarch64_lshr_simddi_uus ( __a[0], __b)};
++ __builtin_aarch64_simd_ci __o;
++ int64x2x3_t temp;
++ temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
++ temp.val[2] = vcombine_s64 (val.val[2], vcreate_s64 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
++ __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vshrq_n_s8 (int8x16_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_u64 (uint64_t * __a, uint64x1x3_t val)
+ {
+- return (int8x16_t) __builtin_aarch64_ashrv16qi (__a, __b);
++ __builtin_aarch64_simd_ci __o;
++ uint64x2x3_t temp;
++ temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_u64 (val.val[2], vcreate_u64 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
++ __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vshrq_n_s16 (int16x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_f64 (float64_t * __a, float64x1x3_t val)
+ {
+- return (int16x8_t) __builtin_aarch64_ashrv8hi (__a, __b);
++ __builtin_aarch64_simd_ci __o;
++ float64x2x3_t temp;
++ temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_f64 (val.val[2], vcreate_f64 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[2], 2);
++ __builtin_aarch64_st3df ((__builtin_aarch64_simd_df *) __a, __o);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vshrq_n_s32 (int32x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_s8 (int8_t * __a, int8x8x3_t val)
+ {
+- return (int32x4_t) __builtin_aarch64_ashrv4si (__a, __b);
++ __builtin_aarch64_simd_ci __o;
++ int8x16x3_t temp;
++ temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
++ temp.val[2] = vcombine_s8 (val.val[2], vcreate_s8 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
++ __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vshrq_n_s64 (int64x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_p8 (poly8_t * __a, poly8x8x3_t val)
+ {
+- return (int64x2_t) __builtin_aarch64_ashrv2di (__a, __b);
++ __builtin_aarch64_simd_ci __o;
++ poly8x16x3_t temp;
++ temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_p8 (val.val[2], vcreate_p8 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
++ __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vshrq_n_u8 (uint8x16_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_s16 (int16_t * __a, int16x4x3_t val)
+ {
+- return (uint8x16_t) __builtin_aarch64_lshrv16qi ((int8x16_t) __a, __b);
++ __builtin_aarch64_simd_ci __o;
++ int16x8x3_t temp;
++ temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
++ temp.val[2] = vcombine_s16 (val.val[2], vcreate_s16 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
++ __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vshrq_n_u16 (uint16x8_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_p16 (poly16_t * __a, poly16x4x3_t val)
+ {
+- return (uint16x8_t) __builtin_aarch64_lshrv8hi ((int16x8_t) __a, __b);
++ __builtin_aarch64_simd_ci __o;
++ poly16x8x3_t temp;
++ temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_p16 (val.val[2], vcreate_p16 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
++ __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vshrq_n_u32 (uint32x4_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_s32 (int32_t * __a, int32x2x3_t val)
+ {
+- return (uint32x4_t) __builtin_aarch64_lshrv4si ((int32x4_t) __a, __b);
++ __builtin_aarch64_simd_ci __o;
++ int32x4x3_t temp;
++ temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
++ temp.val[2] = vcombine_s32 (val.val[2], vcreate_s32 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
++ __builtin_aarch64_st3v2si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vshrq_n_u64 (uint64x2_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_u8 (uint8_t * __a, uint8x8x3_t val)
+ {
+- return (uint64x2_t) __builtin_aarch64_lshrv2di ((int64x2_t) __a, __b);
++ __builtin_aarch64_simd_ci __o;
++ uint8x16x3_t temp;
++ temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_u8 (val.val[2], vcreate_u8 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
++ __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vshrd_n_s64 (int64_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_u16 (uint16_t * __a, uint16x4x3_t val)
+ {
+- return __builtin_aarch64_ashr_simddi (__a, __b);
++ __builtin_aarch64_simd_ci __o;
++ uint16x8x3_t temp;
++ temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_u16 (val.val[2], vcreate_u16 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
++ __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vshrd_n_u64 (uint64_t __a, const int __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_u32 (uint32_t * __a, uint32x2x3_t val)
+ {
+- return __builtin_aarch64_lshr_simddi_uus (__a, __b);
++ __builtin_aarch64_simd_ci __o;
++ uint32x4x3_t temp;
++ temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_u32 (val.val[2], vcreate_u32 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
++ __builtin_aarch64_st3v2si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-/* vsli */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vsli_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_f16 (float16_t * __a, float16x4x3_t val)
+ {
+- return (int8x8_t) __builtin_aarch64_ssli_nv8qi (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ float16x8x3_t temp;
++ temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_f16 (val.val[2], vcreate_f16 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[2], 2);
++ __builtin_aarch64_st3v4hf ((__builtin_aarch64_simd_hf *) __a, __o);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vsli_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_f32 (float32_t * __a, float32x2x3_t val)
+ {
+- return (int16x4_t) __builtin_aarch64_ssli_nv4hi (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ float32x4x3_t temp;
++ temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_f32 (val.val[2], vcreate_f32 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[2], 2);
++ __builtin_aarch64_st3v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vsli_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3_p64 (poly64_t * __a, poly64x1x3_t val)
+ {
+- return (int32x2_t) __builtin_aarch64_ssli_nv2si (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ poly64x2x3_t temp;
++ temp.val[0] = vcombine_p64 (val.val[0], vcreate_p64 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_p64 (val.val[1], vcreate_p64 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_p64 (val.val[2], vcreate_p64 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
++ (poly64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
++ (poly64x2_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
++ (poly64x2_t) temp.val[2], 2);
++ __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vsli_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_s8 (int8_t * __a, int8x16x3_t val)
+ {
+- return (int64x1_t) {__builtin_aarch64_ssli_ndi (__a[0], __b[0], __c)};
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
++ __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vsli_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_p8 (poly8_t * __a, poly8x16x3_t val)
+ {
+- return __builtin_aarch64_usli_nv8qi_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
++ __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vsli_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_s16 (int16_t * __a, int16x8x3_t val)
+ {
+- return __builtin_aarch64_usli_nv4hi_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
++ __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vsli_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_p16 (poly16_t * __a, poly16x8x3_t val)
+ {
+- return __builtin_aarch64_usli_nv2si_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
++ __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vsli_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_s32 (int32_t * __a, int32x4x3_t val)
+ {
+- return (uint64x1_t) {__builtin_aarch64_usli_ndi_uuus (__a[0], __b[0], __c)};
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
++ __builtin_aarch64_st3v4si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vsliq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_s64 (int64_t * __a, int64x2x3_t val)
+ {
+- return (int8x16_t) __builtin_aarch64_ssli_nv16qi (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
++ __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vsliq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_u8 (uint8_t * __a, uint8x16x3_t val)
+ {
+- return (int16x8_t) __builtin_aarch64_ssli_nv8hi (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
++ __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vsliq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_u16 (uint16_t * __a, uint16x8x3_t val)
+ {
+- return (int32x4_t) __builtin_aarch64_ssli_nv4si (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
++ __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vsliq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_u32 (uint32_t * __a, uint32x4x3_t val)
+ {
+- return (int64x2_t) __builtin_aarch64_ssli_nv2di (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
++ __builtin_aarch64_st3v4si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vsliq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_u64 (uint64_t * __a, uint64x2x3_t val)
+ {
+- return __builtin_aarch64_usli_nv16qi_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
++ __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vsliq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_f16 (float16_t * __a, float16x8x3_t val)
+ {
+- return __builtin_aarch64_usli_nv8hi_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[2], 2);
++ __builtin_aarch64_st3v8hf ((__builtin_aarch64_simd_hf *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsliq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_f32 (float32_t * __a, float32x4x3_t val)
+ {
+- return __builtin_aarch64_usli_nv4si_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[2], 2);
++ __builtin_aarch64_st3v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vsliq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_f64 (float64_t * __a, float64x2x3_t val)
+ {
+- return __builtin_aarch64_usli_nv2di_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[2], 2);
++ __builtin_aarch64_st3v2df ((__builtin_aarch64_simd_df *) __a, __o);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vslid_n_s64 (int64_t __a, int64_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst3q_p64 (poly64_t * __a, poly64x2x3_t val)
+ {
+- return __builtin_aarch64_ssli_ndi (__a, __b, __c);
++ __builtin_aarch64_simd_ci __o;
++ __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
++ (poly64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
++ (poly64x2_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
++ (poly64x2_t) val.val[2], 2);
++ __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vslid_n_u64 (uint64_t __a, uint64_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_s64 (int64_t * __a, int64x1x4_t val)
+ {
+- return __builtin_aarch64_usli_ndi_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ int64x2x4_t temp;
++ temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
++ temp.val[2] = vcombine_s64 (val.val[2], vcreate_s64 (__AARCH64_INT64_C (0)));
++ temp.val[3] = vcombine_s64 (val.val[3], vcreate_s64 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[3], 3);
++ __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-/* vsqadd */
+-
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vsqadd_u8 (uint8x8_t __a, int8x8_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_u64 (uint64_t * __a, uint64x1x4_t val)
+ {
+- return __builtin_aarch64_usqaddv8qi_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ uint64x2x4_t temp;
++ temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_u64 (val.val[2], vcreate_u64 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_u64 (val.val[3], vcreate_u64 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[3], 3);
++ __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vsqadd_u16 (uint16x4_t __a, int16x4_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_f64 (float64_t * __a, float64x1x4_t val)
+ {
+- return __builtin_aarch64_usqaddv4hi_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ float64x2x4_t temp;
++ temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_f64 (val.val[2], vcreate_f64 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_f64 (val.val[3], vcreate_f64 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[3], 3);
++ __builtin_aarch64_st4df ((__builtin_aarch64_simd_df *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vsqadd_u32 (uint32x2_t __a, int32x2_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_s8 (int8_t * __a, int8x8x4_t val)
+ {
+- return __builtin_aarch64_usqaddv2si_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ int8x16x4_t temp;
++ temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
++ temp.val[2] = vcombine_s8 (val.val[2], vcreate_s8 (__AARCH64_INT64_C (0)));
++ temp.val[3] = vcombine_s8 (val.val[3], vcreate_s8 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
++ __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vsqadd_u64 (uint64x1_t __a, int64x1_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_p8 (poly8_t * __a, poly8x8x4_t val)
+ {
+- return (uint64x1_t) {__builtin_aarch64_usqadddi_uus (__a[0], __b[0])};
++ __builtin_aarch64_simd_xi __o;
++ poly8x16x4_t temp;
++ temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_p8 (val.val[2], vcreate_p8 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_p8 (val.val[3], vcreate_p8 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
++ __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vsqaddq_u8 (uint8x16_t __a, int8x16_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_s16 (int16_t * __a, int16x4x4_t val)
+ {
+- return __builtin_aarch64_usqaddv16qi_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ int16x8x4_t temp;
++ temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
++ temp.val[2] = vcombine_s16 (val.val[2], vcreate_s16 (__AARCH64_INT64_C (0)));
++ temp.val[3] = vcombine_s16 (val.val[3], vcreate_s16 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
++ __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vsqaddq_u16 (uint16x8_t __a, int16x8_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_p16 (poly16_t * __a, poly16x4x4_t val)
+ {
+- return __builtin_aarch64_usqaddv8hi_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ poly16x8x4_t temp;
++ temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_p16 (val.val[2], vcreate_p16 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_p16 (val.val[3], vcreate_p16 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
++ __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsqaddq_u32 (uint32x4_t __a, int32x4_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_s32 (int32_t * __a, int32x2x4_t val)
+ {
+- return __builtin_aarch64_usqaddv4si_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ int32x4x4_t temp;
++ temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
++ temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
++ temp.val[2] = vcombine_s32 (val.val[2], vcreate_s32 (__AARCH64_INT64_C (0)));
++ temp.val[3] = vcombine_s32 (val.val[3], vcreate_s32 (__AARCH64_INT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[3], 3);
++ __builtin_aarch64_st4v2si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vsqaddq_u64 (uint64x2_t __a, int64x2_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_u8 (uint8_t * __a, uint8x8x4_t val)
+ {
+- return __builtin_aarch64_usqaddv2di_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ uint8x16x4_t temp;
++ temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_u8 (val.val[2], vcreate_u8 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_u8 (val.val[3], vcreate_u8 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
++ __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
+-vsqaddb_u8 (uint8_t __a, int8_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_u16 (uint16_t * __a, uint16x4x4_t val)
+ {
+- return __builtin_aarch64_usqaddqi_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ uint16x8x4_t temp;
++ temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_u16 (val.val[2], vcreate_u16 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_u16 (val.val[3], vcreate_u16 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
++ __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+-vsqaddh_u16 (uint16_t __a, int16_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_u32 (uint32_t * __a, uint32x2x4_t val)
+ {
+- return __builtin_aarch64_usqaddhi_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ uint32x4x4_t temp;
++ temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_u32 (val.val[2], vcreate_u32 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_u32 (val.val[3], vcreate_u32 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[3], 3);
++ __builtin_aarch64_st4v2si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vsqadds_u32 (uint32_t __a, int32_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_f16 (float16_t * __a, float16x4x4_t val)
+ {
+- return __builtin_aarch64_usqaddsi_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ float16x8x4_t temp;
++ temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_f16 (val.val[2], vcreate_f16 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_f16 (val.val[3], vcreate_f16 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[3], 3);
++ __builtin_aarch64_st4v4hf ((__builtin_aarch64_simd_hf *) __a, __o);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vsqaddd_u64 (uint64_t __a, int64_t __b)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_f32 (float32_t * __a, float32x2x4_t val)
+ {
+- return __builtin_aarch64_usqadddi_uus (__a, __b);
++ __builtin_aarch64_simd_xi __o;
++ float32x4x4_t temp;
++ temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_f32 (val.val[2], vcreate_f32 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_f32 (val.val[3], vcreate_f32 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[3], 3);
++ __builtin_aarch64_st4v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
+ }
+
+-/* vsqrt */
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vsqrt_f32 (float32x2_t a)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4_p64 (poly64_t * __a, poly64x1x4_t val)
+ {
+- return __builtin_aarch64_sqrtv2sf (a);
++ __builtin_aarch64_simd_xi __o;
++ poly64x2x4_t temp;
++ temp.val[0] = vcombine_p64 (val.val[0], vcreate_p64 (__AARCH64_UINT64_C (0)));
++ temp.val[1] = vcombine_p64 (val.val[1], vcreate_p64 (__AARCH64_UINT64_C (0)));
++ temp.val[2] = vcombine_p64 (val.val[2], vcreate_p64 (__AARCH64_UINT64_C (0)));
++ temp.val[3] = vcombine_p64 (val.val[3], vcreate_p64 (__AARCH64_UINT64_C (0)));
++ __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
++ (poly64x2_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
++ (poly64x2_t) temp.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
++ (poly64x2_t) temp.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
++ (poly64x2_t) temp.val[3], 3);
++ __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vsqrtq_f32 (float32x4_t a)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_s8 (int8_t * __a, int8x16x4_t val)
+ {
+- return __builtin_aarch64_sqrtv4sf (a);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
++ __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
+-vsqrt_f64 (float64x1_t a)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_p8 (poly8_t * __a, poly8x16x4_t val)
+ {
+- return (float64x1_t) { __builtin_aarch64_sqrtdf (a[0]) };
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
++ __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vsqrtq_f64 (float64x2_t a)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_s16 (int16_t * __a, int16x8x4_t val)
+ {
+- return __builtin_aarch64_sqrtv2df (a);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
++ __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-/* vsra */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_p16 (poly16_t * __a, poly16x8x4_t val)
+ {
+- return (int8x8_t) __builtin_aarch64_ssra_nv8qi (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
++ __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_s32 (int32_t * __a, int32x4x4_t val)
+ {
+- return (int16x4_t) __builtin_aarch64_ssra_nv4hi (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[3], 3);
++ __builtin_aarch64_st4v4si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_s64 (int64_t * __a, int64x2x4_t val)
+ {
+- return (int32x2_t) __builtin_aarch64_ssra_nv2si (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[3], 3);
++ __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_u8 (uint8_t * __a, uint8x16x4_t val)
+ {
+- return (int64x1_t) {__builtin_aarch64_ssra_ndi (__a[0], __b[0], __c)};
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
++ __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_u16 (uint16_t * __a, uint16x8x4_t val)
+ {
+- return __builtin_aarch64_usra_nv8qi_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
++ __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_u32 (uint32_t * __a, uint32x4x4_t val)
+ {
+- return __builtin_aarch64_usra_nv4hi_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[3], 3);
++ __builtin_aarch64_st4v4si ((__builtin_aarch64_simd_si *) __a, __o);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_u64 (uint64_t * __a, uint64x2x4_t val)
+ {
+- return __builtin_aarch64_usra_nv2si_uuus (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[3], 3);
++ __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_f16 (float16_t * __a, float16x8x4_t val)
+ {
+- return (uint64x1_t) {__builtin_aarch64_usra_ndi_uuus (__a[0], __b[0], __c)};
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[3], 3);
++ __builtin_aarch64_st4v8hf ((__builtin_aarch64_simd_hf *) __a, __o);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_f32 (float32_t * __a, float32x4x4_t val)
+ {
+- return (int8x16_t) __builtin_aarch64_ssra_nv16qi (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[3], 3);
++ __builtin_aarch64_st4v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_f64 (float64_t * __a, float64x2x4_t val)
+ {
+- return (int16x8_t) __builtin_aarch64_ssra_nv8hi (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[3], 3);
++ __builtin_aarch64_st4v2df ((__builtin_aarch64_simd_df *) __a, __o);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vst4q_p64 (poly64_t * __a, poly64x2x4_t val)
+ {
+- return (int32x4_t) __builtin_aarch64_ssra_nv4si (__a, __b, __c);
++ __builtin_aarch64_simd_xi __o;
++ __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
++ (poly64x2_t) val.val[0], 0);
++ __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
++ (poly64x2_t) val.val[1], 1);
++ __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
++ (poly64x2_t) val.val[2], 2);
++ __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
++ (poly64x2_t) val.val[3], 3);
++ __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+-{
+- return (int64x2_t) __builtin_aarch64_ssra_nv2di (__a, __b, __c);
+-}
++/* vsub */
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsubd_s64 (int64_t __a, int64_t __b)
+ {
+- return __builtin_aarch64_usra_nv16qi_uuus (__a, __b, __c);
++ return __a - __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsubd_u64 (uint64_t __a, uint64_t __b)
+ {
+- return __builtin_aarch64_usra_nv8hi_uuus (__a, __b, __c);
++ return __a - __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+-{
+- return __builtin_aarch64_usra_nv4si_uuus (__a, __b, __c);
+-}
++/* vtbx1 */
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx1_s8 (int8x8_t __r, int8x8_t __tab, int8x8_t __idx)
+ {
+- return __builtin_aarch64_usra_nv2di_uuus (__a, __b, __c);
++ uint8x8_t __mask = vclt_u8 (vreinterpret_u8_s8 (__idx),
++ vmov_n_u8 (8));
++ int8x8_t __tbl = vtbl1_s8 (__tab, __idx);
++
++ return vbsl_s8 (__mask, __tbl, __r);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vsrad_n_s64 (int64_t __a, int64_t __b, const int __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx1_u8 (uint8x8_t __r, uint8x8_t __tab, uint8x8_t __idx)
+ {
+- return __builtin_aarch64_ssra_ndi (__a, __b, __c);
++ uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (8));
++ uint8x8_t __tbl = vtbl1_u8 (__tab, __idx);
++
++ return vbsl_u8 (__mask, __tbl, __r);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vsrad_n_u64 (uint64_t __a, uint64_t __b, const int __c)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx1_p8 (poly8x8_t __r, poly8x8_t __tab, uint8x8_t __idx)
+ {
+- return __builtin_aarch64_usra_ndi_uuus (__a, __b, __c);
++ uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (8));
++ poly8x8_t __tbl = vtbl1_p8 (__tab, __idx);
++
++ return vbsl_p8 (__mask, __tbl, __r);
+ }
+
+-/* vsri */
++/* vtbx3 */
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vsri_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx3_s8 (int8x8_t __r, int8x8x3_t __tab, int8x8_t __idx)
+ {
+- return (int8x8_t) __builtin_aarch64_ssri_nv8qi (__a, __b, __c);
++ uint8x8_t __mask = vclt_u8 (vreinterpret_u8_s8 (__idx),
++ vmov_n_u8 (24));
++ int8x8_t __tbl = vtbl3_s8 (__tab, __idx);
++
++ return vbsl_s8 (__mask, __tbl, __r);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vsri_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx3_u8 (uint8x8_t __r, uint8x8x3_t __tab, uint8x8_t __idx)
+ {
+- return (int16x4_t) __builtin_aarch64_ssri_nv4hi (__a, __b, __c);
++ uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (24));
++ uint8x8_t __tbl = vtbl3_u8 (__tab, __idx);
++
++ return vbsl_u8 (__mask, __tbl, __r);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vsri_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx3_p8 (poly8x8_t __r, poly8x8x3_t __tab, uint8x8_t __idx)
+ {
+- return (int32x2_t) __builtin_aarch64_ssri_nv2si (__a, __b, __c);
++ uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (24));
++ poly8x8_t __tbl = vtbl3_p8 (__tab, __idx);
++
++ return vbsl_p8 (__mask, __tbl, __r);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vsri_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
++/* vtbx4 */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx4_s8 (int8x8_t __r, int8x8x4_t __tab, int8x8_t __idx)
+ {
+- return (int64x1_t) {__builtin_aarch64_ssri_ndi (__a[0], __b[0], __c)};
++ int8x8_t result;
++ int8x16x2_t temp;
++ __builtin_aarch64_simd_oi __o;
++ temp.val[0] = vcombine_s8 (__tab.val[0], __tab.val[1]);
++ temp.val[1] = vcombine_s8 (__tab.val[2], __tab.val[3]);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[1], 1);
++ result = __builtin_aarch64_tbx4v8qi (__r, __o, __idx);
++ return result;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vsri_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx4_u8 (uint8x8_t __r, uint8x8x4_t __tab, uint8x8_t __idx)
+ {
+- return __builtin_aarch64_usri_nv8qi_uuus (__a, __b, __c);
++ uint8x8_t result;
++ uint8x16x2_t temp;
++ __builtin_aarch64_simd_oi __o;
++ temp.val[0] = vcombine_u8 (__tab.val[0], __tab.val[1]);
++ temp.val[1] = vcombine_u8 (__tab.val[2], __tab.val[3]);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[1], 1);
++ result = (uint8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)__r, __o,
++ (int8x8_t)__idx);
++ return result;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vsri_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtbx4_p8 (poly8x8_t __r, poly8x8x4_t __tab, uint8x8_t __idx)
+ {
+- return __builtin_aarch64_usri_nv4hi_uuus (__a, __b, __c);
++ poly8x8_t result;
++ poly8x16x2_t temp;
++ __builtin_aarch64_simd_oi __o;
++ temp.val[0] = vcombine_p8 (__tab.val[0], __tab.val[1]);
++ temp.val[1] = vcombine_p8 (__tab.val[2], __tab.val[3]);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[0], 0);
++ __o = __builtin_aarch64_set_qregoiv16qi (__o,
++ (int8x16_t) temp.val[1], 1);
++ result = (poly8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)__r, __o,
++ (int8x8_t)__idx);
++ return result;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vsri_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
++/* vtrn */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- return __builtin_aarch64_usri_nv2si_uuus (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
++#endif
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vsri_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- return (uint64x1_t) {__builtin_aarch64_usri_ndi_uuus (__a[0], __b[0], __c)};
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vsriq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+- return (int8x16_t) __builtin_aarch64_ssri_nv16qi (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++#endif
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vsriq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+- return (int16x8_t) __builtin_aarch64_ssri_nv8hi (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
++#endif
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vsriq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- return (int32x4_t) __builtin_aarch64_ssri_nv4si (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++#endif
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vsriq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- return (int64x2_t) __builtin_aarch64_ssri_nv2di (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
++#endif
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vsriq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- return __builtin_aarch64_usri_nv16qi_uuus (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vsriq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- return __builtin_aarch64_usri_nv8hi_uuus (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++#endif
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsriq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- return __builtin_aarch64_usri_nv4si_uuus (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
++#endif
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vsriq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- return __builtin_aarch64_usri_nv2di_uuus (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vsrid_n_s64 (int64_t __a, int64_t __b, const int __c)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- return __builtin_aarch64_ssri_ndi (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++#endif
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vsrid_n_u64 (uint64_t __a, uint64_t __b, const int __c)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- return __builtin_aarch64_usri_ndi_uuus (__a, __b, __c);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
++#endif
+ }
+
+-/* vst1 */
+-
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_f16 (float16_t *__a, float16x4_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- __builtin_aarch64_st1v4hf (__a, __b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_f32 (float32_t *a, float32x2_t b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+- __builtin_aarch64_st1v2sf ((__builtin_aarch64_simd_sf *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_f64 (float64_t *a, float64x1_t b)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_p16 (poly16x8_t __a, poly16x8_t __b)
+ {
+- *a = b[0];
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_p8 (poly8_t *a, poly8x8_t b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a,
+- (int8x8_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_p16 (poly16_t *a, poly16x4_t b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a,
+- (int16x4_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_s8 (int8_t *a, int8x8_t b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_s16 (int16_t *a, int16x4_t b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_s32 (int32_t *a, int32x2_t b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- __builtin_aarch64_st1v2si ((__builtin_aarch64_simd_si *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_s64 (int64_t *a, int64x1_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+- *a = b[0];
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_u8 (uint8_t *a, uint8x8_t b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+- __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a,
+- (int8x8_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_u16 (uint16_t *a, uint16x4_t b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn1q_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+- __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a,
+- (int16x4_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_u32 (uint32_t *a, uint32x2_t b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- __builtin_aarch64_st1v2si ((__builtin_aarch64_simd_si *) a,
+- (int32x2_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_u64 (uint64_t *a, uint64x1_t b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- *a = b[0];
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
++#endif
+ }
+
+-/* vst1q */
+-
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_f16 (float16_t *__a, float16x8_t __b)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+- __builtin_aarch64_st1v8hf (__a, __b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_f32 (float32_t *a, float32x4_t b)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+- __builtin_aarch64_st1v4sf ((__builtin_aarch64_simd_sf *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_f64 (float64_t *a, float64x2_t b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- __builtin_aarch64_st1v2df ((__builtin_aarch64_simd_df *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_p8 (poly8_t *a, poly8x16_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a,
+- (int8x16_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_p16 (poly16_t *a, poly16x8_t b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a,
+- (int16x8_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_s8 (int8_t *a, int8x16_t b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_s16 (int16_t *a, int16x8_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_s32 (int32_t *a, int32x4_t b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- __builtin_aarch64_st1v4si ((__builtin_aarch64_simd_si *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_s64 (int64_t *a, int64x2_t b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- __builtin_aarch64_st1v2di ((__builtin_aarch64_simd_di *) a, b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_u8 (uint8_t *a, uint8x16_t b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a,
+- (int8x16_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_u16 (uint16_t *a, uint16x8_t b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a,
+- (int16x8_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_u32 (uint32_t *a, uint32x4_t b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+- __builtin_aarch64_st1v4si ((__builtin_aarch64_simd_si *) a,
+- (int32x4_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_u64 (uint64_t *a, uint64x2_t b)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_p16 (poly16x8_t __a, poly16x8_t __b)
+ {
+- __builtin_aarch64_st1v2di ((__builtin_aarch64_simd_di *) a,
+- (int64x2_t) b);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++#endif
+ }
+
+-/* vst1_lane */
+-
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_f16 (float16_t *__a, float16x4_t __b, const int __lane)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_f32 (float32_t *__a, float32x2_t __b, const int __lane)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_f64 (float64_t *__a, float64x1_t __b, const int __lane)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_p8 (poly8_t *__a, poly8x8_t __b, const int __lane)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_p16 (poly16_t *__a, poly16x4_t __b, const int __lane)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_s8 (int8_t *__a, int8x8_t __b, const int __lane)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_s16 (int16_t *__a, int16x4_t __b, const int __lane)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_s32 (int32_t *__a, int32x2_t __b, const int __lane)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn2q_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_s64 (int64_t *__a, int64x1_t __b, const int __lane)
++__extension__ extern __inline float16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (float16x4x2_t) {vtrn1_f16 (__a, __b), vtrn2_f16 (__a, __b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_u8 (uint8_t *__a, uint8x8_t __b, const int __lane)
++__extension__ extern __inline float32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_f32 (float32x2_t a, float32x2_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (float32x2x2_t) {vtrn1_f32 (a, b), vtrn2_f32 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_u16 (uint16_t *__a, uint16x4_t __b, const int __lane)
++__extension__ extern __inline poly8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_p8 (poly8x8_t a, poly8x8_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (poly8x8x2_t) {vtrn1_p8 (a, b), vtrn2_p8 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_u32 (uint32_t *__a, uint32x2_t __b, const int __lane)
++__extension__ extern __inline poly16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_p16 (poly16x4_t a, poly16x4_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (poly16x4x2_t) {vtrn1_p16 (a, b), vtrn2_p16 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1_lane_u64 (uint64_t *__a, uint64x1_t __b, const int __lane)
++__extension__ extern __inline int8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_s8 (int8x8_t a, int8x8_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (int8x8x2_t) {vtrn1_s8 (a, b), vtrn2_s8 (a, b)};
+ }
+
+-/* vst1q_lane */
+-
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_f16 (float16_t *__a, float16x8_t __b, const int __lane)
++__extension__ extern __inline int16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_s16 (int16x4_t a, int16x4_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (int16x4x2_t) {vtrn1_s16 (a, b), vtrn2_s16 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_f32 (float32_t *__a, float32x4_t __b, const int __lane)
++__extension__ extern __inline int32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_s32 (int32x2_t a, int32x2_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (int32x2x2_t) {vtrn1_s32 (a, b), vtrn2_s32 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_f64 (float64_t *__a, float64x2_t __b, const int __lane)
++__extension__ extern __inline uint8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_u8 (uint8x8_t a, uint8x8_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (uint8x8x2_t) {vtrn1_u8 (a, b), vtrn2_u8 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_p8 (poly8_t *__a, poly8x16_t __b, const int __lane)
++__extension__ extern __inline uint16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_u16 (uint16x4_t a, uint16x4_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (uint16x4x2_t) {vtrn1_u16 (a, b), vtrn2_u16 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_p16 (poly16_t *__a, poly16x8_t __b, const int __lane)
++__extension__ extern __inline uint32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_u32 (uint32x2_t a, uint32x2_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (uint32x2x2_t) {vtrn1_u32 (a, b), vtrn2_u32 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_s8 (int8_t *__a, int8x16_t __b, const int __lane)
++__extension__ extern __inline float16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (float16x8x2_t) {vtrn1q_f16 (__a, __b), vtrn2q_f16 (__a, __b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_s16 (int16_t *__a, int16x8_t __b, const int __lane)
++__extension__ extern __inline float32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_f32 (float32x4_t a, float32x4_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (float32x4x2_t) {vtrn1q_f32 (a, b), vtrn2q_f32 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_s32 (int32_t *__a, int32x4_t __b, const int __lane)
++__extension__ extern __inline poly8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_p8 (poly8x16_t a, poly8x16_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (poly8x16x2_t) {vtrn1q_p8 (a, b), vtrn2q_p8 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_s64 (int64_t *__a, int64x2_t __b, const int __lane)
++__extension__ extern __inline poly16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_p16 (poly16x8_t a, poly16x8_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (poly16x8x2_t) {vtrn1q_p16 (a, b), vtrn2q_p16 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_u8 (uint8_t *__a, uint8x16_t __b, const int __lane)
++__extension__ extern __inline int8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_s8 (int8x16_t a, int8x16_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (int8x16x2_t) {vtrn1q_s8 (a, b), vtrn2q_s8 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_u16 (uint16_t *__a, uint16x8_t __b, const int __lane)
++__extension__ extern __inline int16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_s16 (int16x8_t a, int16x8_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (int16x8x2_t) {vtrn1q_s16 (a, b), vtrn2q_s16 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_u32 (uint32_t *__a, uint32x4_t __b, const int __lane)
++__extension__ extern __inline int32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_s32 (int32x4_t a, int32x4_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (int32x4x2_t) {vtrn1q_s32 (a, b), vtrn2q_s32 (a, b)};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst1q_lane_u64 (uint64_t *__a, uint64x2_t __b, const int __lane)
++__extension__ extern __inline uint8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_u8 (uint8x16_t a, uint8x16_t b)
+ {
+- *__a = __aarch64_vget_lane_any (__b, __lane);
++ return (uint8x16x2_t) {vtrn1q_u8 (a, b), vtrn2q_u8 (a, b)};
+ }
+
+-/* vstn */
+-
+-__extension__ static __inline void
+-vst2_s64 (int64_t * __a, int64x1x2_t val)
++__extension__ extern __inline uint16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_u16 (uint16x8_t a, uint16x8_t b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- int64x2x2_t temp;
+- temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
+- __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
++ return (uint16x8x2_t) {vtrn1q_u16 (a, b), vtrn2q_u16 (a, b)};
+ }
+
+-__extension__ static __inline void
+-vst2_u64 (uint64_t * __a, uint64x1x2_t val)
++__extension__ extern __inline uint32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_u32 (uint32x4_t a, uint32x4_t b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- uint64x2x2_t temp;
+- temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
+- __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
++ return (uint32x4x2_t) {vtrn1q_u32 (a, b), vtrn2q_u32 (a, b)};
+ }
+
+-__extension__ static __inline void
+-vst2_f64 (float64_t * __a, float64x1x2_t val)
+-{
+- __builtin_aarch64_simd_oi __o;
+- float64x2x2_t temp;
+- temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[1], 1);
+- __builtin_aarch64_st2df ((__builtin_aarch64_simd_df *) __a, __o);
+-}
++/* vtst */
+
+-__extension__ static __inline void
+-vst2_s8 (int8_t * __a, int8x8x2_t val)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- int8x16x2_t temp;
+- temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
+- __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
++ return (uint8x8_t) ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2_p8 (poly8_t * __a, poly8x8x2_t val)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- poly8x16x2_t temp;
+- temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
+- __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
++ return (uint16x4_t) ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2_s16 (int16_t * __a, int16x4x2_t val)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- int16x8x2_t temp;
+- temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
+- __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
++ return (uint32x2_t) ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2_p16 (poly16_t * __a, poly16x4x2_t val)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_s64 (int64x1_t __a, int64x1_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- poly16x8x2_t temp;
+- temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
+- __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
++ return (uint64x1_t) ((__a & __b) != __AARCH64_INT64_C (0));
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2_s32 (int32_t * __a, int32x2x2_t val)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- int32x4x2_t temp;
+- temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
+- __builtin_aarch64_st2v2si ((__builtin_aarch64_simd_si *) __a, __o);
++ return ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2_u8 (uint8_t * __a, uint8x8x2_t val)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- uint8x16x2_t temp;
+- temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
+- __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
++ return ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2_u16 (uint16_t * __a, uint16x4x2_t val)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- uint16x8x2_t temp;
+- temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
+- __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
++ return ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2_u32 (uint32_t * __a, uint32x2x2_t val)
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- uint32x4x2_t temp;
+- temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
+- __builtin_aarch64_st2v2si ((__builtin_aarch64_simd_si *) __a, __o);
++ return ((__a & __b) != __AARCH64_UINT64_C (0));
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2_f16 (float16_t * __a, float16x4x2_t val)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- float16x8x2_t temp;
+- temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv8hf (__o, temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv8hf (__o, temp.val[1], 1);
+- __builtin_aarch64_st2v4hf (__a, __o);
++ return (uint8x16_t) ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2_f32 (float32_t * __a, float32x2x2_t val)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- float32x4x2_t temp;
+- temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[1], 1);
+- __builtin_aarch64_st2v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
++ return (uint16x8_t) ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_s8 (int8_t * __a, int8x16x2_t val)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
+- __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
++ return (uint32x4_t) ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_p8 (poly8_t * __a, poly8x16x2_t val)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
+- __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
++ return (uint64x2_t) ((__a & __b) != __AARCH64_INT64_C (0));
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_s16 (int16_t * __a, int16x8x2_t val)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
+- __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
++ return ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_p16 (poly16_t * __a, poly16x8x2_t val)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
+- __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
++ return ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_s32 (int32_t * __a, int32x4x2_t val)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
+- __builtin_aarch64_st2v4si ((__builtin_aarch64_simd_si *) __a, __o);
++ return ((__a & __b) != 0);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_s64 (int64_t * __a, int64x2x2_t val)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
+- __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
++ return ((__a & __b) != __AARCH64_UINT64_C (0));
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_u8 (uint8_t * __a, uint8x16x2_t val)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstd_s64 (int64_t __a, int64_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
+- __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
++ return (__a & __b) ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_u16 (uint16_t * __a, uint16x8x2_t val)
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstd_u64 (uint64_t __a, uint64_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
+- __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
++ return (__a & __b) ? -1ll : 0ll;
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_u32 (uint32_t * __a, uint32x4x2_t val)
++/* vuqadd */
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqadd_s8 (int8x8_t __a, uint8x8_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
+- __builtin_aarch64_st2v4si ((__builtin_aarch64_simd_si *) __a, __o);
++ return __builtin_aarch64_suqaddv8qi_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_u64 (uint64_t * __a, uint64x2x2_t val)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqadd_s16 (int16x4_t __a, uint16x4_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
+- __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
++ return __builtin_aarch64_suqaddv4hi_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_f16 (float16_t * __a, float16x8x2_t val)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqadd_s32 (int32x2_t __a, uint32x2_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv8hf (__o, val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv8hf (__o, val.val[1], 1);
+- __builtin_aarch64_st2v8hf (__a, __o);
++ return __builtin_aarch64_suqaddv2si_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_f32 (float32_t * __a, float32x4x2_t val)
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqadd_s64 (int64x1_t __a, uint64x1_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[1], 1);
+- __builtin_aarch64_st2v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
++ return (int64x1_t) {__builtin_aarch64_suqadddi_ssu (__a[0], __b[0])};
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst2q_f64 (float64_t * __a, float64x2x2_t val)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqaddq_s8 (int8x16_t __a, uint8x16_t __b)
+ {
+- __builtin_aarch64_simd_oi __o;
+- __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[1], 1);
+- __builtin_aarch64_st2v2df ((__builtin_aarch64_simd_df *) __a, __o);
++ return __builtin_aarch64_suqaddv16qi_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void
+-vst3_s64 (int64_t * __a, int64x1x3_t val)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqaddq_s16 (int16x8_t __a, uint16x8_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- int64x2x3_t temp;
+- temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
+- temp.val[2] = vcombine_s64 (val.val[2], vcreate_s64 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
+- __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
++ return __builtin_aarch64_suqaddv8hi_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void
+-vst3_u64 (uint64_t * __a, uint64x1x3_t val)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqaddq_s32 (int32x4_t __a, uint32x4_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- uint64x2x3_t temp;
+- temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_u64 (val.val[2], vcreate_u64 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
+- __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
++ return __builtin_aarch64_suqaddv4si_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void
+-vst3_f64 (float64_t * __a, float64x1x3_t val)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqaddq_s64 (int64x2_t __a, uint64x2_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- float64x2x3_t temp;
+- temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_f64 (val.val[2], vcreate_f64 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[2], 2);
+- __builtin_aarch64_st3df ((__builtin_aarch64_simd_df *) __a, __o);
++ return __builtin_aarch64_suqaddv2di_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void
+-vst3_s8 (int8_t * __a, int8x8x3_t val)
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqaddb_s8 (int8_t __a, uint8_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- int8x16x3_t temp;
+- temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
+- temp.val[2] = vcombine_s8 (val.val[2], vcreate_s8 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
+- __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
++ return __builtin_aarch64_suqaddqi_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3_p8 (poly8_t * __a, poly8x8x3_t val)
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqaddh_s16 (int16_t __a, uint16_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- poly8x16x3_t temp;
+- temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_p8 (val.val[2], vcreate_p8 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
+- __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
++ return __builtin_aarch64_suqaddhi_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3_s16 (int16_t * __a, int16x4x3_t val)
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqadds_s32 (int32_t __a, uint32_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- int16x8x3_t temp;
+- temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
+- temp.val[2] = vcombine_s16 (val.val[2], vcreate_s16 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
+- __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
++ return __builtin_aarch64_suqaddsi_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3_p16 (poly16_t * __a, poly16x4x3_t val)
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuqaddd_s64 (int64_t __a, uint64_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- poly16x8x3_t temp;
+- temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_p16 (val.val[2], vcreate_p16 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
+- __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
++ return __builtin_aarch64_suqadddi_ssu (__a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3_s32 (int32_t * __a, int32x2x3_t val)
++#define __DEFINTERLEAVE(op, rettype, intype, funcsuffix, Q) \
++ __extension__ extern __inline rettype \
++ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
++ v ## op ## Q ## _ ## funcsuffix (intype a, intype b) \
++ { \
++ return (rettype) {v ## op ## 1 ## Q ## _ ## funcsuffix (a, b), \
++ v ## op ## 2 ## Q ## _ ## funcsuffix (a, b)}; \
++ }
++
++#define __INTERLEAVE_LIST(op) \
++ __DEFINTERLEAVE (op, float16x4x2_t, float16x4_t, f16,) \
++ __DEFINTERLEAVE (op, float32x2x2_t, float32x2_t, f32,) \
++ __DEFINTERLEAVE (op, poly8x8x2_t, poly8x8_t, p8,) \
++ __DEFINTERLEAVE (op, poly16x4x2_t, poly16x4_t, p16,) \
++ __DEFINTERLEAVE (op, int8x8x2_t, int8x8_t, s8,) \
++ __DEFINTERLEAVE (op, int16x4x2_t, int16x4_t, s16,) \
++ __DEFINTERLEAVE (op, int32x2x2_t, int32x2_t, s32,) \
++ __DEFINTERLEAVE (op, uint8x8x2_t, uint8x8_t, u8,) \
++ __DEFINTERLEAVE (op, uint16x4x2_t, uint16x4_t, u16,) \
++ __DEFINTERLEAVE (op, uint32x2x2_t, uint32x2_t, u32,) \
++ __DEFINTERLEAVE (op, float16x8x2_t, float16x8_t, f16, q) \
++ __DEFINTERLEAVE (op, float32x4x2_t, float32x4_t, f32, q) \
++ __DEFINTERLEAVE (op, poly8x16x2_t, poly8x16_t, p8, q) \
++ __DEFINTERLEAVE (op, poly16x8x2_t, poly16x8_t, p16, q) \
++ __DEFINTERLEAVE (op, int8x16x2_t, int8x16_t, s8, q) \
++ __DEFINTERLEAVE (op, int16x8x2_t, int16x8_t, s16, q) \
++ __DEFINTERLEAVE (op, int32x4x2_t, int32x4_t, s32, q) \
++ __DEFINTERLEAVE (op, uint8x16x2_t, uint8x16_t, u8, q) \
++ __DEFINTERLEAVE (op, uint16x8x2_t, uint16x8_t, u16, q) \
++ __DEFINTERLEAVE (op, uint32x4x2_t, uint32x4_t, u32, q)
++
++/* vuzp */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- int32x4x3_t temp;
+- temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
+- temp.val[2] = vcombine_s32 (val.val[2], vcreate_s32 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
+- __builtin_aarch64_st3v2si ((__builtin_aarch64_simd_si *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3_u8 (uint8_t * __a, uint8x8x3_t val)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- uint8x16x3_t temp;
+- temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_u8 (val.val[2], vcreate_u8 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
+- __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3_u16 (uint16_t * __a, uint16x4x3_t val)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- uint16x8x3_t temp;
+- temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_u16 (val.val[2], vcreate_u16 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
+- __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3_u32 (uint32_t * __a, uint32x2x3_t val)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- uint32x4x3_t temp;
+- temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_u32 (val.val[2], vcreate_u32 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
+- __builtin_aarch64_st3v2si ((__builtin_aarch64_simd_si *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3_f16 (float16_t * __a, float16x4x3_t val)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- float16x8x3_t temp;
+- temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_f16 (val.val[2], vcreate_f16 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[2], 2);
+- __builtin_aarch64_st3v4hf ((__builtin_aarch64_simd_hf *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3_f32 (float32_t * __a, float32x2x3_t val)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- float32x4x3_t temp;
+- temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_f32 (val.val[2], vcreate_f32 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[2], 2);
+- __builtin_aarch64_st3v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_s8 (int8_t * __a, int8x16x3_t val)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
+- __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_p8 (poly8_t * __a, poly8x16x3_t val)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
+- __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_s16 (int16_t * __a, int16x8x3_t val)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
+- __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_p16 (poly16_t * __a, poly16x8x3_t val)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
+- __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_s32 (int32_t * __a, int32x4x3_t val)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
+- __builtin_aarch64_st3v4si ((__builtin_aarch64_simd_si *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_s64 (int64_t * __a, int64x2x3_t val)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
+- __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_u8 (uint8_t * __a, uint8x16x3_t val)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
+- __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_u16 (uint16_t * __a, uint16x8x3_t val)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
+- __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_u32 (uint32_t * __a, uint32x4x3_t val)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_p16 (poly16x8_t __a, poly16x8_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
+- __builtin_aarch64_st3v4si ((__builtin_aarch64_simd_si *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_u64 (uint64_t * __a, uint64x2x3_t val)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
+- __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_f16 (float16_t * __a, float16x8x3_t val)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[2], 2);
+- __builtin_aarch64_st3v8hf ((__builtin_aarch64_simd_hf *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_f32 (float32_t * __a, float32x4x3_t val)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[2], 2);
+- __builtin_aarch64_st3v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst3q_f64 (float64_t * __a, float64x2x3_t val)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- __builtin_aarch64_simd_ci __o;
+- __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[2], 2);
+- __builtin_aarch64_st3v2df ((__builtin_aarch64_simd_df *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline void
+-vst4_s64 (int64_t * __a, int64x1x4_t val)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- int64x2x4_t temp;
+- temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
+- temp.val[2] = vcombine_s64 (val.val[2], vcreate_s64 (__AARCH64_INT64_C (0)));
+- temp.val[3] = vcombine_s64 (val.val[3], vcreate_s64 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[3], 3);
+- __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
++#endif
+ }
+
+-__extension__ static __inline void
+-vst4_u64 (uint64_t * __a, uint64x1x4_t val)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- uint64x2x4_t temp;
+- temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_u64 (val.val[2], vcreate_u64 (__AARCH64_UINT64_C (0)));
+- temp.val[3] = vcombine_u64 (val.val[3], vcreate_u64 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[3], 3);
+- __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
++#endif
+ }
+
+-__extension__ static __inline void
+-vst4_f64 (float64_t * __a, float64x1x4_t val)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- float64x2x4_t temp;
+- temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_f64 (val.val[2], vcreate_f64 (__AARCH64_UINT64_C (0)));
+- temp.val[3] = vcombine_f64 (val.val[3], vcreate_f64 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[3], 3);
+- __builtin_aarch64_st4df ((__builtin_aarch64_simd_df *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
++#endif
+ }
+
+-__extension__ static __inline void
+-vst4_s8 (int8_t * __a, int8x8x4_t val)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp1q_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- int8x16x4_t temp;
+- temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
+- temp.val[2] = vcombine_s8 (val.val[2], vcreate_s8 (__AARCH64_INT64_C (0)));
+- temp.val[3] = vcombine_s8 (val.val[3], vcreate_s8 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
+- __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++#endif
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_f16 (float16x4_t __a, float16x4_t __b)
++{
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4_p8 (poly8_t * __a, poly8x8x4_t val)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- poly8x16x4_t temp;
+- temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_p8 (val.val[2], vcreate_p8 (__AARCH64_UINT64_C (0)));
+- temp.val[3] = vcombine_p8 (val.val[3], vcreate_p8 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
+- __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4_s16 (int16_t * __a, int16x4x4_t val)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- int16x8x4_t temp;
+- temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
+- temp.val[2] = vcombine_s16 (val.val[2], vcreate_s16 (__AARCH64_INT64_C (0)));
+- temp.val[3] = vcombine_s16 (val.val[3], vcreate_s16 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
+- __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4_p16 (poly16_t * __a, poly16x4x4_t val)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- poly16x8x4_t temp;
+- temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_p16 (val.val[2], vcreate_p16 (__AARCH64_UINT64_C (0)));
+- temp.val[3] = vcombine_p16 (val.val[3], vcreate_p16 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
+- __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4_s32 (int32_t * __a, int32x2x4_t val)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- int32x4x4_t temp;
+- temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
+- temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
+- temp.val[2] = vcombine_s32 (val.val[2], vcreate_s32 (__AARCH64_INT64_C (0)));
+- temp.val[3] = vcombine_s32 (val.val[3], vcreate_s32 (__AARCH64_INT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[3], 3);
+- __builtin_aarch64_st4v2si ((__builtin_aarch64_simd_si *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4_u8 (uint8_t * __a, uint8x8x4_t val)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- uint8x16x4_t temp;
+- temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_u8 (val.val[2], vcreate_u8 (__AARCH64_UINT64_C (0)));
+- temp.val[3] = vcombine_u8 (val.val[3], vcreate_u8 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
+- __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4_u16 (uint16_t * __a, uint16x4x4_t val)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- uint16x8x4_t temp;
+- temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_u16 (val.val[2], vcreate_u16 (__AARCH64_UINT64_C (0)));
+- temp.val[3] = vcombine_u16 (val.val[3], vcreate_u16 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
+- __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4_u32 (uint32_t * __a, uint32x2x4_t val)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- uint32x4x4_t temp;
+- temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_u32 (val.val[2], vcreate_u32 (__AARCH64_UINT64_C (0)));
+- temp.val[3] = vcombine_u32 (val.val[3], vcreate_u32 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[3], 3);
+- __builtin_aarch64_st4v2si ((__builtin_aarch64_simd_si *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4_f16 (float16_t * __a, float16x4x4_t val)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- float16x8x4_t temp;
+- temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_f16 (val.val[2], vcreate_f16 (__AARCH64_UINT64_C (0)));
+- temp.val[3] = vcombine_f16 (val.val[3], vcreate_f16 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[3], 3);
+- __builtin_aarch64_st4v4hf ((__builtin_aarch64_simd_hf *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4_f32 (float32_t * __a, float32x2x4_t val)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- float32x4x4_t temp;
+- temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
+- temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
+- temp.val[2] = vcombine_f32 (val.val[2], vcreate_f32 (__AARCH64_UINT64_C (0)));
+- temp.val[3] = vcombine_f32 (val.val[3], vcreate_f32 (__AARCH64_UINT64_C (0)));
+- __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[3], 3);
+- __builtin_aarch64_st4v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_s8 (int8_t * __a, int8x16x4_t val)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
+- __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_p8 (poly8_t * __a, poly8x16x4_t val)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
+- __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_s16 (int16_t * __a, int16x8x4_t val)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
+- __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_p16 (poly16_t * __a, poly16x8x4_t val)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
+- __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_s32 (int32_t * __a, int32x4x4_t val)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_p16 (poly16x8_t __a, poly16x8_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[3], 3);
+- __builtin_aarch64_st4v4si ((__builtin_aarch64_simd_si *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_s64 (int64_t * __a, int64x2x4_t val)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_s8 (int8x16_t __a, int8x16_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[3], 3);
+- __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_u8 (uint8_t * __a, uint8x16x4_t val)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_s16 (int16x8_t __a, int16x8_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
+- __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_u16 (uint16_t * __a, uint16x8x4_t val)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_s32 (int32x4_t __a, int32x4_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
+- __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_u32 (uint32_t * __a, uint32x4x4_t val)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_s64 (int64x2_t __a, int64x2_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[3], 3);
+- __builtin_aarch64_st4v4si ((__builtin_aarch64_simd_si *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_u64 (uint64_t * __a, uint64x2x4_t val)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[3], 3);
+- __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_f16 (float16_t * __a, float16x8x4_t val)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[3], 3);
+- __builtin_aarch64_st4v8hf ((__builtin_aarch64_simd_hf *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_f32 (float32_t * __a, float32x4x4_t val)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[3], 3);
+- __builtin_aarch64_st4v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
++#endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vst4q_f64 (float64_t * __a, float64x2x4_t val)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp2q_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+- __builtin_aarch64_simd_xi __o;
+- __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[0], 0);
+- __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[1], 1);
+- __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[2], 2);
+- __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[3], 3);
+- __builtin_aarch64_st4v2df ((__builtin_aarch64_simd_df *) __a, __o);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
++#endif
+ }
+
+-/* vsub */
++__INTERLEAVE_LIST (uzp)
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vsubd_s64 (int64_t __a, int64_t __b)
++/* vzip */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- return __a - __b;
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
++#endif
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vsubd_u64 (uint64_t __a, uint64_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_f32 (float32x2_t __a, float32x2_t __b)
+ {
+- return __a - __b;
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++#endif
+ }
+
+-/* vtbx1 */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtbx1_s8 (int8x8_t __r, int8x8_t __tab, int8x8_t __idx)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+- uint8x8_t __mask = vclt_u8 (vreinterpret_u8_s8 (__idx),
+- vmov_n_u8 (8));
+- int8x8_t __tbl = vtbl1_s8 (__tab, __idx);
+-
+- return vbsl_s8 (__mask, __tbl, __r);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
++#endif
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtbx1_u8 (uint8x8_t __r, uint8x8_t __tab, uint8x8_t __idx)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+- uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (8));
+- uint8x8_t __tbl = vtbl1_u8 (__tab, __idx);
+-
+- return vbsl_u8 (__mask, __tbl, __r);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
++#endif
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtbx1_p8 (poly8x8_t __r, poly8x8_t __tab, uint8x8_t __idx)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_s8 (int8x8_t __a, int8x8_t __b)
+ {
+- uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (8));
+- poly8x8_t __tbl = vtbl1_p8 (__tab, __idx);
+-
+- return vbsl_p8 (__mask, __tbl, __r);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
++#endif
+ }
+
+-/* vtbx3 */
+-
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtbx3_s8 (int8x8_t __r, int8x8x3_t __tab, int8x8_t __idx)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_s16 (int16x4_t __a, int16x4_t __b)
+ {
+- uint8x8_t __mask = vclt_u8 (vreinterpret_u8_s8 (__idx),
+- vmov_n_u8 (24));
+- int8x8_t __tbl = vtbl3_s8 (__tab, __idx);
+-
+- return vbsl_s8 (__mask, __tbl, __r);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
++#endif
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtbx3_u8 (uint8x8_t __r, uint8x8x3_t __tab, uint8x8_t __idx)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_s32 (int32x2_t __a, int32x2_t __b)
+ {
+- uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (24));
+- uint8x8_t __tbl = vtbl3_u8 (__tab, __idx);
+-
+- return vbsl_u8 (__mask, __tbl, __r);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++#endif
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtbx3_p8 (poly8x8_t __r, poly8x8x3_t __tab, uint8x8_t __idx)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+- uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (24));
+- poly8x8_t __tbl = vtbl3_p8 (__tab, __idx);
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
++#endif
++}
+
+- return vbsl_p8 (__mask, __tbl, __r);
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_u16 (uint16x4_t __a, uint16x4_t __b)
++{
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
++#endif
+ }
+
+-/* vtbx4 */
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1_u32 (uint32x2_t __a, uint32x2_t __b)
++{
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++#endif
++}
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtbx4_s8 (int8x8_t __r, int8x8x4_t __tab, int8x8_t __idx)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- int8x8_t result;
+- int8x16x2_t temp;
+- __builtin_aarch64_simd_oi __o;
+- temp.val[0] = vcombine_s8 (__tab.val[0], __tab.val[1]);
+- temp.val[1] = vcombine_s8 (__tab.val[2], __tab.val[3]);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[1], 1);
+- result = __builtin_aarch64_tbx4v8qi (__r, __o, __idx);
+- return result;
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b,
++ (uint16x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
++#else
++ return __builtin_shuffle (__a, __b,
++ (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
++#endif
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtbx4_u8 (uint8x8_t __r, uint8x8x4_t __tab, uint8x8_t __idx)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_f32 (float32x4_t __a, float32x4_t __b)
+ {
+- uint8x8_t result;
+- uint8x16x2_t temp;
+- __builtin_aarch64_simd_oi __o;
+- temp.val[0] = vcombine_u8 (__tab.val[0], __tab.val[1]);
+- temp.val[1] = vcombine_u8 (__tab.val[2], __tab.val[3]);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[1], 1);
+- result = (uint8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)__r, __o,
+- (int8x8_t)__idx);
+- return result;
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
++#else
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
++#endif
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtbx4_p8 (poly8x8_t __r, poly8x8x4_t __tab, uint8x8_t __idx)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_f64 (float64x2_t __a, float64x2_t __b)
+ {
+- poly8x8_t result;
+- poly8x16x2_t temp;
+- __builtin_aarch64_simd_oi __o;
+- temp.val[0] = vcombine_p8 (__tab.val[0], __tab.val[1]);
+- temp.val[1] = vcombine_p8 (__tab.val[2], __tab.val[3]);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[0], 0);
+- __o = __builtin_aarch64_set_qregoiv16qi (__o,
+- (int8x16_t) temp.val[1], 1);
+- result = (poly8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)__r, __o,
+- (int8x8_t)__idx);
+- return result;
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++#else
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++#endif
+ }
+
+-/* vtrn */
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_p8 (poly8x16_t __a, poly8x16_t __b)
++{
++#ifdef __AARCH64EB__
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
++#else
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
++#endif
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vtrn1_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_p16 (poly16x8_t __a, poly16x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++ return __builtin_shuffle (__a, __b, (uint16x8_t)
++ {12, 4, 13, 5, 14, 6, 15, 7});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+ #endif
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtrn1_p8 (poly8x8_t __a, poly8x8_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
+ #else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
+ #endif
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vtrn1_p16 (poly16x4_t __a, poly16x4_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
++ return __builtin_shuffle (__a, __b, (uint16x8_t)
++ {12, 4, 13, 5, 14, 6, 15, 7});
+ #else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+ #endif
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtrn1_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
+ #else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
+ #endif
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vtrn1_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+ #else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+ #endif
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vtrn1_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
+ #endif
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtrn1_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++ return __builtin_shuffle (__a, __b, (uint16x8_t)
++ {12, 4, 13, 5, 14, 6, 15, 7});
+ #else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+ #endif
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vtrn1_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
+ #else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
+ #endif
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vtrn1_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip1q_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+ #endif
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vtrn1q_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_f16 (float16x4_t __a, float16x4_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+ #endif
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vtrn1q_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+ #else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+ #endif
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vtrn1q_p8 (poly8x16_t __a, poly8x16_t __b)
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+ #else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+ #endif
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vtrn1q_p16 (poly16x8_t __a, poly16x8_t __b)
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+ #else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+ #endif
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vtrn1q_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+ #else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+ #endif
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vtrn1q_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+ #else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+ #endif
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vtrn1q_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+ #endif
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vtrn1q_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+ #else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++ return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+ #endif
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vtrn1q_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+ #else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
++ return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+ #endif
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vtrn1q_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+ #else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
++ return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+ #endif
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vtrn1q_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_f16 (float16x8_t __a, float16x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
++ return __builtin_shuffle (__a, __b,
++ (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
++ return __builtin_shuffle (__a, __b,
++ (uint16x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+ #endif
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vtrn1q_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
+ #else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
+ #endif
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vtrn2_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline float64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_f64 (float64x2_t __a, float64x2_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+ #endif
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vtrn2_p8 (poly8x8_t __a, poly8x8_t __b)
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
+ #else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
+ #endif
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vtrn2_p16 (poly16x4_t __a, poly16x4_t __b)
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_p16 (poly16x8_t __a, poly16x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+ #else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
++ return __builtin_shuffle (__a, __b, (uint16x8_t)
++ {4, 12, 5, 13, 6, 14, 7, 15});
+ #endif
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vtrn2_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
+ #else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
+ #endif
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vtrn2_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+ #else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
++ return __builtin_shuffle (__a, __b, (uint16x8_t)
++ {4, 12, 5, 13, 6, 14, 7, 15});
+ #endif
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vtrn2_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
+ #endif
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtrn2_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+ #else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
++ return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+ #endif
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vtrn2_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
+ #else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
++ return __builtin_shuffle (__a, __b, (uint8x16_t)
++ {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
+ #endif
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vtrn2_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
++ return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
++ return __builtin_shuffle (__a, __b, (uint16x8_t)
++ {4, 12, 5, 13, 6, 14, 7, 15});
+ #endif
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vtrn2q_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ #ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
+ #else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
++ return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
+ #endif
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vtrn2q_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip2q_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ #ifdef __AARCH64EB__
+ return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+@@ -24455,1319 +30368,1184 @@ vtrn2q_f64 (float64x2_t __a, float64x2_t __b)
+ #endif
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vtrn2q_p8 (poly8x16_t __a, poly8x16_t __b)
++__INTERLEAVE_LIST (zip)
++
++#undef __INTERLEAVE_LIST
++#undef __DEFINTERLEAVE
++
++/* End of optimal implementations in approved order. */
++
++#pragma GCC pop_options
++
++/* ARMv8.2-A FP16 intrinsics. */
++
++#include "arm_fp16.h"
++
++#pragma GCC push_options
++#pragma GCC target ("arch=armv8.2-a+fp16")
++
++/* ARMv8.2-A FP16 one operand vector intrinsics. */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabs_f16 (float16x4_t __a)
++{
++ return __builtin_aarch64_absv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabsq_f16 (float16x8_t __a)
++{
++ return __builtin_aarch64_absv8hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_f16 (float16x4_t __a)
++{
++ return __builtin_aarch64_cmeqv4hf_uss (__a, vdup_n_f16 (0.0f));
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_f16 (float16x8_t __a)
++{
++ return __builtin_aarch64_cmeqv8hf_uss (__a, vdupq_n_f16 (0.0f));
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgez_f16 (float16x4_t __a)
++{
++ return __builtin_aarch64_cmgev4hf_uss (__a, vdup_n_f16 (0.0f));
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezq_f16 (float16x8_t __a)
++{
++ return __builtin_aarch64_cmgev8hf_uss (__a, vdupq_n_f16 (0.0f));
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtz_f16 (float16x4_t __a)
++{
++ return __builtin_aarch64_cmgtv4hf_uss (__a, vdup_n_f16 (0.0f));
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzq_f16 (float16x8_t __a)
++{
++ return __builtin_aarch64_cmgtv8hf_uss (__a, vdupq_n_f16 (0.0f));
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclez_f16 (float16x4_t __a)
++{
++ return __builtin_aarch64_cmlev4hf_uss (__a, vdup_n_f16 (0.0f));
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezq_f16 (float16x8_t __a)
++{
++ return __builtin_aarch64_cmlev8hf_uss (__a, vdupq_n_f16 (0.0f));
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltz_f16 (float16x4_t __a)
++{
++ return __builtin_aarch64_cmltv4hf_uss (__a, vdup_n_f16 (0.0f));
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzq_f16 (float16x8_t __a)
++{
++ return __builtin_aarch64_cmltv8hf_uss (__a, vdupq_n_f16 (0.0f));
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f16_s16 (int16x4_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
+-#endif
++ return __builtin_aarch64_floatv4hiv4hf (__a);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vtrn2q_p16 (poly16x8_t __a, poly16x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_f16_s16 (int16x8_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+-#endif
++ return __builtin_aarch64_floatv8hiv8hf (__a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vtrn2q_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f16_u16 (uint16x4_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
+-#endif
++ return __builtin_aarch64_floatunsv4hiv4hf ((int16x4_t) __a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vtrn2q_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_f16_u16 (uint16x8_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+-#endif
++ return __builtin_aarch64_floatunsv8hiv8hf ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vtrn2q_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_s16_f16 (float16x4_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
+-#endif
++ return __builtin_aarch64_lbtruncv4hfv4hi (__a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vtrn2q_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_s16_f16 (float16x8_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+-#endif
++ return __builtin_aarch64_lbtruncv8hfv8hi (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vtrn2q_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_u16_f16 (float16x4_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
+-#endif
++ return __builtin_aarch64_lbtruncuv4hfv4hi_us (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vtrn2q_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_u16_f16 (float16x8_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+-#endif
++ return __builtin_aarch64_lbtruncuv8hfv8hi_us (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vtrn2q_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvta_s16_f16 (float16x4_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
+-#endif
++ return __builtin_aarch64_lroundv4hfv4hi (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vtrn2q_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtaq_s16_f16 (float16x8_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+-#endif
++ return __builtin_aarch64_lroundv8hfv8hi (__a);
+ }
+
+-__extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
+-vtrn_f32 (float32x2_t a, float32x2_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvta_u16_f16 (float16x4_t __a)
+ {
+- return (float32x2x2_t) {vtrn1_f32 (a, b), vtrn2_f32 (a, b)};
++ return __builtin_aarch64_lrounduv4hfv4hi_us (__a);
+ }
+
+-__extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
+-vtrn_p8 (poly8x8_t a, poly8x8_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtaq_u16_f16 (float16x8_t __a)
+ {
+- return (poly8x8x2_t) {vtrn1_p8 (a, b), vtrn2_p8 (a, b)};
++ return __builtin_aarch64_lrounduv8hfv8hi_us (__a);
+ }
+
+-__extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
+-vtrn_p16 (poly16x4_t a, poly16x4_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtm_s16_f16 (float16x4_t __a)
+ {
+- return (poly16x4x2_t) {vtrn1_p16 (a, b), vtrn2_p16 (a, b)};
++ return __builtin_aarch64_lfloorv4hfv4hi (__a);
+ }
+
+-__extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
+-vtrn_s8 (int8x8_t a, int8x8_t b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmq_s16_f16 (float16x8_t __a)
+ {
+- return (int8x8x2_t) {vtrn1_s8 (a, b), vtrn2_s8 (a, b)};
++ return __builtin_aarch64_lfloorv8hfv8hi (__a);
+ }
+
+-__extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
+-vtrn_s16 (int16x4_t a, int16x4_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtm_u16_f16 (float16x4_t __a)
+ {
+- return (int16x4x2_t) {vtrn1_s16 (a, b), vtrn2_s16 (a, b)};
++ return __builtin_aarch64_lflooruv4hfv4hi_us (__a);
+ }
+
+-__extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
+-vtrn_s32 (int32x2_t a, int32x2_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmq_u16_f16 (float16x8_t __a)
+ {
+- return (int32x2x2_t) {vtrn1_s32 (a, b), vtrn2_s32 (a, b)};
++ return __builtin_aarch64_lflooruv8hfv8hi_us (__a);
+ }
+
+-__extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
+-vtrn_u8 (uint8x8_t a, uint8x8_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtn_s16_f16 (float16x4_t __a)
+ {
+- return (uint8x8x2_t) {vtrn1_u8 (a, b), vtrn2_u8 (a, b)};
++ return __builtin_aarch64_lfrintnv4hfv4hi (__a);
+ }
+
+-__extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
+-vtrn_u16 (uint16x4_t a, uint16x4_t b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnq_s16_f16 (float16x8_t __a)
+ {
+- return (uint16x4x2_t) {vtrn1_u16 (a, b), vtrn2_u16 (a, b)};
++ return __builtin_aarch64_lfrintnv8hfv8hi (__a);
+ }
+
+-__extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
+-vtrn_u32 (uint32x2_t a, uint32x2_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtn_u16_f16 (float16x4_t __a)
+ {
+- return (uint32x2x2_t) {vtrn1_u32 (a, b), vtrn2_u32 (a, b)};
++ return __builtin_aarch64_lfrintnuv4hfv4hi_us (__a);
+ }
+
+-__extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
+-vtrnq_f32 (float32x4_t a, float32x4_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnq_u16_f16 (float16x8_t __a)
+ {
+- return (float32x4x2_t) {vtrn1q_f32 (a, b), vtrn2q_f32 (a, b)};
++ return __builtin_aarch64_lfrintnuv8hfv8hi_us (__a);
+ }
+
+-__extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
+-vtrnq_p8 (poly8x16_t a, poly8x16_t b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtp_s16_f16 (float16x4_t __a)
+ {
+- return (poly8x16x2_t) {vtrn1q_p8 (a, b), vtrn2q_p8 (a, b)};
++ return __builtin_aarch64_lceilv4hfv4hi (__a);
+ }
+
+-__extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
+-vtrnq_p16 (poly16x8_t a, poly16x8_t b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpq_s16_f16 (float16x8_t __a)
+ {
+- return (poly16x8x2_t) {vtrn1q_p16 (a, b), vtrn2q_p16 (a, b)};
++ return __builtin_aarch64_lceilv8hfv8hi (__a);
+ }
+
+-__extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
+-vtrnq_s8 (int8x16_t a, int8x16_t b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtp_u16_f16 (float16x4_t __a)
+ {
+- return (int8x16x2_t) {vtrn1q_s8 (a, b), vtrn2q_s8 (a, b)};
++ return __builtin_aarch64_lceiluv4hfv4hi_us (__a);
+ }
+
+-__extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
+-vtrnq_s16 (int16x8_t a, int16x8_t b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpq_u16_f16 (float16x8_t __a)
+ {
+- return (int16x8x2_t) {vtrn1q_s16 (a, b), vtrn2q_s16 (a, b)};
++ return __builtin_aarch64_lceiluv8hfv8hi_us (__a);
+ }
+
+-__extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
+-vtrnq_s32 (int32x4_t a, int32x4_t b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vneg_f16 (float16x4_t __a)
+ {
+- return (int32x4x2_t) {vtrn1q_s32 (a, b), vtrn2q_s32 (a, b)};
++ return -__a;
+ }
+
+-__extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
+-vtrnq_u8 (uint8x16_t a, uint8x16_t b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vnegq_f16 (float16x8_t __a)
+ {
+- return (uint8x16x2_t) {vtrn1q_u8 (a, b), vtrn2q_u8 (a, b)};
++ return -__a;
+ }
+
+-__extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
+-vtrnq_u16 (uint16x8_t a, uint16x8_t b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpe_f16 (float16x4_t __a)
+ {
+- return (uint16x8x2_t) {vtrn1q_u16 (a, b), vtrn2q_u16 (a, b)};
++ return __builtin_aarch64_frecpev4hf (__a);
+ }
+
+-__extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
+-vtrnq_u32 (uint32x4_t a, uint32x4_t b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpeq_f16 (float16x8_t __a)
+ {
+- return (uint32x4x2_t) {vtrn1q_u32 (a, b), vtrn2q_u32 (a, b)};
++ return __builtin_aarch64_frecpev8hf (__a);
+ }
+
+-/* vtst */
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrnd_f16 (float16x4_t __a)
++{
++ return __builtin_aarch64_btruncv4hf (__a);
++}
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtst_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndq_f16 (float16x8_t __a)
+ {
+- return (uint8x8_t) ((__a & __b) != 0);
++ return __builtin_aarch64_btruncv8hf (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vtst_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrnda_f16 (float16x4_t __a)
+ {
+- return (uint16x4_t) ((__a & __b) != 0);
++ return __builtin_aarch64_roundv4hf (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vtst_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndaq_f16 (float16x8_t __a)
+ {
+- return (uint32x2_t) ((__a & __b) != 0);
++ return __builtin_aarch64_roundv8hf (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vtst_s64 (int64x1_t __a, int64x1_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndi_f16 (float16x4_t __a)
+ {
+- return (uint64x1_t) ((__a & __b) != __AARCH64_INT64_C (0));
++ return __builtin_aarch64_nearbyintv4hf (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vtst_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndiq_f16 (float16x8_t __a)
+ {
+- return ((__a & __b) != 0);
++ return __builtin_aarch64_nearbyintv8hf (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vtst_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndm_f16 (float16x4_t __a)
+ {
+- return ((__a & __b) != 0);
++ return __builtin_aarch64_floorv4hf (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vtst_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndmq_f16 (float16x8_t __a)
+ {
+- return ((__a & __b) != 0);
++ return __builtin_aarch64_floorv8hf (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vtst_u64 (uint64x1_t __a, uint64x1_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndn_f16 (float16x4_t __a)
+ {
+- return ((__a & __b) != __AARCH64_UINT64_C (0));
++ return __builtin_aarch64_frintnv4hf (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vtstq_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndnq_f16 (float16x8_t __a)
+ {
+- return (uint8x16_t) ((__a & __b) != 0);
++ return __builtin_aarch64_frintnv8hf (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vtstq_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndp_f16 (float16x4_t __a)
+ {
+- return (uint16x8_t) ((__a & __b) != 0);
++ return __builtin_aarch64_ceilv4hf (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vtstq_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndpq_f16 (float16x8_t __a)
+ {
+- return (uint32x4_t) ((__a & __b) != 0);
++ return __builtin_aarch64_ceilv8hf (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vtstq_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndx_f16 (float16x4_t __a)
+ {
+- return (uint64x2_t) ((__a & __b) != __AARCH64_INT64_C (0));
++ return __builtin_aarch64_rintv4hf (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vtstq_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndxq_f16 (float16x8_t __a)
+ {
+- return ((__a & __b) != 0);
++ return __builtin_aarch64_rintv8hf (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vtstq_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrte_f16 (float16x4_t a)
+ {
+- return ((__a & __b) != 0);
++ return __builtin_aarch64_rsqrtev4hf (a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vtstq_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrteq_f16 (float16x8_t a)
+ {
+- return ((__a & __b) != 0);
++ return __builtin_aarch64_rsqrtev8hf (a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vtstq_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqrt_f16 (float16x4_t a)
+ {
+- return ((__a & __b) != __AARCH64_UINT64_C (0));
++ return __builtin_aarch64_sqrtv4hf (a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vtstd_s64 (int64_t __a, int64_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsqrtq_f16 (float16x8_t a)
+ {
+- return (__a & __b) ? -1ll : 0ll;
++ return __builtin_aarch64_sqrtv8hf (a);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+-vtstd_u64 (uint64_t __a, uint64_t __b)
++/* ARMv8.2-A FP16 two operands vector intrinsics. */
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vadd_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- return (__a & __b) ? -1ll : 0ll;
++ return __a + __b;
+ }
+
+-/* vuqadd */
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __a + __b;
++}
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vuqadd_s8 (int8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabd_f16 (float16x4_t a, float16x4_t b)
+ {
+- return __builtin_aarch64_suqaddv8qi_ssu (__a, __b);
++ return __builtin_aarch64_fabdv4hf (a, b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vuqadd_s16 (int16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabdq_f16 (float16x8_t a, float16x8_t b)
+ {
+- return __builtin_aarch64_suqaddv4hi_ssu (__a, __b);
++ return __builtin_aarch64_fabdv8hf (a, b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vuqadd_s32 (int32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcage_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- return __builtin_aarch64_suqaddv2si_ssu (__a, __b);
++ return __builtin_aarch64_facgev4hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+-vuqadd_s64 (int64x1_t __a, uint64x1_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcageq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- return (int64x1_t) {__builtin_aarch64_suqadddi_ssu (__a[0], __b[0])};
++ return __builtin_aarch64_facgev8hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vuqaddq_s8 (int8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagt_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- return __builtin_aarch64_suqaddv16qi_ssu (__a, __b);
++ return __builtin_aarch64_facgtv4hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vuqaddq_s16 (int16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagtq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- return __builtin_aarch64_suqaddv8hi_ssu (__a, __b);
++ return __builtin_aarch64_facgtv8hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vuqaddq_s32 (int32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcale_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- return __builtin_aarch64_suqaddv4si_ssu (__a, __b);
++ return __builtin_aarch64_faclev4hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vuqaddq_s64 (int64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaleq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- return __builtin_aarch64_suqaddv2di_ssu (__a, __b);
++ return __builtin_aarch64_faclev8hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
+-vuqaddb_s8 (int8_t __a, uint8_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcalt_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- return __builtin_aarch64_suqaddqi_ssu (__a, __b);
++ return __builtin_aarch64_facltv4hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+-vuqaddh_s16 (int16_t __a, uint16_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaltq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- return __builtin_aarch64_suqaddhi_ssu (__a, __b);
++ return __builtin_aarch64_facltv8hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+-vuqadds_s32 (int32_t __a, uint32_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_f16 (float16x4_t __a, float16x4_t __b)
+ {
+- return __builtin_aarch64_suqaddsi_ssu (__a, __b);
++ return __builtin_aarch64_cmeqv4hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+-vuqaddd_s64 (int64_t __a, uint64_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+- return __builtin_aarch64_suqadddi_ssu (__a, __b);
++ return __builtin_aarch64_cmeqv8hf_uss (__a, __b);
+ }
+
+-#define __DEFINTERLEAVE(op, rettype, intype, funcsuffix, Q) \
+- __extension__ static __inline rettype \
+- __attribute__ ((__always_inline__)) \
+- v ## op ## Q ## _ ## funcsuffix (intype a, intype b) \
+- { \
+- return (rettype) {v ## op ## 1 ## Q ## _ ## funcsuffix (a, b), \
+- v ## op ## 2 ## Q ## _ ## funcsuffix (a, b)}; \
+- }
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_aarch64_cmgev4hf_uss (__a, __b);
++}
+
+-#define __INTERLEAVE_LIST(op) \
+- __DEFINTERLEAVE (op, float32x2x2_t, float32x2_t, f32,) \
+- __DEFINTERLEAVE (op, poly8x8x2_t, poly8x8_t, p8,) \
+- __DEFINTERLEAVE (op, poly16x4x2_t, poly16x4_t, p16,) \
+- __DEFINTERLEAVE (op, int8x8x2_t, int8x8_t, s8,) \
+- __DEFINTERLEAVE (op, int16x4x2_t, int16x4_t, s16,) \
+- __DEFINTERLEAVE (op, int32x2x2_t, int32x2_t, s32,) \
+- __DEFINTERLEAVE (op, uint8x8x2_t, uint8x8_t, u8,) \
+- __DEFINTERLEAVE (op, uint16x4x2_t, uint16x4_t, u16,) \
+- __DEFINTERLEAVE (op, uint32x2x2_t, uint32x2_t, u32,) \
+- __DEFINTERLEAVE (op, float32x4x2_t, float32x4_t, f32, q) \
+- __DEFINTERLEAVE (op, poly8x16x2_t, poly8x16_t, p8, q) \
+- __DEFINTERLEAVE (op, poly16x8x2_t, poly16x8_t, p16, q) \
+- __DEFINTERLEAVE (op, int8x16x2_t, int8x16_t, s8, q) \
+- __DEFINTERLEAVE (op, int16x8x2_t, int16x8_t, s16, q) \
+- __DEFINTERLEAVE (op, int32x4x2_t, int32x4_t, s32, q) \
+- __DEFINTERLEAVE (op, uint8x16x2_t, uint8x16_t, u8, q) \
+- __DEFINTERLEAVE (op, uint16x8x2_t, uint16x8_t, u16, q) \
+- __DEFINTERLEAVE (op, uint32x4x2_t, uint32x4_t, u32, q)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_aarch64_cmgev8hf_uss (__a, __b);
++}
+
+-/* vuzp */
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_aarch64_cmgtv4hf_uss (__a, __b);
++}
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vuzp1_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+-#endif
++ return __builtin_aarch64_cmgtv8hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vuzp1_p8 (poly8x8_t __a, poly8x8_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+-#endif
++ return __builtin_aarch64_cmlev4hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vuzp1_p16 (poly16x4_t __a, poly16x4_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
+-#endif
++ return __builtin_aarch64_cmlev8hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vuzp1_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+-#endif
++ return __builtin_aarch64_cmltv4hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vuzp1_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
+-#endif
++ return __builtin_aarch64_cmltv8hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vuzp1_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_f16_s16 (int16x4_t __a, const int __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+-#endif
++ return __builtin_aarch64_scvtfv4hi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vuzp1_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_f16_s16 (int16x8_t __a, const int __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+-#endif
++ return __builtin_aarch64_scvtfv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vuzp1_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_f16_u16 (uint16x4_t __a, const int __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
+-#endif
++ return __builtin_aarch64_ucvtfv4hi_sus (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_f16_u16 (uint16x8_t __a, const int __b)
++{
++ return __builtin_aarch64_ucvtfv8hi_sus (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vuzp1_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_s16_f16 (float16x4_t __a, const int __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+-#endif
++ return __builtin_aarch64_fcvtzsv4hf (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vuzp1q_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_s16_f16 (float16x8_t __a, const int __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
+-#endif
++ return __builtin_aarch64_fcvtzsv8hf (__a, __b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vuzp1q_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_u16_f16 (float16x4_t __a, const int __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+-#endif
++ return __builtin_aarch64_fcvtzuv4hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vuzp1q_p8 (poly8x16_t __a, poly8x16_t __b)
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_u16_f16 (float16x8_t __a, const int __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
+-#endif
++ return __builtin_aarch64_fcvtzuv8hf_uss (__a, __b);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vuzp1q_p16 (poly16x8_t __a, poly16x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdiv_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+-#endif
++ return __a / __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vuzp1q_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdivq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
+-#endif
++ return __a / __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vuzp1q_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+-#endif
++ return __builtin_aarch64_smax_nanv4hf (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vuzp1q_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
+-#endif
++ return __builtin_aarch64_smax_nanv8hf (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vuzp1q_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnm_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+-#endif
++ return __builtin_aarch64_fmaxv4hf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vuzp1q_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
+-#endif
++ return __builtin_aarch64_fmaxv8hf (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vuzp1q_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+-#endif
++ return __builtin_aarch64_smin_nanv4hf (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vuzp1q_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
+-#endif
++ return __builtin_aarch64_smin_nanv8hf (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vuzp1q_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnm_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+-#endif
++ return __builtin_aarch64_fminv4hf (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vuzp2_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+-#endif
++ return __builtin_aarch64_fminv8hf (__a, __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vuzp2_p8 (poly8x8_t __a, poly8x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+-#endif
++ return __a * __b;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vuzp2_p16 (poly16x4_t __a, poly16x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
+-#endif
++ return __a * __b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vuzp2_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+-#endif
++ return __builtin_aarch64_fmulxv4hf (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vuzp2_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
+-#endif
++ return __builtin_aarch64_fmulxv8hf (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vuzp2_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadd_f16 (float16x4_t a, float16x4_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+-#endif
++ return __builtin_aarch64_faddpv4hf (a, b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vuzp2_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpaddq_f16 (float16x8_t a, float16x8_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+-#endif
++ return __builtin_aarch64_faddpv8hf (a, b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vuzp2_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmax_f16 (float16x4_t a, float16x4_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
+-#endif
++ return __builtin_aarch64_smax_nanpv4hf (a, b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vuzp2_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxq_f16 (float16x8_t a, float16x8_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+-#endif
++ return __builtin_aarch64_smax_nanpv8hf (a, b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vuzp2q_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxnm_f16 (float16x4_t a, float16x4_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
+-#endif
++ return __builtin_aarch64_smaxpv4hf (a, b);
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vuzp2q_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmaxnmq_f16 (float16x8_t a, float16x8_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+-#endif
++ return __builtin_aarch64_smaxpv8hf (a, b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vuzp2q_p8 (poly8x16_t __a, poly8x16_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmin_f16 (float16x4_t a, float16x4_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
+-#endif
++ return __builtin_aarch64_smin_nanpv4hf (a, b);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vuzp2q_p16 (poly16x8_t __a, poly16x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminq_f16 (float16x8_t a, float16x8_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+-#endif
++ return __builtin_aarch64_smin_nanpv8hf (a, b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vuzp2q_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminnm_f16 (float16x4_t a, float16x4_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
+-#else
+- return __builtin_shuffle (__a, __b,
+- (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
+-#endif
++ return __builtin_aarch64_sminpv4hf (a, b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vuzp2q_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpminnmq_f16 (float16x8_t a, float16x8_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+-#endif
++ return __builtin_aarch64_sminpv8hf (a, b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vuzp2q_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecps_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
+-#endif
++ return __builtin_aarch64_frecpsv4hf (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vuzp2q_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpsq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+-#endif
++ return __builtin_aarch64_frecpsv8hf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vuzp2q_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrts_f16 (float16x4_t a, float16x4_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
+-#endif
++ return __builtin_aarch64_rsqrtsv4hf (a, b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vuzp2q_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrtsq_f16 (float16x8_t a, float16x8_t b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+-#endif
++ return __builtin_aarch64_rsqrtsv8hf (a, b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vuzp2q_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsub_f16 (float16x4_t __a, float16x4_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
+-#endif
++ return __a - __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vuzp2q_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsubq_f16 (float16x8_t __a, float16x8_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+-#endif
++ return __a - __b;
+ }
+
+-__INTERLEAVE_LIST (uzp)
+-
+-/* vzip */
++/* ARMv8.2-A FP16 three operands vector intrinsics. */
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vzip1_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_f16 (float16x4_t __a, float16x4_t __b, float16x4_t __c)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+-#endif
++ return __builtin_aarch64_fmav4hf (__b, __c, __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vzip1_p8 (poly8x8_t __a, poly8x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_f16 (float16x8_t __a, float16x8_t __b, float16x8_t __c)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+-#endif
++ return __builtin_aarch64_fmav8hf (__b, __c, __a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vzip1_p16 (poly16x4_t __a, poly16x4_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_f16 (float16x4_t __a, float16x4_t __b, float16x4_t __c)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
+-#endif
++ return __builtin_aarch64_fnmav4hf (__b, __c, __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vzip1_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_f16 (float16x8_t __a, float16x8_t __b, float16x8_t __c)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+-#endif
++ return __builtin_aarch64_fnmav8hf (__b, __c, __a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vzip1_s16 (int16x4_t __a, int16x4_t __b)
+-{
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
+-#endif
++/* ARMv8.2-A FP16 lane vector intrinsics. */
++
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmah_lane_f16 (float16_t __a, float16_t __b,
++ float16x4_t __c, const int __lane)
++{
++ return vfmah_f16 (__a, __b, __aarch64_vget_lane_any (__c, __lane));
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vzip1_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmah_laneq_f16 (float16_t __a, float16_t __b,
++ float16x8_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+-#endif
++ return vfmah_f16 (__a, __b, __aarch64_vget_lane_any (__c, __lane));
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vzip1_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_lane_f16 (float16x4_t __a, float16x4_t __b,
++ float16x4_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+-#endif
++ return vfma_f16 (__a, __b, __aarch64_vdup_lane_f16 (__c, __lane));
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vzip1_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_lane_f16 (float16x8_t __a, float16x8_t __b,
++ float16x4_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
+-#endif
++ return vfmaq_f16 (__a, __b, __aarch64_vdupq_lane_f16 (__c, __lane));
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vzip1_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_laneq_f16 (float16x4_t __a, float16x4_t __b,
++ float16x8_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+-#endif
++ return vfma_f16 (__a, __b, __aarch64_vdup_laneq_f16 (__c, __lane));
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vzip1q_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_laneq_f16 (float16x8_t __a, float16x8_t __b,
++ float16x8_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
+-#endif
++ return vfmaq_f16 (__a, __b, __aarch64_vdupq_laneq_f16 (__c, __lane));
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vzip1q_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_n_f16 (float16x4_t __a, float16x4_t __b, float16_t __c)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+-#endif
++ return vfma_f16 (__a, __b, vdup_n_f16 (__c));
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vzip1q_p8 (poly8x16_t __a, poly8x16_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_n_f16 (float16x8_t __a, float16x8_t __b, float16_t __c)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
+-#endif
++ return vfmaq_f16 (__a, __b, vdupq_n_f16 (__c));
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vzip1q_p16 (poly16x8_t __a, poly16x8_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsh_lane_f16 (float16_t __a, float16_t __b,
++ float16x4_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t)
+- {12, 4, 13, 5, 14, 6, 15, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+-#endif
++ return vfmsh_f16 (__a, __b, __aarch64_vget_lane_any (__c, __lane));
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vzip1q_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsh_laneq_f16 (float16_t __a, float16_t __b,
++ float16x8_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
+-#endif
++ return vfmsh_f16 (__a, __b, __aarch64_vget_lane_any (__c, __lane));
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vzip1q_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_lane_f16 (float16x4_t __a, float16x4_t __b,
++ float16x4_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t)
+- {12, 4, 13, 5, 14, 6, 15, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+-#endif
++ return vfms_f16 (__a, __b, __aarch64_vdup_lane_f16 (__c, __lane));
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vzip1q_s32 (int32x4_t __a, int32x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_lane_f16 (float16x8_t __a, float16x8_t __b,
++ float16x4_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
+-#endif
++ return vfmsq_f16 (__a, __b, __aarch64_vdupq_lane_f16 (__c, __lane));
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vzip1q_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_laneq_f16 (float16x4_t __a, float16x4_t __b,
++ float16x8_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+-#endif
++ return vfms_f16 (__a, __b, __aarch64_vdup_laneq_f16 (__c, __lane));
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vzip1q_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_laneq_f16 (float16x8_t __a, float16x8_t __b,
++ float16x8_t __c, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
+-#endif
++ return vfmsq_f16 (__a, __b, __aarch64_vdupq_laneq_f16 (__c, __lane));
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vzip1q_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_n_f16 (float16x4_t __a, float16x4_t __b, float16_t __c)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t)
+- {12, 4, 13, 5, 14, 6, 15, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+-#endif
++ return vfms_f16 (__a, __b, vdup_n_f16 (__c));
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vzip1q_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_n_f16 (float16x8_t __a, float16x8_t __b, float16_t __c)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
+-#endif
++ return vfmsq_f16 (__a, __b, vdupq_n_f16 (__c));
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vzip1q_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulh_lane_f16 (float16_t __a, float16x4_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+-#endif
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+-vzip2_f32 (float32x2_t __a, float32x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_lane_f16 (float16x4_t __a, float16x4_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+-#endif
++ return vmul_f16 (__a, vdup_n_f16 (__aarch64_vget_lane_any (__b, __lane)));
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
+-vzip2_p8 (poly8x8_t __a, poly8x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_lane_f16 (float16x8_t __a, float16x4_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+-#endif
++ return vmulq_f16 (__a, vdupq_n_f16 (__aarch64_vget_lane_any (__b, __lane)));
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
+-vzip2_p16 (poly16x4_t __a, poly16x4_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulh_laneq_f16 (float16_t __a, float16x8_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+-#endif
++ return __a * __aarch64_vget_lane_any (__b, __lane);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
+-vzip2_s8 (int8x8_t __a, int8x8_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_laneq_f16 (float16x4_t __a, float16x8_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+-#endif
++ return vmul_f16 (__a, vdup_n_f16 (__aarch64_vget_lane_any (__b, __lane)));
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
+-vzip2_s16 (int16x4_t __a, int16x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_laneq_f16 (float16x8_t __a, float16x8_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+-#endif
++ return vmulq_f16 (__a, vdupq_n_f16 (__aarch64_vget_lane_any (__b, __lane)));
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
+-vzip2_s32 (int32x2_t __a, int32x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_n_f16 (float16x4_t __a, float16_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+-#endif
++ return vmul_lane_f16 (__a, vdup_n_f16 (__b), 0);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+-vzip2_u8 (uint8x8_t __a, uint8x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_n_f16 (float16x8_t __a, float16_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+-#endif
++ return vmulq_laneq_f16 (__a, vdupq_n_f16 (__b), 0);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+-vzip2_u16 (uint16x4_t __a, uint16x4_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxh_lane_f16 (float16_t __a, float16x4_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+-#endif
++ return vmulxh_f16 (__a, __aarch64_vget_lane_any (__b, __lane));
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+-vzip2_u32 (uint32x2_t __a, uint32x2_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_lane_f16 (float16x4_t __a, float16x4_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+-#endif
++ return vmulx_f16 (__a, __aarch64_vdup_lane_f16 (__b, __lane));
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+-vzip2q_f32 (float32x4_t __a, float32x4_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_lane_f16 (float16x8_t __a, float16x4_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
+-#endif
++ return vmulxq_f16 (__a, __aarch64_vdupq_lane_f16 (__b, __lane));
+ }
+
+-__extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
+-vzip2q_f64 (float64x2_t __a, float64x2_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxh_laneq_f16 (float16_t __a, float16x8_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+-#endif
++ return vmulxh_f16 (__a, __aarch64_vget_lane_any (__b, __lane));
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
+-vzip2q_p8 (poly8x16_t __a, poly8x16_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_laneq_f16 (float16x4_t __a, float16x8_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
+-#endif
++ return vmulx_f16 (__a, __aarch64_vdup_laneq_f16 (__b, __lane));
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
+-vzip2q_p16 (poly16x8_t __a, poly16x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_laneq_f16 (float16x8_t __a, float16x8_t __b, const int __lane)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t)
+- {4, 12, 5, 13, 6, 14, 7, 15});
+-#endif
++ return vmulxq_f16 (__a, __aarch64_vdupq_laneq_f16 (__b, __lane));
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
+-vzip2q_s8 (int8x16_t __a, int8x16_t __b)
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulx_n_f16 (float16x4_t __a, float16_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
+-#endif
++ return vmulx_f16 (__a, vdup_n_f16 (__b));
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
+-vzip2q_s16 (int16x8_t __a, int16x8_t __b)
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulxq_n_f16 (float16x8_t __a, float16_t __b)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t)
+- {4, 12, 5, 13, 6, 14, 7, 15});
+-#endif
++ return vmulxq_f16 (__a, vdupq_n_f16 (__b));
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
+-vzip2q_s32 (int32x4_t __a, int32x4_t __b)
++/* ARMv8.2-A FP16 reduction vector intrinsics. */
++
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxv_f16 (float16x4_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
+-#endif
++ return __builtin_aarch64_reduc_smax_nan_scal_v4hf (__a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
+-vzip2q_s64 (int64x2_t __a, int64x2_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxvq_f16 (float16x8_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+-#endif
++ return __builtin_aarch64_reduc_smax_nan_scal_v8hf (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vzip2q_u8 (uint8x16_t __a, uint8x16_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminv_f16 (float16x4_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
+-#else
+- return __builtin_shuffle (__a, __b, (uint8x16_t)
+- {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
+-#endif
++ return __builtin_aarch64_reduc_smin_nan_scal_v4hf (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+-vzip2q_u16 (uint16x8_t __a, uint16x8_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminvq_f16 (float16x8_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+-#else
+- return __builtin_shuffle (__a, __b, (uint16x8_t)
+- {4, 12, 5, 13, 6, 14, 7, 15});
+-#endif
++ return __builtin_aarch64_reduc_smin_nan_scal_v8hf (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vzip2q_u32 (uint32x4_t __a, uint32x4_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmv_f16 (float16x4_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
+-#else
+- return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
+-#endif
++ return __builtin_aarch64_reduc_smax_scal_v4hf (__a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+-vzip2q_u64 (uint64x2_t __a, uint64x2_t __b)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmvq_f16 (float16x8_t __a)
+ {
+-#ifdef __AARCH64EB__
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+-#else
+- return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+-#endif
++ return __builtin_aarch64_reduc_smax_scal_v8hf (__a);
+ }
+
+-__INTERLEAVE_LIST (zip)
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmv_f16 (float16x4_t __a)
++{
++ return __builtin_aarch64_reduc_smin_scal_v4hf (__a);
++}
+
+-#undef __INTERLEAVE_LIST
+-#undef __DEFINTERLEAVE
++__extension__ extern __inline float16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmvq_f16 (float16x8_t __a)
++{
++ return __builtin_aarch64_reduc_smin_scal_v8hf (__a);
++}
+
+-/* End of optimal implementations in approved order. */
++#pragma GCC pop_options
+
+ #undef __aarch64_vget_lane_any
+
+ #undef __aarch64_vdup_lane_any
++#undef __aarch64_vdup_lane_f16
+ #undef __aarch64_vdup_lane_f32
+ #undef __aarch64_vdup_lane_f64
+ #undef __aarch64_vdup_lane_p8
+@@ -25780,6 +31558,7 @@ __INTERLEAVE_LIST (zip)
+ #undef __aarch64_vdup_lane_u16
+ #undef __aarch64_vdup_lane_u32
+ #undef __aarch64_vdup_lane_u64
++#undef __aarch64_vdup_laneq_f16
+ #undef __aarch64_vdup_laneq_f32
+ #undef __aarch64_vdup_laneq_f64
+ #undef __aarch64_vdup_laneq_p8
+@@ -25792,6 +31571,7 @@ __INTERLEAVE_LIST (zip)
+ #undef __aarch64_vdup_laneq_u16
+ #undef __aarch64_vdup_laneq_u32
+ #undef __aarch64_vdup_laneq_u64
++#undef __aarch64_vdupq_lane_f16
+ #undef __aarch64_vdupq_lane_f32
+ #undef __aarch64_vdupq_lane_f64
+ #undef __aarch64_vdupq_lane_p8
+@@ -25804,6 +31584,7 @@ __INTERLEAVE_LIST (zip)
+ #undef __aarch64_vdupq_lane_u16
+ #undef __aarch64_vdupq_lane_u32
+ #undef __aarch64_vdupq_lane_u64
++#undef __aarch64_vdupq_laneq_f16
+ #undef __aarch64_vdupq_laneq_f32
+ #undef __aarch64_vdupq_laneq_f64
+ #undef __aarch64_vdupq_laneq_p8
+@@ -25817,6 +31598,4 @@ __INTERLEAVE_LIST (zip)
+ #undef __aarch64_vdupq_laneq_u32
+ #undef __aarch64_vdupq_laneq_u64
+
+-#pragma GCC pop_options
+-
+ #endif
+--- a/src/gcc/config/aarch64/atomics.md
++++ b/src/gcc/config/aarch64/atomics.md
+@@ -583,7 +583,7 @@
+ }
+ )
+
+-;; ARMv8.1 LSE instructions.
++;; ARMv8.1-A LSE instructions.
+
+ ;; Atomic swap with memory.
+ (define_insn "aarch64_atomic_swp<mode>"
+--- a/src/gcc/config/aarch64/cortex-a57-fma-steering.c
++++ b/src/gcc/config/aarch64/cortex-a57-fma-steering.c
+@@ -35,7 +35,6 @@
+ #include "context.h"
+ #include "tree-pass.h"
+ #include "regrename.h"
+-#include "cortex-a57-fma-steering.h"
+ #include "aarch64-protos.h"
+
+ /* For better performance, the destination of FMADD/FMSUB instructions should
+@@ -923,10 +922,10 @@ func_fma_steering::analyze ()
+ FOR_BB_INSNS (bb, insn)
+ {
+ operand_rr_info *dest_op_info;
+- struct du_chain *chain;
++ struct du_chain *chain = NULL;
+ unsigned dest_regno;
+- fma_forest *forest;
+- du_head_p head;
++ fma_forest *forest = NULL;
++ du_head_p head = NULL;
+ int i;
+
+ if (!is_fmul_fmac_insn (insn, true))
+@@ -1068,21 +1067,8 @@ public:
+
+ /* Create a new fma steering pass instance. */
+
+-static rtl_opt_pass *
++rtl_opt_pass *
+ make_pass_fma_steering (gcc::context *ctxt)
+ {
+ return new pass_fma_steering (ctxt);
+ }
+-
+-/* Register the FMA steering pass to the pass manager. */
+-
+-void
+-aarch64_register_fma_steering ()
+-{
+- opt_pass *pass_fma_steering = make_pass_fma_steering (g);
+-
+- struct register_pass_info fma_steering_info
+- = { pass_fma_steering, "rnreg", 1, PASS_POS_INSERT_AFTER };
+-
+- register_pass (&fma_steering_info);
+-}
+--- a/src/gcc/config/aarch64/cortex-a57-fma-steering.h
++++ b/src//dev/null
+@@ -1,22 +0,0 @@
+-/* This file contains declarations for the FMA steering optimization
+- pass for Cortex-A57.
+- Copyright (C) 2015-2016 Free Software Foundation, Inc.
+- Contributed by ARM Ltd.
+-
+- This file is part of GCC.
+-
+- GCC is free software; you can redistribute it and/or modify it
+- under the terms of the GNU General Public License as published by
+- the Free Software Foundation; either version 3, or (at your option)
+- any later version.
+-
+- GCC is distributed in the hope that it will be useful, but
+- WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License
+- along with GCC; see the file COPYING3. If not see
+- <http://www.gnu.org/licenses/>. */
+-
+-void aarch64_register_fma_steering (void);
+--- a/src/gcc/config/aarch64/geniterators.sh
++++ b/src/gcc/config/aarch64/geniterators.sh
+@@ -23,10 +23,7 @@
+ # BUILTIN_<ITERATOR> macros, which expand to VAR<N> Macros covering the
+ # same set of modes as the iterator in iterators.md
+ #
+-# Find the <ITERATOR> definitions (may span several lines), skip the ones
+-# which does not have a simple format because it contains characters we
+-# don't want to or can't handle (e.g P, PTR iterators change depending on
+-# Pmode and ptr_mode).
++# Find the <ITERATOR> definitions (may span several lines).
+ LC_ALL=C awk '
+ BEGIN {
+ print "/* -*- buffer-read-only: t -*- */"
+@@ -49,12 +46,24 @@ iterdef {
+ sub(/.*\(define_mode_iterator/, "", s)
+ }
+
+-iterdef && s ~ /\)/ {
++iterdef {
++ # Count the parentheses, the iterator definition ends
++ # if there are more closing ones than opening ones.
++ nopen = gsub(/\(/, "(", s)
++ nclose = gsub(/\)/, ")", s)
++ if (nopen >= nclose)
++ next
++
+ iterdef = 0
+
+ gsub(/[ \t]+/, " ", s)
+- sub(/ *\).*/, "", s)
++ sub(/ *\)[^)]*$/, "", s)
+ sub(/^ /, "", s)
++
++ # Drop the conditions.
++ gsub(/ *"[^"]*" *\)/, "", s)
++ gsub(/\( */, "", s)
++
+ if (s !~ /^[A-Za-z0-9_]+ \[[A-Z0-9 ]*\]$/)
+ next
+ sub(/\[ */, "", s)
+--- a/src/gcc/config/aarch64/iterators.md
++++ b/src/gcc/config/aarch64/iterators.md
+@@ -26,6 +26,9 @@
+ ;; Iterator for General Purpose Integer registers (32- and 64-bit modes)
+ (define_mode_iterator GPI [SI DI])
+
++;; Iterator for HI, SI, DI, some instructions can only work on these modes.
++(define_mode_iterator GPI_I16 [(HI "AARCH64_ISA_F16") SI DI])
++
+ ;; Iterator for QI and HI modes
+ (define_mode_iterator SHORT [QI HI])
+
+@@ -38,6 +41,9 @@
+ ;; Iterator for General Purpose Floating-point registers (32- and 64-bit modes)
+ (define_mode_iterator GPF [SF DF])
+
++;; Iterator for all scalar floating point modes (HF, SF, DF)
++(define_mode_iterator GPF_F16 [(HF "AARCH64_ISA_F16") SF DF])
++
+ ;; Iterator for all scalar floating point modes (HF, SF, DF and TF)
+ (define_mode_iterator GPF_TF_F16 [HF SF DF TF])
+
+@@ -88,11 +94,22 @@
+ ;; Vector Float modes suitable for moving, loading and storing.
+ (define_mode_iterator VDQF_F16 [V4HF V8HF V2SF V4SF V2DF])
+
+-;; Vector Float modes, barring HF modes.
++;; Vector Float modes.
+ (define_mode_iterator VDQF [V2SF V4SF V2DF])
++(define_mode_iterator VHSDF [(V4HF "TARGET_SIMD_F16INST")
++ (V8HF "TARGET_SIMD_F16INST")
++ V2SF V4SF V2DF])
+
+ ;; Vector Float modes, and DF.
+ (define_mode_iterator VDQF_DF [V2SF V4SF V2DF DF])
++(define_mode_iterator VHSDF_DF [(V4HF "TARGET_SIMD_F16INST")
++ (V8HF "TARGET_SIMD_F16INST")
++ V2SF V4SF V2DF DF])
++(define_mode_iterator VHSDF_HSDF [(V4HF "TARGET_SIMD_F16INST")
++ (V8HF "TARGET_SIMD_F16INST")
++ V2SF V4SF V2DF
++ (HF "TARGET_SIMD_F16INST")
++ SF DF])
+
+ ;; Vector single Float modes.
+ (define_mode_iterator VDQSF [V2SF V4SF])
+@@ -150,10 +167,30 @@
+
+ ;; Vector modes except double int.
+ (define_mode_iterator VDQIF [V8QI V16QI V4HI V8HI V2SI V4SI V2SF V4SF V2DF])
++(define_mode_iterator VDQIF_F16 [V8QI V16QI V4HI V8HI V2SI V4SI
++ V4HF V8HF V2SF V4SF V2DF])
+
+ ;; Vector modes for S type.
+ (define_mode_iterator VDQ_SI [V2SI V4SI])
+
++;; Vector modes for S and D
++(define_mode_iterator VDQ_SDI [V2SI V4SI V2DI])
++
++;; Vector modes for H, S and D
++(define_mode_iterator VDQ_HSDI [(V4HI "TARGET_SIMD_F16INST")
++ (V8HI "TARGET_SIMD_F16INST")
++ V2SI V4SI V2DI])
++
++;; Scalar and Vector modes for S and D
++(define_mode_iterator VSDQ_SDI [V2SI V4SI V2DI SI DI])
++
++;; Scalar and Vector modes for S and D, Vector modes for H.
++(define_mode_iterator VSDQ_HSDI [(V4HI "TARGET_SIMD_F16INST")
++ (V8HI "TARGET_SIMD_F16INST")
++ V2SI V4SI V2DI
++ (HI "TARGET_SIMD_F16INST")
++ SI DI])
++
+ ;; Vector modes for Q and H types.
+ (define_mode_iterator VDQQH [V8QI V16QI V4HI V8HI])
+
+@@ -193,7 +230,10 @@
+ (define_mode_iterator DX [DI DF])
+
+ ;; Modes available for <f>mul lane operations.
+-(define_mode_iterator VMUL [V4HI V8HI V2SI V4SI V2SF V4SF V2DF])
++(define_mode_iterator VMUL [V4HI V8HI V2SI V4SI
++ (V4HF "TARGET_SIMD_F16INST")
++ (V8HF "TARGET_SIMD_F16INST")
++ V2SF V4SF V2DF])
+
+ ;; Modes available for <f>mul lane operations changing lane count.
+ (define_mode_iterator VMUL_CHANGE_NLANES [V4HI V8HI V2SI V4SI V2SF V4SF])
+@@ -342,8 +382,8 @@
+ (define_mode_attr w [(QI "w") (HI "w") (SI "w") (DI "x") (SF "s") (DF "d")])
+
+ ;; For inequal width int to float conversion
+-(define_mode_attr w1 [(SF "w") (DF "x")])
+-(define_mode_attr w2 [(SF "x") (DF "w")])
++(define_mode_attr w1 [(HF "w") (SF "w") (DF "x")])
++(define_mode_attr w2 [(HF "x") (SF "x") (DF "w")])
+
+ (define_mode_attr short_mask [(HI "65535") (QI "255")])
+
+@@ -355,12 +395,13 @@
+
+ ;; For scalar usage of vector/FP registers
+ (define_mode_attr v [(QI "b") (HI "h") (SI "s") (DI "d")
+- (SF "s") (DF "d")
++ (HF "h") (SF "s") (DF "d")
+ (V8QI "") (V16QI "")
+ (V4HI "") (V8HI "")
+ (V2SI "") (V4SI "")
+ (V2DI "") (V2SF "")
+- (V4SF "") (V2DF "")])
++ (V4SF "") (V4HF "")
++ (V8HF "") (V2DF "")])
+
+ ;; For scalar usage of vector/FP registers, narrowing
+ (define_mode_attr vn2 [(QI "") (HI "b") (SI "h") (DI "s")
+@@ -385,7 +426,7 @@
+ (define_mode_attr vas [(DI "") (SI ".2s")])
+
+ ;; Map a floating point mode to the appropriate register name prefix
+-(define_mode_attr s [(SF "s") (DF "d")])
++(define_mode_attr s [(HF "h") (SF "s") (DF "d")])
+
+ ;; Give the length suffix letter for a sign- or zero-extension.
+ (define_mode_attr size [(QI "b") (HI "h") (SI "w")])
+@@ -421,8 +462,8 @@
+ (V4SF ".4s") (V2DF ".2d")
+ (DI "") (SI "")
+ (HI "") (QI "")
+- (TI "") (SF "")
+- (DF "")])
++ (TI "") (HF "")
++ (SF "") (DF "")])
+
+ ;; Register suffix narrowed modes for VQN.
+ (define_mode_attr Vmntype [(V8HI ".8b") (V4SI ".4h")
+@@ -437,10 +478,21 @@
+ (V2DI "d") (V4HF "h")
+ (V8HF "h") (V2SF "s")
+ (V4SF "s") (V2DF "d")
++ (HF "h")
+ (SF "s") (DF "d")
+ (QI "b") (HI "h")
+ (SI "s") (DI "d")])
+
++;; Vetype is used everywhere in scheduling type and assembly output,
++;; sometimes they are not the same, for example HF modes on some
++;; instructions. stype is defined to represent scheduling type
++;; more accurately.
++(define_mode_attr stype [(V8QI "b") (V16QI "b") (V4HI "s") (V8HI "s")
++ (V2SI "s") (V4SI "s") (V2DI "d") (V4HF "s")
++ (V8HF "s") (V2SF "s") (V4SF "s") (V2DF "d")
++ (HF "s") (SF "s") (DF "d") (QI "b") (HI "s")
++ (SI "s") (DI "d")])
++
+ ;; Mode-to-bitwise operation type mapping.
+ (define_mode_attr Vbtype [(V8QI "8b") (V16QI "16b")
+ (V4HI "8b") (V8HI "16b")
+@@ -598,7 +650,7 @@
+ (V4HF "V4HI") (V8HF "V8HI")
+ (V2SF "V2SI") (V4SF "V4SI")
+ (V2DF "V2DI") (DF "DI")
+- (SF "SI")])
++ (SF "SI") (HF "HI")])
+
+ ;; Lower case mode of results of comparison operations.
+ (define_mode_attr v_cmp_result [(V8QI "v8qi") (V16QI "v16qi")
+@@ -648,12 +700,21 @@
+ (define_mode_attr atomic_sfx
+ [(QI "b") (HI "h") (SI "") (DI "")])
+
+-(define_mode_attr fcvt_target [(V2DF "v2di") (V4SF "v4si") (V2SF "v2si") (SF "si") (DF "di")])
+-(define_mode_attr FCVT_TARGET [(V2DF "V2DI") (V4SF "V4SI") (V2SF "V2SI") (SF "SI") (DF "DI")])
++(define_mode_attr fcvt_target [(V2DF "v2di") (V4SF "v4si") (V2SF "v2si")
++ (V2DI "v2df") (V4SI "v4sf") (V2SI "v2sf")
++ (SF "si") (DF "di") (SI "sf") (DI "df")
++ (V4HF "v4hi") (V8HF "v8hi") (V4HI "v4hf")
++ (V8HI "v8hf") (HF "hi") (HI "hf")])
++(define_mode_attr FCVT_TARGET [(V2DF "V2DI") (V4SF "V4SI") (V2SF "V2SI")
++ (V2DI "V2DF") (V4SI "V4SF") (V2SI "V2SF")
++ (SF "SI") (DF "DI") (SI "SF") (DI "DF")
++ (V4HF "V4HI") (V8HF "V8HI") (V4HI "V4HF")
++ (V8HI "V8HF") (HF "HI") (HI "HF")])
++
+
+ ;; for the inequal width integer to fp conversions
+-(define_mode_attr fcvt_iesize [(SF "di") (DF "si")])
+-(define_mode_attr FCVT_IESIZE [(SF "DI") (DF "SI")])
++(define_mode_attr fcvt_iesize [(HF "di") (SF "di") (DF "si")])
++(define_mode_attr FCVT_IESIZE [(HF "DI") (SF "DI") (DF "SI")])
+
+ (define_mode_attr VSWAP_WIDTH [(V8QI "V16QI") (V16QI "V8QI")
+ (V4HI "V8HI") (V8HI "V4HI")
+@@ -676,6 +737,7 @@
+ ;; the 'x' constraint. All other modes may use the 'w' constraint.
+ (define_mode_attr h_con [(V2SI "w") (V4SI "w")
+ (V4HI "x") (V8HI "x")
++ (V4HF "w") (V8HF "w")
+ (V2SF "w") (V4SF "w")
+ (V2DF "w") (DF "w")])
+
+@@ -684,6 +746,7 @@
+ (V4HI "") (V8HI "")
+ (V2SI "") (V4SI "")
+ (DI "") (V2DI "")
++ (V4HF "f") (V8HF "f")
+ (V2SF "f") (V4SF "f")
+ (V2DF "f") (DF "f")])
+
+@@ -692,6 +755,7 @@
+ (V4HI "") (V8HI "")
+ (V2SI "") (V4SI "")
+ (DI "") (V2DI "")
++ (V4HF "_fp") (V8HF "_fp")
+ (V2SF "_fp") (V4SF "_fp")
+ (V2DF "_fp") (DF "_fp")
+ (SF "_fp")])
+@@ -704,17 +768,19 @@
+ (V4HF "") (V8HF "_q")
+ (V2SF "") (V4SF "_q")
+ (V2DF "_q")
+- (QI "") (HI "") (SI "") (DI "") (SF "") (DF "")])
++ (QI "") (HI "") (SI "") (DI "") (HF "") (SF "") (DF "")])
+
+ (define_mode_attr vp [(V8QI "v") (V16QI "v")
+ (V4HI "v") (V8HI "v")
+ (V2SI "p") (V4SI "v")
+- (V2DI "p") (V2DF "p")
+- (V2SF "p") (V4SF "v")])
++ (V2DI "p") (V2DF "p")
++ (V2SF "p") (V4SF "v")
++ (V4HF "v") (V8HF "v")])
+
+ (define_mode_attr vsi2qi [(V2SI "v8qi") (V4SI "v16qi")])
+ (define_mode_attr VSI2QI [(V2SI "V8QI") (V4SI "V16QI")])
+
++;; Sum of lengths of instructions needed to move vector registers of a mode.
+ (define_mode_attr insn_count [(OI "8") (CI "12") (XI "16")])
+
+ ;; -fpic small model GOT reloc modifers: gotpage_lo15/lo14 for ILP64/32.
+@@ -876,9 +942,6 @@
+ ;; Similar, but when not(op)
+ (define_code_attr nlogical [(and "bic") (ior "orn") (xor "eon")])
+
+-;; Sign- or zero-extending load
+-(define_code_attr ldrxt [(sign_extend "ldrs") (zero_extend "ldr")])
+-
+ ;; Sign- or zero-extending data-op
+ (define_code_attr su [(sign_extend "s") (zero_extend "u")
+ (sign_extract "s") (zero_extract "u")
+@@ -953,9 +1016,8 @@
+ (define_int_iterator ADDSUBHN2 [UNSPEC_ADDHN2 UNSPEC_RADDHN2
+ UNSPEC_SUBHN2 UNSPEC_RSUBHN2])
+
+-(define_int_iterator FMAXMIN_UNS [UNSPEC_FMAX UNSPEC_FMIN])
+-
+-(define_int_iterator FMAXMIN [UNSPEC_FMAXNM UNSPEC_FMINNM])
++(define_int_iterator FMAXMIN_UNS [UNSPEC_FMAX UNSPEC_FMIN
++ UNSPEC_FMAXNM UNSPEC_FMINNM])
+
+ (define_int_iterator VQDMULH [UNSPEC_SQDMULH UNSPEC_SQRDMULH])
+
+@@ -1001,6 +1063,9 @@
+ (define_int_iterator FCVT [UNSPEC_FRINTZ UNSPEC_FRINTP UNSPEC_FRINTM
+ UNSPEC_FRINTA UNSPEC_FRINTN])
+
++(define_int_iterator FCVT_F2FIXED [UNSPEC_FCVTZS UNSPEC_FCVTZU])
++(define_int_iterator FCVT_FIXED2F [UNSPEC_SCVTF UNSPEC_UCVTF])
++
+ (define_int_iterator FRECP [UNSPEC_FRECPE UNSPEC_FRECPX])
+
+ (define_int_iterator CRC [UNSPEC_CRC32B UNSPEC_CRC32H UNSPEC_CRC32W
+@@ -1036,7 +1101,9 @@
+ (UNSPEC_FMAXV "smax_nan")
+ (UNSPEC_FMIN "smin_nan")
+ (UNSPEC_FMINNMV "smin")
+- (UNSPEC_FMINV "smin_nan")])
++ (UNSPEC_FMINV "smin_nan")
++ (UNSPEC_FMAXNM "fmax")
++ (UNSPEC_FMINNM "fmin")])
+
+ (define_int_attr maxmin_uns_op [(UNSPEC_UMAXV "umax")
+ (UNSPEC_UMINV "umin")
+@@ -1047,13 +1114,9 @@
+ (UNSPEC_FMAXV "fmax")
+ (UNSPEC_FMIN "fmin")
+ (UNSPEC_FMINNMV "fminnm")
+- (UNSPEC_FMINV "fmin")])
+-
+-(define_int_attr fmaxmin [(UNSPEC_FMAXNM "fmax")
+- (UNSPEC_FMINNM "fmin")])
+-
+-(define_int_attr fmaxmin_op [(UNSPEC_FMAXNM "fmaxnm")
+- (UNSPEC_FMINNM "fminnm")])
++ (UNSPEC_FMINV "fmin")
++ (UNSPEC_FMAXNM "fmaxnm")
++ (UNSPEC_FMINNM "fminnm")])
+
+ (define_int_attr sur [(UNSPEC_SHADD "s") (UNSPEC_UHADD "u")
+ (UNSPEC_SRHADD "sr") (UNSPEC_URHADD "ur")
+@@ -1137,6 +1200,11 @@
+ (UNSPEC_FRINTP "ceil") (UNSPEC_FRINTM "floor")
+ (UNSPEC_FRINTN "frintn")])
+
++(define_int_attr fcvt_fixed_insn [(UNSPEC_SCVTF "scvtf")
++ (UNSPEC_UCVTF "ucvtf")
++ (UNSPEC_FCVTZS "fcvtzs")
++ (UNSPEC_FCVTZU "fcvtzu")])
++
+ (define_int_attr perm_insn [(UNSPEC_ZIP1 "zip") (UNSPEC_ZIP2 "zip")
+ (UNSPEC_TRN1 "trn") (UNSPEC_TRN2 "trn")
+ (UNSPEC_UZP1 "uzp") (UNSPEC_UZP2 "uzp")])
+--- a/src/gcc/config/aarch64/predicates.md
++++ b/src/gcc/config/aarch64/predicates.md
+@@ -54,9 +54,9 @@
+ (match_test "op == const0_rtx"))))
+
+ (define_predicate "aarch64_reg_or_fp_zero"
+- (and (match_code "reg,subreg,const_double")
+- (ior (match_operand 0 "register_operand")
+- (match_test "aarch64_float_const_zero_rtx_p (op)"))))
++ (ior (match_operand 0 "register_operand")
++ (and (match_code "const_double")
++ (match_test "aarch64_float_const_zero_rtx_p (op)"))))
+
+ (define_predicate "aarch64_reg_zero_or_m1_or_1"
+ (and (match_code "reg,subreg,const_int")
+--- a/src/gcc/config/aarch64/t-aarch64
++++ b/src/gcc/config/aarch64/t-aarch64
+@@ -52,16 +52,17 @@ aarch-common.o: $(srcdir)/config/arm/aarch-common.c $(CONFIG_H) $(SYSTEM_H) \
+ $(srcdir)/config/arm/aarch-common.c
+
+ aarch64-c.o: $(srcdir)/config/aarch64/aarch64-c.c $(CONFIG_H) $(SYSTEM_H) \
+- coretypes.h $(TM_H) $(TREE_H) output.h $(C_COMMON_H)
++ coretypes.h $(TM_H) $(TREE_H) output.h $(C_COMMON_H) $(TARGET_H)
+ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ $(srcdir)/config/aarch64/aarch64-c.c
+
++PASSES_EXTRA += $(srcdir)/config/aarch64/aarch64-passes.def
++
+ cortex-a57-fma-steering.o: $(srcdir)/config/aarch64/cortex-a57-fma-steering.c \
+ $(CONFIG_H) $(SYSTEM_H) $(TM_H) $(REGS_H) insn-config.h $(RTL_BASE_H) \
+ dominance.h cfg.h cfganal.h $(BASIC_BLOCK_H) $(INSN_ATTR_H) $(RECOG_H) \
+ output.h hash-map.h $(DF_H) $(OBSTACK_H) $(TARGET_H) $(RTL_H) \
+ $(CONTEXT_H) $(TREE_PASS_H) regrename.h \
+- $(srcdir)/config/aarch64/cortex-a57-fma-steering.h \
+ $(srcdir)/config/aarch64/aarch64-protos.h
+ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ $(srcdir)/config/aarch64/cortex-a57-fma-steering.c
+--- a/src/gcc/config/aarch64/thunderx.md
++++ b/src/gcc/config/aarch64/thunderx.md
+@@ -39,7 +39,7 @@
+
+ (define_insn_reservation "thunderx_shift" 1
+ (and (eq_attr "tune" "thunderx")
+- (eq_attr "type" "bfm,extend,rotate_imm,shift_imm,shift_reg,rbit,rev"))
++ (eq_attr "type" "bfm,bfx,extend,rotate_imm,shift_imm,shift_reg,rbit,rev"))
+ "thunderx_pipe0 | thunderx_pipe1")
+
+
+--- a/src/gcc/config/alpha/alpha.c
++++ b/src/gcc/config/alpha/alpha.c
+@@ -26,6 +26,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "gimple.h"
+ #include "df.h"
+ #include "tm_p.h"
+--- a/src/gcc/config/arm/aarch-cost-tables.h
++++ b/src/gcc/config/arm/aarch-cost-tables.h
+@@ -191,35 +191,35 @@ const struct cpu_cost_table cortexa53_extra_costs =
+ {
+ /* FP SFmode */
+ {
+- COSTS_N_INSNS (15), /* div. */
+- COSTS_N_INSNS (3), /* mult. */
+- COSTS_N_INSNS (7), /* mult_addsub. */
+- COSTS_N_INSNS (7), /* fma. */
+- COSTS_N_INSNS (3), /* addsub. */
+- COSTS_N_INSNS (1), /* fpconst. */
+- COSTS_N_INSNS (2), /* neg. */
+- COSTS_N_INSNS (1), /* compare. */
+- COSTS_N_INSNS (3), /* widen. */
+- COSTS_N_INSNS (3), /* narrow. */
+- COSTS_N_INSNS (3), /* toint. */
+- COSTS_N_INSNS (3), /* fromint. */
+- COSTS_N_INSNS (3) /* roundint. */
++ COSTS_N_INSNS (5), /* div. */
++ COSTS_N_INSNS (1), /* mult. */
++ COSTS_N_INSNS (2), /* mult_addsub. */
++ COSTS_N_INSNS (2), /* fma. */
++ COSTS_N_INSNS (1), /* addsub. */
++ 0, /* fpconst. */
++ COSTS_N_INSNS (1), /* neg. */
++ 0, /* compare. */
++ COSTS_N_INSNS (1), /* widen. */
++ COSTS_N_INSNS (1), /* narrow. */
++ COSTS_N_INSNS (1), /* toint. */
++ COSTS_N_INSNS (1), /* fromint. */
++ COSTS_N_INSNS (1) /* roundint. */
+ },
+ /* FP DFmode */
+ {
+- COSTS_N_INSNS (30), /* div. */
+- COSTS_N_INSNS (3), /* mult. */
+- COSTS_N_INSNS (7), /* mult_addsub. */
+- COSTS_N_INSNS (7), /* fma. */
+- COSTS_N_INSNS (3), /* addsub. */
+- COSTS_N_INSNS (1), /* fpconst. */
+- COSTS_N_INSNS (2), /* neg. */
+- COSTS_N_INSNS (1), /* compare. */
+- COSTS_N_INSNS (3), /* widen. */
+- COSTS_N_INSNS (3), /* narrow. */
+- COSTS_N_INSNS (3), /* toint. */
+- COSTS_N_INSNS (3), /* fromint. */
+- COSTS_N_INSNS (3) /* roundint. */
++ COSTS_N_INSNS (10), /* div. */
++ COSTS_N_INSNS (1), /* mult. */
++ COSTS_N_INSNS (2), /* mult_addsub. */
++ COSTS_N_INSNS (2), /* fma. */
++ COSTS_N_INSNS (1), /* addsub. */
++ 0, /* fpconst. */
++ COSTS_N_INSNS (1), /* neg. */
++ 0, /* compare. */
++ COSTS_N_INSNS (1), /* widen. */
++ COSTS_N_INSNS (1), /* narrow. */
++ COSTS_N_INSNS (1), /* toint. */
++ COSTS_N_INSNS (1), /* fromint. */
++ COSTS_N_INSNS (1) /* roundint. */
+ }
+ },
+ /* Vector */
+@@ -294,35 +294,35 @@ const struct cpu_cost_table cortexa57_extra_costs =
+ {
+ /* FP SFmode */
+ {
+- COSTS_N_INSNS (17), /* div. */
+- COSTS_N_INSNS (5), /* mult. */
+- COSTS_N_INSNS (9), /* mult_addsub. */
+- COSTS_N_INSNS (9), /* fma. */
+- COSTS_N_INSNS (4), /* addsub. */
+- COSTS_N_INSNS (2), /* fpconst. */
+- COSTS_N_INSNS (2), /* neg. */
+- COSTS_N_INSNS (2), /* compare. */
+- COSTS_N_INSNS (4), /* widen. */
+- COSTS_N_INSNS (4), /* narrow. */
+- COSTS_N_INSNS (4), /* toint. */
+- COSTS_N_INSNS (4), /* fromint. */
+- COSTS_N_INSNS (4) /* roundint. */
++ COSTS_N_INSNS (6), /* div. */
++ COSTS_N_INSNS (1), /* mult. */
++ COSTS_N_INSNS (2), /* mult_addsub. */
++ COSTS_N_INSNS (2), /* fma. */
++ COSTS_N_INSNS (1), /* addsub. */
++ 0, /* fpconst. */
++ 0, /* neg. */
++ 0, /* compare. */
++ COSTS_N_INSNS (1), /* widen. */
++ COSTS_N_INSNS (1), /* narrow. */
++ COSTS_N_INSNS (1), /* toint. */
++ COSTS_N_INSNS (1), /* fromint. */
++ COSTS_N_INSNS (1) /* roundint. */
+ },
+ /* FP DFmode */
+ {
+- COSTS_N_INSNS (31), /* div. */
+- COSTS_N_INSNS (5), /* mult. */
+- COSTS_N_INSNS (9), /* mult_addsub. */
+- COSTS_N_INSNS (9), /* fma. */
+- COSTS_N_INSNS (4), /* addsub. */
+- COSTS_N_INSNS (2), /* fpconst. */
+- COSTS_N_INSNS (2), /* neg. */
+- COSTS_N_INSNS (2), /* compare. */
+- COSTS_N_INSNS (4), /* widen. */
+- COSTS_N_INSNS (4), /* narrow. */
+- COSTS_N_INSNS (4), /* toint. */
+- COSTS_N_INSNS (4), /* fromint. */
+- COSTS_N_INSNS (4) /* roundint. */
++ COSTS_N_INSNS (11), /* div. */
++ COSTS_N_INSNS (1), /* mult. */
++ COSTS_N_INSNS (2), /* mult_addsub. */
++ COSTS_N_INSNS (2), /* fma. */
++ COSTS_N_INSNS (1), /* addsub. */
++ 0, /* fpconst. */
++ 0, /* neg. */
++ 0, /* compare. */
++ COSTS_N_INSNS (1), /* widen. */
++ COSTS_N_INSNS (1), /* narrow. */
++ COSTS_N_INSNS (1), /* toint. */
++ COSTS_N_INSNS (1), /* fromint. */
++ COSTS_N_INSNS (1) /* roundint. */
+ }
+ },
+ /* Vector */
+@@ -537,4 +537,107 @@ const struct cpu_cost_table xgene1_extra_costs =
+ }
+ };
+
++const struct cpu_cost_table qdf24xx_extra_costs =
++{
++ /* ALU */
++ {
++ 0, /* arith. */
++ 0, /* logical. */
++ 0, /* shift. */
++ 0, /* shift_reg. */
++ COSTS_N_INSNS (1), /* arith_shift. */
++ COSTS_N_INSNS (1), /* arith_shift_reg. */
++ 0, /* log_shift. */
++ 0, /* log_shift_reg. */
++ 0, /* extend. */
++ 0, /* extend_arith. */
++ 0, /* bfi. */
++ 0, /* bfx. */
++ 0, /* clz. */
++ 0, /* rev. */
++ 0, /* non_exec. */
++ true /* non_exec_costs_exec. */
++ },
++ {
++ /* MULT SImode */
++ {
++ COSTS_N_INSNS (2), /* simple. */
++ COSTS_N_INSNS (2), /* flag_setting. */
++ COSTS_N_INSNS (2), /* extend. */
++ COSTS_N_INSNS (2), /* add. */
++ COSTS_N_INSNS (2), /* extend_add. */
++ COSTS_N_INSNS (4) /* idiv. */
++ },
++ /* MULT DImode */
++ {
++ COSTS_N_INSNS (3), /* simple. */
++ 0, /* flag_setting (N/A). */
++ COSTS_N_INSNS (3), /* extend. */
++ COSTS_N_INSNS (3), /* add. */
++ COSTS_N_INSNS (3), /* extend_add. */
++ COSTS_N_INSNS (9) /* idiv. */
++ }
++ },
++ /* LD/ST */
++ {
++ COSTS_N_INSNS (2), /* load. */
++ COSTS_N_INSNS (2), /* load_sign_extend. */
++ COSTS_N_INSNS (2), /* ldrd. */
++ COSTS_N_INSNS (2), /* ldm_1st. */
++ 1, /* ldm_regs_per_insn_1st. */
++ 2, /* ldm_regs_per_insn_subsequent. */
++ COSTS_N_INSNS (2), /* loadf. */
++ COSTS_N_INSNS (2), /* loadd. */
++ COSTS_N_INSNS (3), /* load_unaligned. */
++ 0, /* store. */
++ 0, /* strd. */
++ 0, /* stm_1st. */
++ 1, /* stm_regs_per_insn_1st. */
++ 2, /* stm_regs_per_insn_subsequent. */
++ 0, /* storef. */
++ 0, /* stored. */
++ COSTS_N_INSNS (1), /* store_unaligned. */
++ COSTS_N_INSNS (1), /* loadv. */
++ COSTS_N_INSNS (1) /* storev. */
++ },
++ {
++ /* FP SFmode */
++ {
++ COSTS_N_INSNS (6), /* div. */
++ COSTS_N_INSNS (5), /* mult. */
++ COSTS_N_INSNS (5), /* mult_addsub. */
++ COSTS_N_INSNS (5), /* fma. */
++ COSTS_N_INSNS (3), /* addsub. */
++ COSTS_N_INSNS (1), /* fpconst. */
++ COSTS_N_INSNS (1), /* neg. */
++ COSTS_N_INSNS (2), /* compare. */
++ COSTS_N_INSNS (4), /* widen. */
++ COSTS_N_INSNS (4), /* narrow. */
++ COSTS_N_INSNS (4), /* toint. */
++ COSTS_N_INSNS (4), /* fromint. */
++ COSTS_N_INSNS (2) /* roundint. */
++ },
++ /* FP DFmode */
++ {
++ COSTS_N_INSNS (11), /* div. */
++ COSTS_N_INSNS (6), /* mult. */
++ COSTS_N_INSNS (6), /* mult_addsub. */
++ COSTS_N_INSNS (6), /* fma. */
++ COSTS_N_INSNS (3), /* addsub. */
++ COSTS_N_INSNS (1), /* fpconst. */
++ COSTS_N_INSNS (1), /* neg. */
++ COSTS_N_INSNS (2), /* compare. */
++ COSTS_N_INSNS (4), /* widen. */
++ COSTS_N_INSNS (4), /* narrow. */
++ COSTS_N_INSNS (4), /* toint. */
++ COSTS_N_INSNS (4), /* fromint. */
++ COSTS_N_INSNS (2) /* roundint. */
++ }
++ },
++ /* Vector */
++ {
++ COSTS_N_INSNS (1) /* alu. */
++ }
++};
++
+ #endif /* GCC_AARCH_COST_TABLES_H */
+--- a/src/gcc/config/arm/arm-arches.def
++++ b/src/gcc/config/arm/arm-arches.def
+@@ -58,10 +58,22 @@ ARM_ARCH("armv7e-m", cortexm4, 7EM, ARM_FSET_MAKE_CPU1 (FL_CO_PROC | FL_F
+ ARM_ARCH("armv8-a", cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_CO_PROC | FL_FOR_ARCH8A))
+ ARM_ARCH("armv8-a+crc",cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_CO_PROC | FL_CRC32 | FL_FOR_ARCH8A))
+ ARM_ARCH("armv8.1-a", cortexa53, 8A,
+- ARM_FSET_MAKE (FL_CO_PROC | FL_FOR_ARCH8A, FL2_FOR_ARCH8_1A))
++ ARM_FSET_MAKE (FL_CO_PROC | FL_CRC32 | FL_FOR_ARCH8A,
++ FL2_FOR_ARCH8_1A))
+ ARM_ARCH("armv8.1-a+crc",cortexa53, 8A,
+ ARM_FSET_MAKE (FL_CO_PROC | FL_CRC32 | FL_FOR_ARCH8A,
+ FL2_FOR_ARCH8_1A))
++ARM_ARCH ("armv8.2-a", cortexa53, 8A,
++ ARM_FSET_MAKE (FL_CO_PROC | FL_CRC32 | FL_FOR_ARCH8A,
++ FL2_FOR_ARCH8_2A))
++ARM_ARCH ("armv8.2-a+fp16", cortexa53, 8A,
++ ARM_FSET_MAKE (FL_CO_PROC | FL_CRC32 | FL_FOR_ARCH8A,
++ FL2_FOR_ARCH8_2A | FL2_FP16INST))
++ARM_ARCH("armv8-m.base", cortexm23, 8M_BASE,
++ ARM_FSET_MAKE (FL_FOR_ARCH8M_BASE, FL2_CMSE))
++ARM_ARCH("armv8-m.main", cortexm7, 8M_MAIN,
++ ARM_FSET_MAKE (FL_CO_PROC | FL_FOR_ARCH8M_MAIN, FL2_CMSE))
++ARM_ARCH("armv8-m.main+dsp", cortexm33, 8M_MAIN,
++ ARM_FSET_MAKE (FL_CO_PROC | FL_ARCH7EM | FL_FOR_ARCH8M_MAIN, FL2_CMSE))
+ ARM_ARCH("iwmmxt", iwmmxt, 5TE, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT))
+ ARM_ARCH("iwmmxt2", iwmmxt2, 5TE, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT | FL_IWMMXT2))
+-
+--- a/src/gcc/config/arm/arm-builtins.c
++++ b/src/gcc/config/arm/arm-builtins.c
+@@ -190,6 +190,8 @@ arm_storestruct_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ #define ti_UP TImode
+ #define ei_UP EImode
+ #define oi_UP OImode
++#define hf_UP HFmode
++#define si_UP SImode
+
+ #define UP(X) X##_UP
+
+@@ -239,12 +241,22 @@ typedef struct {
+ VAR11 (T, N, A, B, C, D, E, F, G, H, I, J, K) \
+ VAR1 (T, N, L)
+
+-/* The NEON builtin data can be found in arm_neon_builtins.def.
+- 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
+- the assembler mnemonic, which usually refers to the last vector operand.
+- The modes listed per instruction should be the same as those defined for
+- that instruction's pattern in neon.md. */
++/* The NEON builtin data can be found in arm_neon_builtins.def and
++ arm_vfp_builtins.def. The entries in arm_neon_builtins.def require
++ TARGET_NEON to be true. The feature tests are checked when the
++ builtins are expanded.
++
++ 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 the assembler mnemonic, which usually
++ refers to the last vector operand. The modes listed per
++ instruction should be the same as those defined for that
++ instruction's pattern in neon.md. */
++
++static neon_builtin_datum vfp_builtin_data[] =
++{
++#include "arm_vfp_builtins.def"
++};
+
+ static neon_builtin_datum neon_builtin_data[] =
+ {
+@@ -515,6 +527,8 @@ enum arm_builtins
+ ARM_BUILTIN_GET_FPSCR,
+ ARM_BUILTIN_SET_FPSCR,
+
++ ARM_BUILTIN_CMSE_NONSECURE_CALLER,
++
+ #undef CRYPTO1
+ #undef CRYPTO2
+ #undef CRYPTO3
+@@ -534,6 +548,10 @@ enum arm_builtins
+ #undef CRYPTO2
+ #undef CRYPTO3
+
++ ARM_BUILTIN_VFP_BASE,
++
++#include "arm_vfp_builtins.def"
++
+ ARM_BUILTIN_NEON_BASE,
+ ARM_BUILTIN_NEON_LANE_CHECK = ARM_BUILTIN_NEON_BASE,
+
+@@ -542,8 +560,11 @@ enum arm_builtins
+ ARM_BUILTIN_MAX
+ };
+
++#define ARM_BUILTIN_VFP_PATTERN_START \
++ (ARM_BUILTIN_VFP_BASE + 1)
++
+ #define ARM_BUILTIN_NEON_PATTERN_START \
+- (ARM_BUILTIN_MAX - ARRAY_SIZE (neon_builtin_data))
++ (ARM_BUILTIN_NEON_BASE + 1)
+
+ #undef CF
+ #undef VAR1
+@@ -895,6 +916,110 @@ arm_init_simd_builtin_scalar_types (void)
+ "__builtin_neon_uti");
+ }
+
++/* Set up a NEON builtin. */
++
++static void
++arm_init_neon_builtin (unsigned int fcode,
++ neon_builtin_datum *d)
++{
++ bool print_type_signature_p = false;
++ char type_signature[SIMD_MAX_BUILTIN_ARGS] = { 0 };
++ char namebuf[60];
++ tree ftype = NULL;
++ tree fndecl = NULL;
++
++ d->fcode = fcode;
++
++ /* We must track two variables here. op_num is
++ the operand number as in the RTL pattern. This is
++ required to access the mode (e.g. V4SF mode) of the
++ argument, from which the base type can be derived.
++ arg_num is an index in to the qualifiers data, which
++ gives qualifiers to the type (e.g. const unsigned).
++ The reason these two variables may differ by one is the
++ void return type. While all return types take the 0th entry
++ in the qualifiers array, there is no operand for them in the
++ RTL pattern. */
++ int op_num = insn_data[d->code].n_operands - 1;
++ int arg_num = d->qualifiers[0] & qualifier_void
++ ? op_num + 1
++ : op_num;
++ tree return_type = void_type_node, args = void_list_node;
++ tree eltype;
++
++ /* 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 (; op_num >= 0; arg_num--, op_num--)
++ {
++ machine_mode op_mode = insn_data[d->code].operand[op_num].mode;
++ enum arm_type_qualifiers qualifiers = d->qualifiers[arg_num];
++
++ if (qualifiers & qualifier_unsigned)
++ {
++ type_signature[arg_num] = 'u';
++ print_type_signature_p = true;
++ }
++ else if (qualifiers & qualifier_poly)
++ {
++ type_signature[arg_num] = 'p';
++ print_type_signature_p = true;
++ }
++ else
++ type_signature[arg_num] = 's';
++
++ /* Skip an internal operand for vget_{low, high}. */
++ if (qualifiers & qualifier_internal)
++ continue;
++
++ /* Some builtins have different user-facing types
++ for certain arguments, encoded in d->mode. */
++ if (qualifiers & qualifier_map_mode)
++ op_mode = d->mode;
++
++ /* For pointers, we want a pointer to the basic type
++ of the vector. */
++ if (qualifiers & qualifier_pointer && VECTOR_MODE_P (op_mode))
++ op_mode = GET_MODE_INNER (op_mode);
++
++ eltype = arm_simd_builtin_type
++ (op_mode,
++ (qualifiers & qualifier_unsigned) != 0,
++ (qualifiers & qualifier_poly) != 0);
++ gcc_assert (eltype != NULL);
++
++ /* Add qualifiers. */
++ if (qualifiers & qualifier_const)
++ eltype = build_qualified_type (eltype, TYPE_QUAL_CONST);
++
++ if (qualifiers & qualifier_pointer)
++ eltype = build_pointer_type (eltype);
++
++ /* If we have reached arg_num == 0, we are at a non-void
++ return type. Otherwise, we are still processing
++ arguments. */
++ if (arg_num == 0)
++ return_type = eltype;
++ else
++ args = tree_cons (NULL_TREE, eltype, args);
++ }
++
++ ftype = build_function_type (return_type, args);
++
++ gcc_assert (ftype != NULL);
++
++ if (print_type_signature_p)
++ snprintf (namebuf, sizeof (namebuf), "__builtin_neon_%s_%s",
++ d->name, type_signature);
++ else
++ snprintf (namebuf, sizeof (namebuf), "__builtin_neon_%s",
++ d->name);
++
++ fndecl = add_builtin_function (namebuf, ftype, fcode, BUILT_IN_MD,
++ NULL, NULL_TREE);
++ arm_builtin_decls[fcode] = fndecl;
++}
++
+ /* Set up all the NEON builtins, even builtins for instructions that are not
+ in the current target ISA to allow the user to compile particular modules
+ with different target specific options that differ from the command line
+@@ -924,103 +1049,22 @@ arm_init_neon_builtins (void)
+
+ for (i = 0; i < ARRAY_SIZE (neon_builtin_data); i++, fcode++)
+ {
+- bool print_type_signature_p = false;
+- char type_signature[SIMD_MAX_BUILTIN_ARGS] = { 0 };
+ neon_builtin_datum *d = &neon_builtin_data[i];
+- char namebuf[60];
+- tree ftype = NULL;
+- tree fndecl = NULL;
+-
+- d->fcode = fcode;
+-
+- /* We must track two variables here. op_num is
+- the operand number as in the RTL pattern. This is
+- required to access the mode (e.g. V4SF mode) of the
+- argument, from which the base type can be derived.
+- arg_num is an index in to the qualifiers data, which
+- gives qualifiers to the type (e.g. const unsigned).
+- The reason these two variables may differ by one is the
+- void return type. While all return types take the 0th entry
+- in the qualifiers array, there is no operand for them in the
+- RTL pattern. */
+- int op_num = insn_data[d->code].n_operands - 1;
+- int arg_num = d->qualifiers[0] & qualifier_void
+- ? op_num + 1
+- : op_num;
+- tree return_type = void_type_node, args = void_list_node;
+- tree eltype;
+-
+- /* 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 (; op_num >= 0; arg_num--, op_num--)
+- {
+- machine_mode op_mode = insn_data[d->code].operand[op_num].mode;
+- enum arm_type_qualifiers qualifiers = d->qualifiers[arg_num];
+-
+- if (qualifiers & qualifier_unsigned)
+- {
+- type_signature[arg_num] = 'u';
+- print_type_signature_p = true;
+- }
+- else if (qualifiers & qualifier_poly)
+- {
+- type_signature[arg_num] = 'p';
+- print_type_signature_p = true;
+- }
+- else
+- type_signature[arg_num] = 's';
+-
+- /* Skip an internal operand for vget_{low, high}. */
+- if (qualifiers & qualifier_internal)
+- continue;
+-
+- /* Some builtins have different user-facing types
+- for certain arguments, encoded in d->mode. */
+- if (qualifiers & qualifier_map_mode)
+- op_mode = d->mode;
+-
+- /* For pointers, we want a pointer to the basic type
+- of the vector. */
+- if (qualifiers & qualifier_pointer && VECTOR_MODE_P (op_mode))
+- op_mode = GET_MODE_INNER (op_mode);
+-
+- eltype = arm_simd_builtin_type
+- (op_mode,
+- (qualifiers & qualifier_unsigned) != 0,
+- (qualifiers & qualifier_poly) != 0);
+- gcc_assert (eltype != NULL);
+-
+- /* Add qualifiers. */
+- if (qualifiers & qualifier_const)
+- eltype = build_qualified_type (eltype, TYPE_QUAL_CONST);
+-
+- if (qualifiers & qualifier_pointer)
+- eltype = build_pointer_type (eltype);
+-
+- /* If we have reached arg_num == 0, we are at a non-void
+- return type. Otherwise, we are still processing
+- arguments. */
+- if (arg_num == 0)
+- return_type = eltype;
+- else
+- args = tree_cons (NULL_TREE, eltype, args);
+- }
+-
+- ftype = build_function_type (return_type, args);
++ arm_init_neon_builtin (fcode, d);
++ }
++}
+
+- gcc_assert (ftype != NULL);
++/* Set up all the scalar floating point builtins. */
+
+- if (print_type_signature_p)
+- snprintf (namebuf, sizeof (namebuf), "__builtin_neon_%s_%s",
+- d->name, type_signature);
+- else
+- snprintf (namebuf, sizeof (namebuf), "__builtin_neon_%s",
+- d->name);
++static void
++arm_init_vfp_builtins (void)
++{
++ unsigned int i, fcode = ARM_BUILTIN_VFP_PATTERN_START;
+
+- fndecl = add_builtin_function (namebuf, ftype, fcode, BUILT_IN_MD,
+- NULL, NULL_TREE);
+- arm_builtin_decls[fcode] = fndecl;
++ for (i = 0; i < ARRAY_SIZE (vfp_builtin_data); i++, fcode++)
++ {
++ neon_builtin_datum *d = &vfp_builtin_data[i];
++ arm_init_neon_builtin (fcode, d);
+ }
+ }
+
+@@ -1768,14 +1812,14 @@ arm_init_builtins (void)
+ if (TARGET_HARD_FLOAT)
+ {
+ arm_init_neon_builtins ();
+-
++ arm_init_vfp_builtins ();
+ arm_init_crypto_builtins ();
+ }
+
+ if (TARGET_CRC32)
+ arm_init_crc32_builtins ();
+
+- if (TARGET_VFP && TARGET_HARD_FLOAT)
++ if (TARGET_HARD_FLOAT)
+ {
+ tree ftype_set_fpscr
+ = build_function_type_list (void_type_node, unsigned_type_node, NULL);
+@@ -1789,6 +1833,17 @@ arm_init_builtins (void)
+ = add_builtin_function ("__builtin_arm_stfscr", ftype_set_fpscr,
+ ARM_BUILTIN_SET_FPSCR, BUILT_IN_MD, NULL, NULL_TREE);
+ }
++
++ if (use_cmse)
++ {
++ tree ftype_cmse_nonsecure_caller
++ = build_function_type_list (unsigned_type_node, NULL);
++ arm_builtin_decls[ARM_BUILTIN_CMSE_NONSECURE_CALLER]
++ = add_builtin_function ("__builtin_arm_cmse_nonsecure_caller",
++ ftype_cmse_nonsecure_caller,
++ ARM_BUILTIN_CMSE_NONSECURE_CALLER, BUILT_IN_MD,
++ NULL, NULL_TREE);
++ }
+ }
+
+ /* Return the ARM builtin for CODE. */
+@@ -2211,40 +2266,16 @@ constant_arg:
+ return target;
+ }
+
+-/* Expand a Neon builtin, i.e. those registered only if TARGET_NEON holds.
+- Most of these are "special" because they don't have symbolic
+- constants defined per-instruction or per instruction-variant. Instead, the
+- required info is looked up in the table neon_builtin_data. */
++/* Expand a neon builtin. This is also used for vfp builtins, which behave in
++ the same way. These builtins are "special" because they don't have symbolic
++ constants defined per-instruction or per instruction-variant. Instead, the
++ required info is looked up in the NEON_BUILTIN_DATA record that is passed
++ into the function. */
++
+ static rtx
+-arm_expand_neon_builtin (int fcode, tree exp, rtx target)
++arm_expand_neon_builtin_1 (int fcode, tree exp, rtx target,
++ neon_builtin_datum *d)
+ {
+- /* Check in the context of the function making the call whether the
+- builtin is supported. */
+- if (! TARGET_NEON)
+- {
+- fatal_error (input_location,
+- "You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to use these intrinsics.");
+- return const0_rtx;
+- }
+-
+- if (fcode == ARM_BUILTIN_NEON_LANE_CHECK)
+- {
+- /* Builtin is only to check bounds of the lane passed to some intrinsics
+- that are implemented with gcc vector extensions in arm_neon.h. */
+-
+- tree nlanes = CALL_EXPR_ARG (exp, 0);
+- gcc_assert (TREE_CODE (nlanes) == INTEGER_CST);
+- rtx lane_idx = expand_normal (CALL_EXPR_ARG (exp, 1));
+- if (CONST_INT_P (lane_idx))
+- neon_lane_bounds (lane_idx, 0, TREE_INT_CST_LOW (nlanes), exp);
+- else
+- error ("%Klane index must be a constant immediate", exp);
+- /* Don't generate any RTL. */
+- return const0_rtx;
+- }
+-
+- neon_builtin_datum *d =
+- &neon_builtin_data[fcode - ARM_BUILTIN_NEON_PATTERN_START];
+ enum insn_code icode = d->code;
+ builtin_arg args[SIMD_MAX_BUILTIN_ARGS + 1];
+ int num_args = insn_data[d->code].n_operands;
+@@ -2260,8 +2291,8 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target)
+ /* We have four arrays of data, each indexed in a different fashion.
+ qualifiers - element 0 always describes the function return type.
+ operands - element 0 is either the operand for return value (if
+- the function has a non-void return type) or the operand for the
+- first argument.
++ the function has a non-void return type) or the operand for the
++ first argument.
+ expr_args - element 0 always holds the first argument.
+ args - element 0 is always used for the return type. */
+ int qualifiers_k = k;
+@@ -2283,7 +2314,7 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target)
+ bool op_const_int_p =
+ (CONST_INT_P (arg)
+ && (*insn_data[icode].operand[operands_k].predicate)
+- (arg, insn_data[icode].operand[operands_k].mode));
++ (arg, insn_data[icode].operand[operands_k].mode));
+ args[k] = op_const_int_p ? NEON_ARG_CONSTANT : NEON_ARG_COPY_TO_REG;
+ }
+ else if (d->qualifiers[qualifiers_k] & qualifier_pointer)
+@@ -2296,8 +2327,68 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target)
+ /* The interface to arm_expand_neon_args expects a 0 if
+ the function is void, and a 1 if it is not. */
+ return arm_expand_neon_args
+- (target, d->mode, fcode, icode, !is_void, exp,
+- &args[1]);
++ (target, d->mode, fcode, icode, !is_void, exp,
++ &args[1]);
++}
++
++/* Expand a Neon builtin, i.e. those registered only if TARGET_NEON holds.
++ Most of these are "special" because they don't have symbolic
++ constants defined per-instruction or per instruction-variant. Instead, the
++ required info is looked up in the table neon_builtin_data. */
++
++static rtx
++arm_expand_neon_builtin (int fcode, tree exp, rtx target)
++{
++ if (fcode >= ARM_BUILTIN_NEON_BASE && ! TARGET_NEON)
++ {
++ fatal_error (input_location,
++ "You must enable NEON instructions"
++ " (e.g. -mfloat-abi=softfp -mfpu=neon)"
++ " to use these intrinsics.");
++ return const0_rtx;
++ }
++
++ if (fcode == ARM_BUILTIN_NEON_LANE_CHECK)
++ {
++ /* Builtin is only to check bounds of the lane passed to some intrinsics
++ that are implemented with gcc vector extensions in arm_neon.h. */
++
++ tree nlanes = CALL_EXPR_ARG (exp, 0);
++ gcc_assert (TREE_CODE (nlanes) == INTEGER_CST);
++ rtx lane_idx = expand_normal (CALL_EXPR_ARG (exp, 1));
++ if (CONST_INT_P (lane_idx))
++ neon_lane_bounds (lane_idx, 0, TREE_INT_CST_LOW (nlanes), exp);
++ else
++ error ("%Klane index must be a constant immediate", exp);
++ /* Don't generate any RTL. */
++ return const0_rtx;
++ }
++
++ neon_builtin_datum *d
++ = &neon_builtin_data[fcode - ARM_BUILTIN_NEON_PATTERN_START];
++
++ return arm_expand_neon_builtin_1 (fcode, exp, target, d);
++}
++
++/* Expand a VFP builtin. These builtins are treated like
++ neon builtins except that the data is looked up in table
++ VFP_BUILTIN_DATA. */
++
++static rtx
++arm_expand_vfp_builtin (int fcode, tree exp, rtx target)
++{
++ if (fcode >= ARM_BUILTIN_VFP_BASE && ! TARGET_HARD_FLOAT)
++ {
++ fatal_error (input_location,
++ "You must enable VFP instructions"
++ " to use these intrinsics.");
++ return const0_rtx;
++ }
++
++ neon_builtin_datum *d
++ = &vfp_builtin_data[fcode - ARM_BUILTIN_VFP_PATTERN_START];
++
++ return arm_expand_neon_builtin_1 (fcode, exp, target, d);
+ }
+
+ /* Expand an expression EXP that calls a built-in function,
+@@ -2337,13 +2428,18 @@ arm_expand_builtin (tree exp,
+ if (fcode >= ARM_BUILTIN_NEON_BASE)
+ return arm_expand_neon_builtin (fcode, exp, target);
+
++ if (fcode >= ARM_BUILTIN_VFP_BASE)
++ return arm_expand_vfp_builtin (fcode, exp, target);
++
+ /* Check in the context of the function making the call whether the
+ builtin is supported. */
+ if (fcode >= ARM_BUILTIN_CRYPTO_BASE
+ && (!TARGET_CRYPTO || !TARGET_HARD_FLOAT))
+ {
+ fatal_error (input_location,
+- "You must enable crypto intrinsics (e.g. include -mfloat-abi=softfp -mfpu=crypto-neon...) to use these intrinsics.");
++ "You must enable crypto instructions"
++ " (e.g. include -mfloat-abi=softfp -mfpu=crypto-neon...)"
++ " to use these intrinsics.");
+ return const0_rtx;
+ }
+
+@@ -2368,6 +2464,12 @@ arm_expand_builtin (tree exp,
+ emit_insn (pat);
+ return target;
+
++ case ARM_BUILTIN_CMSE_NONSECURE_CALLER:
++ target = gen_reg_rtx (SImode);
++ op0 = arm_return_addr (0, NULL_RTX);
++ emit_insn (gen_addsi3 (target, op0, const1_rtx));
++ return target;
++
+ case ARM_BUILTIN_TEXTRMSB:
+ case ARM_BUILTIN_TEXTRMUB:
+ case ARM_BUILTIN_TEXTRMSH:
+@@ -2995,7 +3097,7 @@ arm_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update)
+ tree new_fenv_var, reload_fenv, restore_fnenv;
+ tree update_call, atomic_feraiseexcept, hold_fnclex;
+
+- if (!TARGET_VFP || !TARGET_HARD_FLOAT)
++ if (!TARGET_HARD_FLOAT)
+ return;
+
+ /* Generate the equivalent of :
+--- a/src/gcc/config/arm/arm-c.c
++++ b/src/gcc/config/arm/arm-c.c
+@@ -76,6 +76,14 @@ arm_cpu_builtins (struct cpp_reader* pfile)
+
+ def_or_undef_macro (pfile, "__ARM_32BIT_STATE", TARGET_32BIT);
+
++ if (arm_arch8 && !arm_arch_notm)
++ {
++ if (arm_arch_cmse && use_cmse)
++ builtin_define_with_int_value ("__ARM_FEATURE_CMSE", 3);
++ else
++ builtin_define ("__ARM_FEATURE_CMSE");
++ }
++
+ if (TARGET_ARM_FEATURE_LDREX)
+ builtin_define_with_int_value ("__ARM_FEATURE_LDREX",
+ TARGET_ARM_FEATURE_LDREX);
+@@ -86,6 +94,9 @@ arm_cpu_builtins (struct cpp_reader* pfile)
+ ((TARGET_ARM_ARCH >= 5 && !TARGET_THUMB)
+ || TARGET_ARM_ARCH_ISA_THUMB >=2));
+
++ def_or_undef_macro (pfile, "__ARM_FEATURE_NUMERIC_MAXMIN",
++ TARGET_ARM_ARCH >= 8 && TARGET_NEON && TARGET_FPU_ARMV8);
++
+ def_or_undef_macro (pfile, "__ARM_FEATURE_SIMD32", TARGET_INT_SIMD);
+
+ builtin_define_with_int_value ("__ARM_SIZEOF_MINIMAL_ENUM",
+@@ -128,17 +139,24 @@ arm_cpu_builtins (struct cpp_reader* pfile)
+ if (TARGET_SOFT_FLOAT)
+ builtin_define ("__SOFTFP__");
+
+- def_or_undef_macro (pfile, "__VFP_FP__", TARGET_VFP);
++ builtin_define ("__VFP_FP__");
+
+ if (TARGET_ARM_FP)
+ builtin_define_with_int_value ("__ARM_FP", TARGET_ARM_FP);
+ else
+ cpp_undef (pfile, "__ARM_FP");
+
+- if (arm_fp16_format == ARM_FP16_FORMAT_IEEE)
+- builtin_define ("__ARM_FP16_FORMAT_IEEE");
+- if (arm_fp16_format == ARM_FP16_FORMAT_ALTERNATIVE)
+- builtin_define ("__ARM_FP16_FORMAT_ALTERNATIVE");
++ def_or_undef_macro (pfile, "__ARM_FP16_FORMAT_IEEE",
++ arm_fp16_format == ARM_FP16_FORMAT_IEEE);
++ def_or_undef_macro (pfile, "__ARM_FP16_FORMAT_ALTERNATIVE",
++ arm_fp16_format == ARM_FP16_FORMAT_ALTERNATIVE);
++ def_or_undef_macro (pfile, "__ARM_FP16_ARGS",
++ arm_fp16_format != ARM_FP16_FORMAT_NONE);
++
++ def_or_undef_macro (pfile, "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC",
++ TARGET_VFP_FP16INST);
++ def_or_undef_macro (pfile, "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC",
++ TARGET_NEON_FP16INST);
+
+ def_or_undef_macro (pfile, "__ARM_FEATURE_FMA", TARGET_FMA);
+ def_or_undef_macro (pfile, "__ARM_NEON__", TARGET_NEON);
+--- a/src/gcc/config/arm/arm-cores.def
++++ b/src/gcc/config/arm/arm-cores.def
+@@ -166,15 +166,21 @@ ARM_CORE("cortex-a15.cortex-a7", cortexa15cortexa7, cortexa7, 7A, ARM_FSET_MAKE_
+ ARM_CORE("cortex-a17.cortex-a7", cortexa17cortexa7, cortexa7, 7A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | FL_FOR_ARCH7A), cortex_a12)
+
+ /* V8 Architecture Processors */
++ARM_CORE("cortex-m23", cortexm23, cortexm23, 8M_BASE, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH8M_BASE), v6m)
+ ARM_CORE("cortex-a32", cortexa32, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a35)
++ARM_CORE("cortex-m33", cortexm33, cortexm33, 8M_MAIN, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_ARCH7EM | FL_FOR_ARCH8M_MAIN), v7m)
+ ARM_CORE("cortex-a35", cortexa35, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a35)
+ ARM_CORE("cortex-a53", cortexa53, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a53)
+ ARM_CORE("cortex-a57", cortexa57, cortexa57, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a57)
+ ARM_CORE("cortex-a72", cortexa72, cortexa57, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a57)
++ARM_CORE("cortex-a73", cortexa73, cortexa57, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a73)
+ ARM_CORE("exynos-m1", exynosm1, exynosm1, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), exynosm1)
+-ARM_CORE("qdf24xx", qdf24xx, cortexa57, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a57)
++ARM_CORE("qdf24xx", qdf24xx, cortexa57, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), qdf24xx)
+ ARM_CORE("xgene1", xgene1, xgene1, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH8A), xgene1)
+
+ /* V8 big.LITTLE implementations */
+ ARM_CORE("cortex-a57.cortex-a53", cortexa57cortexa53, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a57)
+ ARM_CORE("cortex-a72.cortex-a53", cortexa72cortexa53, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a57)
++ARM_CORE("cortex-a73.cortex-a35", cortexa73cortexa35, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a73)
++ARM_CORE("cortex-a73.cortex-a53", cortexa73cortexa53, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a73)
++
+--- /dev/null
++++ b/src/gcc/config/arm/arm-flags.h
+@@ -0,0 +1,212 @@
++/* Flags used to identify the presence of processor capabilities.
++
++ Copyright (C) 2016 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published
++ by the Free Software Foundation; either version 3, or (at your
++ option) any later version.
++
++ GCC is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
++ License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef GCC_ARM_FLAGS_H
++#define GCC_ARM_FLAGS_H
++
++/* Flags used to identify the presence of processor capabilities. */
++
++/* Bit values used to identify processor capabilities. */
++#define FL_NONE (0U) /* No flags. */
++#define FL_ANY (0xffffffffU) /* All flags. */
++#define FL_CO_PROC (1U << 0) /* Has external co-processor bus. */
++#define FL_ARCH3M (1U << 1) /* Extended multiply. */
++#define FL_MODE26 (1U << 2) /* 26-bit mode support. */
++#define FL_MODE32 (1U << 3) /* 32-bit mode support. */
++#define FL_ARCH4 (1U << 4) /* Architecture rel 4. */
++#define FL_ARCH5 (1U << 5) /* Architecture rel 5. */
++#define FL_THUMB (1U << 6) /* Thumb aware. */
++#define FL_LDSCHED (1U << 7) /* Load scheduling necessary. */
++#define FL_STRONG (1U << 8) /* StrongARM. */
++#define FL_ARCH5E (1U << 9) /* DSP extensions to v5. */
++#define FL_XSCALE (1U << 10) /* XScale. */
++/* spare (1U << 11) */
++#define FL_ARCH6 (1U << 12) /* Architecture rel 6. Adds
++ media instructions. */
++#define FL_VFPV2 (1U << 13) /* Vector Floating Point V2. */
++#define FL_WBUF (1U << 14) /* Schedule for write buffer ops.
++ Note: ARM6 & 7 derivatives only. */
++#define FL_ARCH6K (1U << 15) /* Architecture rel 6 K extensions. */
++#define FL_THUMB2 (1U << 16) /* Thumb-2. */
++#define FL_NOTM (1U << 17) /* Instructions not present in the 'M'
++ profile. */
++#define FL_THUMB_DIV (1U << 18) /* Hardware divide (Thumb mode). */
++#define FL_VFPV3 (1U << 19) /* Vector Floating Point V3. */
++#define FL_NEON (1U << 20) /* Neon instructions. */
++#define FL_ARCH7EM (1U << 21) /* Instructions present in the ARMv7E-M
++ architecture. */
++#define FL_ARCH7 (1U << 22) /* Architecture 7. */
++#define FL_ARM_DIV (1U << 23) /* Hardware divide (ARM mode). */
++#define FL_ARCH8 (1U << 24) /* Architecture 8. */
++#define FL_CRC32 (1U << 25) /* ARMv8 CRC32 instructions. */
++#define FL_SMALLMUL (1U << 26) /* Small multiply supported. */
++#define FL_NO_VOLATILE_CE (1U << 27) /* No volatile memory in IT block. */
++
++#define FL_IWMMXT (1U << 29) /* XScale v2 or "Intel Wireless MMX
++ technology". */
++#define FL_IWMMXT2 (1U << 30) /* "Intel Wireless MMX2
++ technology". */
++#define FL_ARCH6KZ (1U << 31) /* ARMv6KZ architecture. */
++
++#define FL2_ARCH8_1 (1U << 0) /* Architecture 8.1. */
++#define FL2_ARCH8_2 (1U << 1) /* Architecture 8.2. */
++#define FL2_FP16INST (1U << 2) /* FP16 Instructions for ARMv8.2 and
++ later. */
++#define FL2_CMSE (1U << 3) /* ARMv8-M Security Extensions. */
++
++/* Flags that only effect tuning, not available instructions. */
++#define FL_TUNE (FL_WBUF | FL_VFPV2 | FL_STRONG | FL_LDSCHED \
++ | FL_CO_PROC)
++
++#define FL_FOR_ARCH2 FL_NOTM
++#define FL_FOR_ARCH3 (FL_FOR_ARCH2 | FL_MODE32)
++#define FL_FOR_ARCH3M (FL_FOR_ARCH3 | FL_ARCH3M)
++#define FL_FOR_ARCH4 (FL_FOR_ARCH3M | FL_ARCH4)
++#define FL_FOR_ARCH4T (FL_FOR_ARCH4 | FL_THUMB)
++#define FL_FOR_ARCH5 (FL_FOR_ARCH4 | FL_ARCH5)
++#define FL_FOR_ARCH5T (FL_FOR_ARCH5 | FL_THUMB)
++#define FL_FOR_ARCH5E (FL_FOR_ARCH5 | FL_ARCH5E)
++#define FL_FOR_ARCH5TE (FL_FOR_ARCH5E | FL_THUMB)
++#define FL_FOR_ARCH5TEJ FL_FOR_ARCH5TE
++#define FL_FOR_ARCH6 (FL_FOR_ARCH5TE | FL_ARCH6)
++#define FL_FOR_ARCH6J FL_FOR_ARCH6
++#define FL_FOR_ARCH6K (FL_FOR_ARCH6 | FL_ARCH6K)
++#define FL_FOR_ARCH6Z FL_FOR_ARCH6
++#define FL_FOR_ARCH6ZK FL_FOR_ARCH6K
++#define FL_FOR_ARCH6KZ (FL_FOR_ARCH6K | FL_ARCH6KZ)
++#define FL_FOR_ARCH6T2 (FL_FOR_ARCH6 | FL_THUMB2)
++#define FL_FOR_ARCH6M (FL_FOR_ARCH6 & ~FL_NOTM)
++#define FL_FOR_ARCH7 ((FL_FOR_ARCH6T2 & ~FL_NOTM) | FL_ARCH7)
++#define FL_FOR_ARCH7A (FL_FOR_ARCH7 | FL_NOTM | FL_ARCH6K)
++#define FL_FOR_ARCH7VE (FL_FOR_ARCH7A | FL_THUMB_DIV | FL_ARM_DIV)
++#define FL_FOR_ARCH7R (FL_FOR_ARCH7A | FL_THUMB_DIV)
++#define FL_FOR_ARCH7M (FL_FOR_ARCH7 | FL_THUMB_DIV)
++#define FL_FOR_ARCH7EM (FL_FOR_ARCH7M | FL_ARCH7EM)
++#define FL_FOR_ARCH8A (FL_FOR_ARCH7VE | FL_ARCH8)
++#define FL2_FOR_ARCH8_1A FL2_ARCH8_1
++#define FL2_FOR_ARCH8_2A (FL2_FOR_ARCH8_1A | FL2_ARCH8_2)
++#define FL_FOR_ARCH8M_BASE (FL_FOR_ARCH6M | FL_ARCH8 | FL_THUMB_DIV)
++#define FL_FOR_ARCH8M_MAIN (FL_FOR_ARCH7M | FL_ARCH8)
++
++/* There are too many feature bits to fit in a single word so the set of cpu and
++ fpu capabilities is a structure. A feature set is created and manipulated
++ with the ARM_FSET macros. */
++
++typedef struct
++{
++ unsigned cpu[2];
++} arm_feature_set;
++
++
++/* Initialize a feature set. */
++
++#define ARM_FSET_MAKE(CPU1,CPU2) { { (CPU1), (CPU2) } }
++
++#define ARM_FSET_MAKE_CPU1(CPU1) ARM_FSET_MAKE ((CPU1), (FL_NONE))
++#define ARM_FSET_MAKE_CPU2(CPU2) ARM_FSET_MAKE ((FL_NONE), (CPU2))
++
++/* Accessors. */
++
++#define ARM_FSET_CPU1(S) ((S).cpu[0])
++#define ARM_FSET_CPU2(S) ((S).cpu[1])
++
++/* Useful combinations. */
++
++#define ARM_FSET_EMPTY ARM_FSET_MAKE (FL_NONE, FL_NONE)
++#define ARM_FSET_ANY ARM_FSET_MAKE (FL_ANY, FL_ANY)
++
++/* Tests for a specific CPU feature. */
++
++#define ARM_FSET_HAS_CPU1(A, F) \
++ (((A).cpu[0] & ((unsigned long)(F))) == ((unsigned long)(F)))
++#define ARM_FSET_HAS_CPU2(A, F) \
++ (((A).cpu[1] & ((unsigned long)(F))) == ((unsigned long)(F)))
++#define ARM_FSET_HAS_CPU(A, F1, F2) \
++ (ARM_FSET_HAS_CPU1 ((A), (F1)) && ARM_FSET_HAS_CPU2 ((A), (F2)))
++
++/* Add a feature to a feature set. */
++
++#define ARM_FSET_ADD_CPU1(DST, F) \
++ do { \
++ (DST).cpu[0] |= (F); \
++ } while (0)
++
++#define ARM_FSET_ADD_CPU2(DST, F) \
++ do { \
++ (DST).cpu[1] |= (F); \
++ } while (0)
++
++/* Remove a feature from a feature set. */
++
++#define ARM_FSET_DEL_CPU1(DST, F) \
++ do { \
++ (DST).cpu[0] &= ~(F); \
++ } while (0)
++
++#define ARM_FSET_DEL_CPU2(DST, F) \
++ do { \
++ (DST).cpu[1] &= ~(F); \
++ } while (0)
++
++/* Union of feature sets. */
++
++#define ARM_FSET_UNION(DST,F1,F2) \
++ do { \
++ (DST).cpu[0] = (F1).cpu[0] | (F2).cpu[0]; \
++ (DST).cpu[1] = (F1).cpu[1] | (F2).cpu[1]; \
++ } while (0)
++
++/* Intersection of feature sets. */
++
++#define ARM_FSET_INTER(DST,F1,F2) \
++ do { \
++ (DST).cpu[0] = (F1).cpu[0] & (F2).cpu[0]; \
++ (DST).cpu[1] = (F1).cpu[1] & (F2).cpu[1]; \
++ } while (0)
++
++/* Exclusive disjunction. */
++
++#define ARM_FSET_XOR(DST,F1,F2) \
++ do { \
++ (DST).cpu[0] = (F1).cpu[0] ^ (F2).cpu[0]; \
++ (DST).cpu[1] = (F1).cpu[1] ^ (F2).cpu[1]; \
++ } while (0)
++
++/* Difference of feature sets: F1 excluding the elements of F2. */
++
++#define ARM_FSET_EXCLUDE(DST,F1,F2) \
++ do { \
++ (DST).cpu[0] = (F1).cpu[0] & ~(F2).cpu[0]; \
++ (DST).cpu[1] = (F1).cpu[1] & ~(F2).cpu[1]; \
++ } while (0)
++
++/* Test for an empty feature set. */
++
++#define ARM_FSET_IS_EMPTY(A) \
++ (!((A).cpu[0]) && !((A).cpu[1]))
++
++/* Tests whether the cpu features of A are a subset of B. */
++
++#define ARM_FSET_CPU_SUBSET(A,B) \
++ ((((A).cpu[0] & (B).cpu[0]) == (A).cpu[0]) \
++ && (((A).cpu[1] & (B).cpu[1]) == (A).cpu[1]))
++
++#endif /* GCC_ARM_FLAGS_H */
+--- a/src/gcc/config/arm/arm-fpus.def
++++ b/src/gcc/config/arm/arm-fpus.def
+@@ -19,30 +19,31 @@
+
+ /* Before using #include to read this file, define a macro:
+
+- ARM_FPU(NAME, MODEL, REV, VFP_REGS, FEATURES)
++ ARM_FPU(NAME, REV, VFP_REGS, FEATURES)
+
+ The arguments are the fields of struct arm_fpu_desc.
+
+ genopt.sh assumes no whitespace up to the first "," in each entry. */
+
+-ARM_FPU("vfp", ARM_FP_MODEL_VFP, 2, VFP_REG_D16, FPU_FL_NONE)
+-ARM_FPU("vfpv3", ARM_FP_MODEL_VFP, 3, VFP_REG_D32, FPU_FL_NONE)
+-ARM_FPU("vfpv3-fp16", ARM_FP_MODEL_VFP, 3, VFP_REG_D32, FPU_FL_FP16)
+-ARM_FPU("vfpv3-d16", ARM_FP_MODEL_VFP, 3, VFP_REG_D16, FPU_FL_NONE)
+-ARM_FPU("vfpv3-d16-fp16", ARM_FP_MODEL_VFP, 3, VFP_REG_D16, FPU_FL_FP16)
+-ARM_FPU("vfpv3xd", ARM_FP_MODEL_VFP, 3, VFP_REG_SINGLE, FPU_FL_NONE)
+-ARM_FPU("vfpv3xd-fp16", ARM_FP_MODEL_VFP, 3, VFP_REG_SINGLE, FPU_FL_FP16)
+-ARM_FPU("neon", ARM_FP_MODEL_VFP, 3, VFP_REG_D32, FPU_FL_NEON)
+-ARM_FPU("neon-fp16", ARM_FP_MODEL_VFP, 3, VFP_REG_D32, FPU_FL_NEON | FPU_FL_FP16)
+-ARM_FPU("vfpv4", ARM_FP_MODEL_VFP, 4, VFP_REG_D32, FPU_FL_FP16)
+-ARM_FPU("vfpv4-d16", ARM_FP_MODEL_VFP, 4, VFP_REG_D16, FPU_FL_FP16)
+-ARM_FPU("fpv4-sp-d16", ARM_FP_MODEL_VFP, 4, VFP_REG_SINGLE, FPU_FL_FP16)
+-ARM_FPU("fpv5-sp-d16", ARM_FP_MODEL_VFP, 5, VFP_REG_SINGLE, FPU_FL_FP16)
+-ARM_FPU("fpv5-d16", ARM_FP_MODEL_VFP, 5, VFP_REG_D16, FPU_FL_FP16)
+-ARM_FPU("neon-vfpv4", ARM_FP_MODEL_VFP, 4, VFP_REG_D32, FPU_FL_NEON | FPU_FL_FP16)
+-ARM_FPU("fp-armv8", ARM_FP_MODEL_VFP, 8, VFP_REG_D32, FPU_FL_FP16)
+-ARM_FPU("neon-fp-armv8",ARM_FP_MODEL_VFP, 8, VFP_REG_D32, FPU_FL_NEON | FPU_FL_FP16)
+-ARM_FPU("crypto-neon-fp-armv8",
+- ARM_FP_MODEL_VFP, 8, VFP_REG_D32, FPU_FL_NEON | FPU_FL_FP16 | FPU_FL_CRYPTO)
++ARM_FPU("vfp", 2, VFP_REG_D16, FPU_FL_NONE)
++ARM_FPU("vfpv2", 2, VFP_REG_D16, FPU_FL_NONE)
++ARM_FPU("vfpv3", 3, VFP_REG_D32, FPU_FL_NONE)
++ARM_FPU("vfpv3-fp16", 3, VFP_REG_D32, FPU_FL_FP16)
++ARM_FPU("vfpv3-d16", 3, VFP_REG_D16, FPU_FL_NONE)
++ARM_FPU("vfpv3-d16-fp16", 3, VFP_REG_D16, FPU_FL_FP16)
++ARM_FPU("vfpv3xd", 3, VFP_REG_SINGLE, FPU_FL_NONE)
++ARM_FPU("vfpv3xd-fp16", 3, VFP_REG_SINGLE, FPU_FL_FP16)
++ARM_FPU("neon", 3, VFP_REG_D32, FPU_FL_NEON)
++ARM_FPU("neon-vfpv3", 3, VFP_REG_D32, FPU_FL_NEON)
++ARM_FPU("neon-fp16", 3, VFP_REG_D32, FPU_FL_NEON | FPU_FL_FP16)
++ARM_FPU("vfpv4", 4, VFP_REG_D32, FPU_FL_FP16)
++ARM_FPU("vfpv4-d16", 4, VFP_REG_D16, FPU_FL_FP16)
++ARM_FPU("fpv4-sp-d16", 4, VFP_REG_SINGLE, FPU_FL_FP16)
++ARM_FPU("fpv5-sp-d16", 5, VFP_REG_SINGLE, FPU_FL_FP16)
++ARM_FPU("fpv5-d16", 5, VFP_REG_D16, FPU_FL_FP16)
++ARM_FPU("neon-vfpv4", 4, VFP_REG_D32, FPU_FL_NEON | FPU_FL_FP16)
++ARM_FPU("fp-armv8", 8, VFP_REG_D32, FPU_FL_FP16)
++ARM_FPU("neon-fp-armv8", 8, VFP_REG_D32, FPU_FL_NEON | FPU_FL_FP16)
++ARM_FPU("crypto-neon-fp-armv8", 8, VFP_REG_D32, FPU_FL_NEON | FPU_FL_FP16 | FPU_FL_CRYPTO)
+ /* Compatibility aliases. */
+-ARM_FPU("vfp3", ARM_FP_MODEL_VFP, 3, VFP_REG_D32, FPU_FL_NONE)
++ARM_FPU("vfp3", 3, VFP_REG_D32, FPU_FL_NONE)
+--- a/src/gcc/config/arm/arm-modes.def
++++ b/src/gcc/config/arm/arm-modes.def
+@@ -59,6 +59,7 @@ CC_MODE (CC_DGEU);
+ CC_MODE (CC_DGTU);
+ CC_MODE (CC_C);
+ CC_MODE (CC_N);
++CC_MODE (CC_V);
+
+ /* Vector modes. */
+ VECTOR_MODES (INT, 4); /* V4QI V2HI */
+--- a/src/gcc/config/arm/arm-opts.h
++++ b/src/gcc/config/arm/arm-opts.h
+@@ -25,6 +25,8 @@
+ #ifndef ARM_OPTS_H
+ #define ARM_OPTS_H
+
++#include "arm-flags.h"
++
+ /* The various ARM cores. */
+ enum processor_type
+ {
+--- a/src/gcc/config/arm/arm-protos.h
++++ b/src/gcc/config/arm/arm-protos.h
+@@ -22,6 +22,8 @@
+ #ifndef GCC_ARM_PROTOS_H
+ #define GCC_ARM_PROTOS_H
+
++#include "arm-flags.h"
++
+ extern enum unwind_info_type arm_except_unwind_info (struct gcc_options *);
+ extern int use_return_insn (int, rtx);
+ extern bool use_simple_return_p (void);
+@@ -31,6 +33,7 @@ extern int arm_volatile_func (void);
+ extern void arm_expand_prologue (void);
+ extern void arm_expand_epilogue (bool);
+ extern void arm_declare_function_name (FILE *, const char *, tree);
++extern void arm_asm_declare_function_name (FILE *, const char *, tree);
+ extern void thumb2_expand_return (bool);
+ extern const char *arm_strip_name_encoding (const char *);
+ extern void arm_asm_output_labelref (FILE *, const char *);
+@@ -50,8 +53,12 @@ extern tree arm_builtin_decl (unsigned code, bool initialize_p
+ ATTRIBUTE_UNUSED);
+ extern void arm_init_builtins (void);
+ extern void arm_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update);
+-
++extern rtx arm_simd_vect_par_cnst_half (machine_mode mode, bool high);
++extern bool arm_simd_check_vect_par_cnst_half_p (rtx op, machine_mode mode,
++ bool high);
+ #ifdef RTX_CODE
++extern void arm_gen_unlikely_cbranch (enum rtx_code, machine_mode cc_mode,
++ rtx label_ref);
+ extern bool arm_vector_mode_supported_p (machine_mode);
+ extern bool arm_small_register_classes_for_mode_p (machine_mode);
+ extern int arm_hard_regno_mode_ok (unsigned int, machine_mode);
+@@ -130,6 +137,7 @@ extern int arm_const_double_inline_cost (rtx);
+ extern bool arm_const_double_by_parts (rtx);
+ extern bool arm_const_double_by_immediates (rtx);
+ extern void arm_emit_call_insn (rtx, rtx, bool);
++bool detect_cmse_nonsecure_call (tree);
+ extern const char *output_call (rtx *);
+ void arm_emit_movpair (rtx, rtx);
+ extern const char *output_mov_long_double_arm_from_arm (rtx *);
+@@ -161,6 +169,7 @@ extern const char *arm_output_iwmmxt_shift_immediate (const char *, rtx *, bool)
+ extern const char *arm_output_iwmmxt_tinsr (rtx *);
+ extern unsigned int arm_sync_loop_insns (rtx , rtx *);
+ extern int arm_attr_length_push_multi(rtx, rtx);
++extern int arm_attr_length_pop_multi(rtx *, bool, bool);
+ extern void arm_expand_compare_and_swap (rtx op[]);
+ extern void arm_split_compare_and_swap (rtx op[]);
+ extern void arm_split_atomic_op (enum rtx_code, rtx, rtx, rtx, rtx, rtx, rtx);
+@@ -192,7 +201,6 @@ extern const char *thumb_call_via_reg (rtx);
+ extern void thumb_expand_movmemqi (rtx *);
+ extern rtx arm_return_addr (int, rtx);
+ extern void thumb_reload_out_hi (rtx *);
+-extern void thumb_reload_in_hi (rtx *);
+ extern void thumb_set_return_address (rtx, rtx);
+ extern const char *thumb1_output_casesi (rtx *);
+ extern const char *thumb2_output_casesi (rtx *);
+@@ -256,7 +264,6 @@ struct cpu_cost_table;
+
+ struct tune_params
+ {
+- bool (*rtx_costs) (rtx, RTX_CODE, RTX_CODE, int *, bool);
+ const struct cpu_cost_table *insn_extra_cost;
+ bool (*sched_adjust_cost) (rtx_insn *, rtx, rtx_insn *, int *);
+ int (*branch_cost) (bool, bool);
+@@ -319,6 +326,7 @@ extern int vfp3_const_double_for_bits (rtx);
+
+ extern void arm_emit_coreregs_64bit_shift (enum rtx_code, rtx, rtx, rtx, rtx,
+ rtx);
++extern bool arm_fusion_enabled_p (tune_params::fuse_ops);
+ extern bool arm_valid_symbolic_address_p (rtx);
+ extern bool arm_validize_comparison (rtx *, rtx *, rtx *);
+ #endif /* RTX_CODE */
+@@ -344,184 +352,6 @@ extern void arm_cpu_cpp_builtins (struct cpp_reader *);
+
+ extern bool arm_is_constant_pool_ref (rtx);
+
+-/* Flags used to identify the presence of processor capabilities. */
+-
+-/* Bit values used to identify processor capabilities. */
+-#define FL_NONE (0) /* No flags. */
+-#define FL_ANY (0xffffffff) /* All flags. */
+-#define FL_CO_PROC (1 << 0) /* Has external co-processor bus */
+-#define FL_ARCH3M (1 << 1) /* Extended multiply */
+-#define FL_MODE26 (1 << 2) /* 26-bit mode support */
+-#define FL_MODE32 (1 << 3) /* 32-bit mode support */
+-#define FL_ARCH4 (1 << 4) /* Architecture rel 4 */
+-#define FL_ARCH5 (1 << 5) /* Architecture rel 5 */
+-#define FL_THUMB (1 << 6) /* Thumb aware */
+-#define FL_LDSCHED (1 << 7) /* Load scheduling necessary */
+-#define FL_STRONG (1 << 8) /* StrongARM */
+-#define FL_ARCH5E (1 << 9) /* DSP extensions to v5 */
+-#define FL_XSCALE (1 << 10) /* XScale */
+-/* spare (1 << 11) */
+-#define FL_ARCH6 (1 << 12) /* Architecture rel 6. Adds
+- media instructions. */
+-#define FL_VFPV2 (1 << 13) /* Vector Floating Point V2. */
+-#define FL_WBUF (1 << 14) /* Schedule for write buffer ops.
+- Note: ARM6 & 7 derivatives only. */
+-#define FL_ARCH6K (1 << 15) /* Architecture rel 6 K extensions. */
+-#define FL_THUMB2 (1 << 16) /* Thumb-2. */
+-#define FL_NOTM (1 << 17) /* Instructions not present in the 'M'
+- profile. */
+-#define FL_THUMB_DIV (1 << 18) /* Hardware divide (Thumb mode). */
+-#define FL_VFPV3 (1 << 19) /* Vector Floating Point V3. */
+-#define FL_NEON (1 << 20) /* Neon instructions. */
+-#define FL_ARCH7EM (1 << 21) /* Instructions present in the ARMv7E-M
+- architecture. */
+-#define FL_ARCH7 (1 << 22) /* Architecture 7. */
+-#define FL_ARM_DIV (1 << 23) /* Hardware divide (ARM mode). */
+-#define FL_ARCH8 (1 << 24) /* Architecture 8. */
+-#define FL_CRC32 (1 << 25) /* ARMv8 CRC32 instructions. */
+-
+-#define FL_SMALLMUL (1 << 26) /* Small multiply supported. */
+-#define FL_NO_VOLATILE_CE (1 << 27) /* No volatile memory in IT block. */
+-
+-#define FL_IWMMXT (1 << 29) /* XScale v2 or "Intel Wireless MMX technology". */
+-#define FL_IWMMXT2 (1 << 30) /* "Intel Wireless MMX2 technology". */
+-#define FL_ARCH6KZ (1 << 31) /* ARMv6KZ architecture. */
+-
+-#define FL2_ARCH8_1 (1 << 0) /* Architecture 8.1. */
+-
+-/* Flags that only effect tuning, not available instructions. */
+-#define FL_TUNE (FL_WBUF | FL_VFPV2 | FL_STRONG | FL_LDSCHED \
+- | FL_CO_PROC)
+-
+-#define FL_FOR_ARCH2 FL_NOTM
+-#define FL_FOR_ARCH3 (FL_FOR_ARCH2 | FL_MODE32)
+-#define FL_FOR_ARCH3M (FL_FOR_ARCH3 | FL_ARCH3M)
+-#define FL_FOR_ARCH4 (FL_FOR_ARCH3M | FL_ARCH4)
+-#define FL_FOR_ARCH4T (FL_FOR_ARCH4 | FL_THUMB)
+-#define FL_FOR_ARCH5 (FL_FOR_ARCH4 | FL_ARCH5)
+-#define FL_FOR_ARCH5T (FL_FOR_ARCH5 | FL_THUMB)
+-#define FL_FOR_ARCH5E (FL_FOR_ARCH5 | FL_ARCH5E)
+-#define FL_FOR_ARCH5TE (FL_FOR_ARCH5E | FL_THUMB)
+-#define FL_FOR_ARCH5TEJ FL_FOR_ARCH5TE
+-#define FL_FOR_ARCH6 (FL_FOR_ARCH5TE | FL_ARCH6)
+-#define FL_FOR_ARCH6J FL_FOR_ARCH6
+-#define FL_FOR_ARCH6K (FL_FOR_ARCH6 | FL_ARCH6K)
+-#define FL_FOR_ARCH6Z FL_FOR_ARCH6
+-#define FL_FOR_ARCH6KZ (FL_FOR_ARCH6K | FL_ARCH6KZ)
+-#define FL_FOR_ARCH6T2 (FL_FOR_ARCH6 | FL_THUMB2)
+-#define FL_FOR_ARCH6M (FL_FOR_ARCH6 & ~FL_NOTM)
+-#define FL_FOR_ARCH7 ((FL_FOR_ARCH6T2 & ~FL_NOTM) | FL_ARCH7)
+-#define FL_FOR_ARCH7A (FL_FOR_ARCH7 | FL_NOTM | FL_ARCH6K)
+-#define FL_FOR_ARCH7VE (FL_FOR_ARCH7A | FL_THUMB_DIV | FL_ARM_DIV)
+-#define FL_FOR_ARCH7R (FL_FOR_ARCH7A | FL_THUMB_DIV)
+-#define FL_FOR_ARCH7M (FL_FOR_ARCH7 | FL_THUMB_DIV)
+-#define FL_FOR_ARCH7EM (FL_FOR_ARCH7M | FL_ARCH7EM)
+-#define FL_FOR_ARCH8A (FL_FOR_ARCH7VE | FL_ARCH8)
+-#define FL2_FOR_ARCH8_1A FL2_ARCH8_1
+-
+-/* There are too many feature bits to fit in a single word so the set of cpu and
+- fpu capabilities is a structure. A feature set is created and manipulated
+- with the ARM_FSET macros. */
+-
+-typedef struct
+-{
+- unsigned long cpu[2];
+-} arm_feature_set;
+-
+-
+-/* Initialize a feature set. */
+-
+-#define ARM_FSET_MAKE(CPU1,CPU2) { { (CPU1), (CPU2) } }
+-
+-#define ARM_FSET_MAKE_CPU1(CPU1) ARM_FSET_MAKE ((CPU1), (FL_NONE))
+-#define ARM_FSET_MAKE_CPU2(CPU2) ARM_FSET_MAKE ((FL_NONE), (CPU2))
+-
+-/* Accessors. */
+-
+-#define ARM_FSET_CPU1(S) ((S).cpu[0])
+-#define ARM_FSET_CPU2(S) ((S).cpu[1])
+-
+-/* Useful combinations. */
+-
+-#define ARM_FSET_EMPTY ARM_FSET_MAKE (FL_NONE, FL_NONE)
+-#define ARM_FSET_ANY ARM_FSET_MAKE (FL_ANY, FL_ANY)
+-
+-/* Tests for a specific CPU feature. */
+-
+-#define ARM_FSET_HAS_CPU1(A, F) \
+- (((A).cpu[0] & ((unsigned long)(F))) == ((unsigned long)(F)))
+-#define ARM_FSET_HAS_CPU2(A, F) \
+- (((A).cpu[1] & ((unsigned long)(F))) == ((unsigned long)(F)))
+-#define ARM_FSET_HAS_CPU(A, F1, F2) \
+- (ARM_FSET_HAS_CPU1 ((A), (F1)) && ARM_FSET_HAS_CPU2 ((A), (F2)))
+-
+-/* Add a feature to a feature set. */
+-
+-#define ARM_FSET_ADD_CPU1(DST, F) \
+- do { \
+- (DST).cpu[0] |= (F); \
+- } while (0)
+-
+-#define ARM_FSET_ADD_CPU2(DST, F) \
+- do { \
+- (DST).cpu[1] |= (F); \
+- } while (0)
+-
+-/* Remove a feature from a feature set. */
+-
+-#define ARM_FSET_DEL_CPU1(DST, F) \
+- do { \
+- (DST).cpu[0] &= ~(F); \
+- } while (0)
+-
+-#define ARM_FSET_DEL_CPU2(DST, F) \
+- do { \
+- (DST).cpu[1] &= ~(F); \
+- } while (0)
+-
+-/* Union of feature sets. */
+-
+-#define ARM_FSET_UNION(DST,F1,F2) \
+- do { \
+- (DST).cpu[0] = (F1).cpu[0] | (F2).cpu[0]; \
+- (DST).cpu[1] = (F1).cpu[1] | (F2).cpu[1]; \
+- } while (0)
+-
+-/* Intersection of feature sets. */
+-
+-#define ARM_FSET_INTER(DST,F1,F2) \
+- do { \
+- (DST).cpu[0] = (F1).cpu[0] & (F2).cpu[0]; \
+- (DST).cpu[1] = (F1).cpu[1] & (F2).cpu[1]; \
+- } while (0)
+-
+-/* Exclusive disjunction. */
+-
+-#define ARM_FSET_XOR(DST,F1,F2) \
+- do { \
+- (DST).cpu[0] = (F1).cpu[0] ^ (F2).cpu[0]; \
+- (DST).cpu[1] = (F1).cpu[1] ^ (F2).cpu[1]; \
+- } while (0)
+-
+-/* Difference of feature sets: F1 excluding the elements of F2. */
+-
+-#define ARM_FSET_EXCLUDE(DST,F1,F2) \
+- do { \
+- (DST).cpu[0] = (F1).cpu[0] & ~(F2).cpu[0]; \
+- (DST).cpu[1] = (F1).cpu[1] & ~(F2).cpu[1]; \
+- } while (0)
+-
+-/* Test for an empty feature set. */
+-
+-#define ARM_FSET_IS_EMPTY(A) \
+- (!((A).cpu[0]) && !((A).cpu[1]))
+-
+-/* Tests whether the cpu features of A are a subset of B. */
+-
+-#define ARM_FSET_CPU_SUBSET(A,B) \
+- ((((A).cpu[0] & (B).cpu[0]) == (A).cpu[0]) \
+- && (((A).cpu[1] & (B).cpu[1]) == (A).cpu[1]))
+-
+ /* The bits in this mask specify which
+ instructions we are allowed to generate. */
+ extern arm_feature_set insn_flags;
+@@ -601,6 +431,9 @@ extern int arm_tune_cortex_a9;
+ interworking clean. */
+ extern int arm_cpp_interwork;
+
++/* Nonzero if chip supports Thumb 1. */
++extern int arm_arch_thumb1;
++
+ /* Nonzero if chip supports Thumb 2. */
+ extern int arm_arch_thumb2;
+
+--- a/src/gcc/config/arm/arm-tables.opt
++++ b/src/gcc/config/arm/arm-tables.opt
+@@ -307,9 +307,15 @@ EnumValue
+ Enum(processor_type) String(cortex-a17.cortex-a7) Value(cortexa17cortexa7)
+
+ EnumValue
++Enum(processor_type) String(cortex-m23) Value(cortexm23)
++
++EnumValue
+ Enum(processor_type) String(cortex-a32) Value(cortexa32)
+
+ EnumValue
++Enum(processor_type) String(cortex-m33) Value(cortexm33)
++
++EnumValue
+ Enum(processor_type) String(cortex-a35) Value(cortexa35)
+
+ EnumValue
+@@ -322,6 +328,9 @@ EnumValue
+ Enum(processor_type) String(cortex-a72) Value(cortexa72)
+
+ EnumValue
++Enum(processor_type) String(cortex-a73) Value(cortexa73)
++
++EnumValue
+ Enum(processor_type) String(exynos-m1) Value(exynosm1)
+
+ EnumValue
+@@ -336,6 +345,12 @@ Enum(processor_type) String(cortex-a57.cortex-a53) Value(cortexa57cortexa53)
+ EnumValue
+ Enum(processor_type) String(cortex-a72.cortex-a53) Value(cortexa72cortexa53)
+
++EnumValue
++Enum(processor_type) String(cortex-a73.cortex-a35) Value(cortexa73cortexa35)
++
++EnumValue
++Enum(processor_type) String(cortex-a73.cortex-a53) Value(cortexa73cortexa53)
++
+ Enum
+ Name(arm_arch) Type(int)
+ Known ARM architectures (for use with the -march= option):
+@@ -428,10 +443,25 @@ EnumValue
+ Enum(arm_arch) String(armv8.1-a+crc) Value(28)
+
+ EnumValue
+-Enum(arm_arch) String(iwmmxt) Value(29)
++Enum(arm_arch) String(armv8.2-a) Value(29)
++
++EnumValue
++Enum(arm_arch) String(armv8.2-a+fp16) Value(30)
+
+ EnumValue
+-Enum(arm_arch) String(iwmmxt2) Value(30)
++Enum(arm_arch) String(armv8-m.base) Value(31)
++
++EnumValue
++Enum(arm_arch) String(armv8-m.main) Value(32)
++
++EnumValue
++Enum(arm_arch) String(armv8-m.main+dsp) Value(33)
++
++EnumValue
++Enum(arm_arch) String(iwmmxt) Value(34)
++
++EnumValue
++Enum(arm_arch) String(iwmmxt2) Value(35)
+
+ Enum
+ Name(arm_fpu) Type(int)
+@@ -441,56 +471,62 @@ EnumValue
+ Enum(arm_fpu) String(vfp) Value(0)
+
+ EnumValue
+-Enum(arm_fpu) String(vfpv3) Value(1)
++Enum(arm_fpu) String(vfpv2) Value(1)
++
++EnumValue
++Enum(arm_fpu) String(vfpv3) Value(2)
++
++EnumValue
++Enum(arm_fpu) String(vfpv3-fp16) Value(3)
+
+ EnumValue
+-Enum(arm_fpu) String(vfpv3-fp16) Value(2)
++Enum(arm_fpu) String(vfpv3-d16) Value(4)
+
+ EnumValue
+-Enum(arm_fpu) String(vfpv3-d16) Value(3)
++Enum(arm_fpu) String(vfpv3-d16-fp16) Value(5)
+
+ EnumValue
+-Enum(arm_fpu) String(vfpv3-d16-fp16) Value(4)
++Enum(arm_fpu) String(vfpv3xd) Value(6)
+
+ EnumValue
+-Enum(arm_fpu) String(vfpv3xd) Value(5)
++Enum(arm_fpu) String(vfpv3xd-fp16) Value(7)
+
+ EnumValue
+-Enum(arm_fpu) String(vfpv3xd-fp16) Value(6)
++Enum(arm_fpu) String(neon) Value(8)
+
+ EnumValue
+-Enum(arm_fpu) String(neon) Value(7)
++Enum(arm_fpu) String(neon-vfpv3) Value(9)
+
+ EnumValue
+-Enum(arm_fpu) String(neon-fp16) Value(8)
++Enum(arm_fpu) String(neon-fp16) Value(10)
+
+ EnumValue
+-Enum(arm_fpu) String(vfpv4) Value(9)
++Enum(arm_fpu) String(vfpv4) Value(11)
+
+ EnumValue
+-Enum(arm_fpu) String(vfpv4-d16) Value(10)
++Enum(arm_fpu) String(vfpv4-d16) Value(12)
+
+ EnumValue
+-Enum(arm_fpu) String(fpv4-sp-d16) Value(11)
++Enum(arm_fpu) String(fpv4-sp-d16) Value(13)
+
+ EnumValue
+-Enum(arm_fpu) String(fpv5-sp-d16) Value(12)
++Enum(arm_fpu) String(fpv5-sp-d16) Value(14)
+
+ EnumValue
+-Enum(arm_fpu) String(fpv5-d16) Value(13)
++Enum(arm_fpu) String(fpv5-d16) Value(15)
+
+ EnumValue
+-Enum(arm_fpu) String(neon-vfpv4) Value(14)
++Enum(arm_fpu) String(neon-vfpv4) Value(16)
+
+ EnumValue
+-Enum(arm_fpu) String(fp-armv8) Value(15)
++Enum(arm_fpu) String(fp-armv8) Value(17)
+
+ EnumValue
+-Enum(arm_fpu) String(neon-fp-armv8) Value(16)
++Enum(arm_fpu) String(neon-fp-armv8) Value(18)
+
+ EnumValue
+-Enum(arm_fpu) String(crypto-neon-fp-armv8) Value(17)
++Enum(arm_fpu) String(crypto-neon-fp-armv8) Value(19)
+
+ EnumValue
+-Enum(arm_fpu) String(vfp3) Value(18)
++Enum(arm_fpu) String(vfp3) Value(20)
+
+--- a/src/gcc/config/arm/arm-tune.md
++++ b/src/gcc/config/arm/arm-tune.md
+@@ -32,8 +32,10 @@
+ cortexr4f,cortexr5,cortexr7,
+ cortexr8,cortexm7,cortexm4,
+ cortexm3,marvell_pj4,cortexa15cortexa7,
+- cortexa17cortexa7,cortexa32,cortexa35,
+- cortexa53,cortexa57,cortexa72,
++ cortexa17cortexa7,cortexm23,cortexa32,
++ cortexm33,cortexa35,cortexa53,
++ cortexa57,cortexa72,cortexa73,
+ exynosm1,qdf24xx,xgene1,
+- cortexa57cortexa53,cortexa72cortexa53"
++ cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,
++ cortexa73cortexa53"
+ (const (symbol_ref "((enum attr_tune) arm_tune)")))
+--- a/src/gcc/config/arm/arm.c
++++ b/src/gcc/config/arm/arm.c
+@@ -27,6 +27,7 @@
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "cfghooks.h"
+ #include "df.h"
+ #include "tm_p.h"
+@@ -61,6 +62,7 @@
+ #include "builtins.h"
+ #include "tm-constrs.h"
+ #include "rtl-iter.h"
++#include "gimplify.h"
+
+ /* This file should be included last. */
+ #include "target-def.h"
+@@ -104,7 +106,6 @@ static void arm_print_operand_address (FILE *, machine_mode, rtx);
+ static bool arm_print_operand_punct_valid_p (unsigned char code);
+ static const char *fp_const_from_val (REAL_VALUE_TYPE *);
+ static arm_cc get_arm_condition_code (rtx);
+-static HOST_WIDE_INT int_log2 (HOST_WIDE_INT);
+ static const char *output_multi_immediate (rtx *, const char *, const char *,
+ int, HOST_WIDE_INT);
+ static const char *shift_op (rtx, HOST_WIDE_INT *);
+@@ -135,6 +136,8 @@ static tree arm_handle_isr_attribute (tree *, tree, tree, int, bool *);
+ #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
+ static tree arm_handle_notshared_attribute (tree *, tree, tree, int, bool *);
+ #endif
++static tree arm_handle_cmse_nonsecure_entry (tree *, tree, tree, int, bool *);
++static tree arm_handle_cmse_nonsecure_call (tree *, tree, tree, int, bool *);
+ static void arm_output_function_epilogue (FILE *, HOST_WIDE_INT);
+ static void arm_output_function_prologue (FILE *, HOST_WIDE_INT);
+ static int arm_comp_type_attributes (const_tree, const_tree);
+@@ -164,12 +167,6 @@ static void arm_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT,
+ static bool arm_have_conditional_execution (void);
+ static bool arm_cannot_force_const_mem (machine_mode, rtx);
+ static bool arm_legitimate_constant_p (machine_mode, rtx);
+-static bool arm_rtx_costs_1 (rtx, enum rtx_code, int*, bool);
+-static bool arm_size_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *);
+-static bool arm_slowmul_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool);
+-static bool arm_fastmul_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool);
+-static bool arm_xscale_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool);
+-static bool arm_9e_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool);
+ static bool arm_rtx_costs (rtx, machine_mode, int, int, int *, bool);
+ static int arm_address_cost (rtx, machine_mode, addr_space_t, bool);
+ static int arm_register_move_cost (machine_mode, reg_class_t, reg_class_t);
+@@ -249,8 +246,6 @@ static void arm_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
+ static bool arm_output_addr_const_extra (FILE *, rtx);
+ static bool arm_allocate_stack_slots_for_args (void);
+ static bool arm_warn_func_return (tree);
+-static const char *arm_invalid_parameter_type (const_tree t);
+-static const char *arm_invalid_return_type (const_tree t);
+ static tree arm_promoted_type (const_tree t);
+ static tree arm_convert_to_type (tree type, tree expr);
+ static bool arm_scalar_mode_supported_p (machine_mode);
+@@ -300,6 +295,9 @@ static void arm_canonicalize_comparison (int *code, rtx *op0, rtx *op1,
+ static unsigned HOST_WIDE_INT arm_asan_shadow_offset (void);
+
+ static void arm_sched_fusion_priority (rtx_insn *, int, int *, int*);
++static bool arm_can_output_mi_thunk (const_tree, HOST_WIDE_INT, HOST_WIDE_INT,
++ const_tree);
++
+
+ /* Table of machine attributes. */
+ static const struct attribute_spec arm_attribute_table[] =
+@@ -343,6 +341,11 @@ static const struct attribute_spec arm_attribute_table[] =
+ { "notshared", 0, 0, false, true, false, arm_handle_notshared_attribute,
+ false },
+ #endif
++ /* ARMv8-M Security Extensions support. */
++ { "cmse_nonsecure_entry", 0, 0, true, false, false,
++ arm_handle_cmse_nonsecure_entry, false },
++ { "cmse_nonsecure_call", 0, 0, true, false, false,
++ arm_handle_cmse_nonsecure_call, true },
+ { NULL, 0, 0, false, false, false, NULL, false }
+ };
+
+@@ -463,7 +466,7 @@ static const struct attribute_spec arm_attribute_table[] =
+ #undef TARGET_ASM_OUTPUT_MI_THUNK
+ #define TARGET_ASM_OUTPUT_MI_THUNK arm_output_mi_thunk
+ #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
+-#define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall
++#define TARGET_ASM_CAN_OUTPUT_MI_THUNK arm_can_output_mi_thunk
+
+ #undef TARGET_RTX_COSTS
+ #define TARGET_RTX_COSTS arm_rtx_costs
+@@ -654,12 +657,6 @@ static const struct attribute_spec arm_attribute_table[] =
+ #undef TARGET_PREFERRED_RELOAD_CLASS
+ #define TARGET_PREFERRED_RELOAD_CLASS arm_preferred_reload_class
+
+-#undef TARGET_INVALID_PARAMETER_TYPE
+-#define TARGET_INVALID_PARAMETER_TYPE arm_invalid_parameter_type
+-
+-#undef TARGET_INVALID_RETURN_TYPE
+-#define TARGET_INVALID_RETURN_TYPE arm_invalid_return_type
+-
+ #undef TARGET_PROMOTED_TYPE
+ #define TARGET_PROMOTED_TYPE arm_promoted_type
+
+@@ -820,6 +817,13 @@ int arm_arch8 = 0;
+ /* Nonzero if this chip supports the ARMv8.1 extensions. */
+ int arm_arch8_1 = 0;
+
++/* Nonzero if this chip supports the ARM Architecture 8.2 extensions. */
++int arm_arch8_2 = 0;
++
++/* Nonzero if this chip supports the FP16 instructions extension of ARM
++ Architecture 8.2. */
++int arm_fp16_inst = 0;
++
+ /* Nonzero if this chip can benefit from load scheduling. */
+ int arm_ld_sched = 0;
+
+@@ -852,6 +856,9 @@ int arm_tune_cortex_a9 = 0;
+ interworking clean. */
+ int arm_cpp_interwork = 0;
+
++/* Nonzero if chip supports Thumb 1. */
++int arm_arch_thumb1;
++
+ /* Nonzero if chip supports Thumb 2. */
+ int arm_arch_thumb2;
+
+@@ -892,6 +899,9 @@ int arm_condexec_masklen = 0;
+ /* Nonzero if chip supports the ARMv8 CRC instructions. */
+ int arm_arch_crc = 0;
+
++/* Nonzero if chip supports the ARMv8-M security extensions. */
++int arm_arch_cmse = 0;
++
+ /* Nonzero if the core has a very small, high-latency, multiply unit. */
+ int arm_m_profile_small_mul = 0;
+
+@@ -1684,8 +1694,7 @@ const struct cpu_cost_table v7m_extra_costs =
+
+ const struct tune_params arm_slowmul_tune =
+ {
+- arm_slowmul_rtx_costs,
+- NULL, /* Insn extra costs. */
++ &generic_extra_costs, /* Insn extra costs. */
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+ &arm_default_vec_cost,
+@@ -1707,8 +1716,7 @@ const struct tune_params arm_slowmul_tune =
+
+ const struct tune_params arm_fastmul_tune =
+ {
+- arm_fastmul_rtx_costs,
+- NULL, /* Insn extra costs. */
++ &generic_extra_costs, /* Insn extra costs. */
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+ &arm_default_vec_cost,
+@@ -1733,8 +1741,7 @@ const struct tune_params arm_fastmul_tune =
+
+ const struct tune_params arm_strongarm_tune =
+ {
+- arm_fastmul_rtx_costs,
+- NULL, /* Insn extra costs. */
++ &generic_extra_costs, /* Insn extra costs. */
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+ &arm_default_vec_cost,
+@@ -1756,8 +1763,7 @@ const struct tune_params arm_strongarm_tune =
+
+ const struct tune_params arm_xscale_tune =
+ {
+- arm_xscale_rtx_costs,
+- NULL, /* Insn extra costs. */
++ &generic_extra_costs, /* Insn extra costs. */
+ xscale_sched_adjust_cost,
+ arm_default_branch_cost,
+ &arm_default_vec_cost,
+@@ -1779,8 +1785,7 @@ const struct tune_params arm_xscale_tune =
+
+ const struct tune_params arm_9e_tune =
+ {
+- arm_9e_rtx_costs,
+- NULL, /* Insn extra costs. */
++ &generic_extra_costs, /* Insn extra costs. */
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+ &arm_default_vec_cost,
+@@ -1802,8 +1807,7 @@ const struct tune_params arm_9e_tune =
+
+ const struct tune_params arm_marvell_pj4_tune =
+ {
+- arm_9e_rtx_costs,
+- NULL, /* Insn extra costs. */
++ &generic_extra_costs, /* Insn extra costs. */
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+ &arm_default_vec_cost,
+@@ -1825,8 +1829,7 @@ const struct tune_params arm_marvell_pj4_tune =
+
+ const struct tune_params arm_v6t2_tune =
+ {
+- arm_9e_rtx_costs,
+- NULL, /* Insn extra costs. */
++ &generic_extra_costs, /* Insn extra costs. */
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+ &arm_default_vec_cost,
+@@ -1850,7 +1853,6 @@ const struct tune_params arm_v6t2_tune =
+ /* Generic Cortex tuning. Use more specific tunings if appropriate. */
+ const struct tune_params arm_cortex_tune =
+ {
+- arm_9e_rtx_costs,
+ &generic_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -1873,7 +1875,6 @@ const struct tune_params arm_cortex_tune =
+
+ const struct tune_params arm_cortex_a8_tune =
+ {
+- arm_9e_rtx_costs,
+ &cortexa8_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -1896,7 +1897,6 @@ const struct tune_params arm_cortex_a8_tune =
+
+ const struct tune_params arm_cortex_a7_tune =
+ {
+- arm_9e_rtx_costs,
+ &cortexa7_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -1919,7 +1919,6 @@ const struct tune_params arm_cortex_a7_tune =
+
+ const struct tune_params arm_cortex_a15_tune =
+ {
+- arm_9e_rtx_costs,
+ &cortexa15_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -1942,7 +1941,6 @@ const struct tune_params arm_cortex_a15_tune =
+
+ const struct tune_params arm_cortex_a35_tune =
+ {
+- arm_9e_rtx_costs,
+ &cortexa53_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -1965,7 +1963,6 @@ const struct tune_params arm_cortex_a35_tune =
+
+ const struct tune_params arm_cortex_a53_tune =
+ {
+- arm_9e_rtx_costs,
+ &cortexa53_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -1988,7 +1985,6 @@ const struct tune_params arm_cortex_a53_tune =
+
+ const struct tune_params arm_cortex_a57_tune =
+ {
+- arm_9e_rtx_costs,
+ &cortexa57_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -2011,7 +2007,6 @@ const struct tune_params arm_cortex_a57_tune =
+
+ const struct tune_params arm_exynosm1_tune =
+ {
+- arm_9e_rtx_costs,
+ &exynosm1_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -2034,7 +2029,6 @@ const struct tune_params arm_exynosm1_tune =
+
+ const struct tune_params arm_xgene1_tune =
+ {
+- arm_9e_rtx_costs,
+ &xgene1_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -2055,12 +2049,33 @@ const struct tune_params arm_xgene1_tune =
+ tune_params::SCHED_AUTOPREF_OFF
+ };
+
++const struct tune_params arm_qdf24xx_tune =
++{
++ &qdf24xx_extra_costs,
++ NULL, /* Scheduler cost adjustment. */
++ arm_default_branch_cost,
++ &arm_default_vec_cost, /* Vectorizer costs. */
++ 1, /* Constant limit. */
++ 2, /* Max cond insns. */
++ 8, /* Memset max inline. */
++ 4, /* Issue rate. */
++ ARM_PREFETCH_BENEFICIAL (0, -1, 64),
++ tune_params::PREF_CONST_POOL_FALSE,
++ tune_params::PREF_LDRD_TRUE,
++ tune_params::LOG_OP_NON_SHORT_CIRCUIT_TRUE, /* Thumb. */
++ tune_params::LOG_OP_NON_SHORT_CIRCUIT_TRUE, /* ARM. */
++ tune_params::DISPARAGE_FLAGS_ALL,
++ tune_params::PREF_NEON_64_FALSE,
++ tune_params::PREF_NEON_STRINGOPS_TRUE,
++ FUSE_OPS (tune_params::FUSE_MOVW_MOVT),
++ tune_params::SCHED_AUTOPREF_FULL
++};
++
+ /* Branches can be dual-issued on Cortex-A5, so conditional execution is
+ less appealing. Set max_insns_skipped to a low value. */
+
+ const struct tune_params arm_cortex_a5_tune =
+ {
+- arm_9e_rtx_costs,
+ &cortexa5_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_cortex_a5_branch_cost,
+@@ -2083,7 +2098,6 @@ const struct tune_params arm_cortex_a5_tune =
+
+ const struct tune_params arm_cortex_a9_tune =
+ {
+- arm_9e_rtx_costs,
+ &cortexa9_extra_costs,
+ cortex_a9_sched_adjust_cost,
+ arm_default_branch_cost,
+@@ -2106,7 +2120,6 @@ const struct tune_params arm_cortex_a9_tune =
+
+ const struct tune_params arm_cortex_a12_tune =
+ {
+- arm_9e_rtx_costs,
+ &cortexa12_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+@@ -2127,6 +2140,28 @@ const struct tune_params arm_cortex_a12_tune =
+ tune_params::SCHED_AUTOPREF_OFF
+ };
+
++const struct tune_params arm_cortex_a73_tune =
++{
++ &cortexa57_extra_costs,
++ NULL, /* Sched adj cost. */
++ arm_default_branch_cost,
++ &arm_default_vec_cost, /* Vectorizer costs. */
++ 1, /* Constant limit. */
++ 2, /* Max cond insns. */
++ 8, /* Memset max inline. */
++ 2, /* Issue rate. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ tune_params::PREF_CONST_POOL_FALSE,
++ tune_params::PREF_LDRD_TRUE,
++ tune_params::LOG_OP_NON_SHORT_CIRCUIT_TRUE, /* Thumb. */
++ tune_params::LOG_OP_NON_SHORT_CIRCUIT_TRUE, /* ARM. */
++ tune_params::DISPARAGE_FLAGS_ALL,
++ tune_params::PREF_NEON_64_FALSE,
++ tune_params::PREF_NEON_STRINGOPS_TRUE,
++ FUSE_OPS (tune_params::FUSE_AES_AESMC | tune_params::FUSE_MOVW_MOVT),
++ tune_params::SCHED_AUTOPREF_FULL
++};
++
+ /* armv7m tuning. On Cortex-M4 cores for example, MOVW/MOVT take a single
+ cycle to execute each. An LDR from the constant pool also takes two cycles
+ to execute, but mildly increases pipelining opportunity (consecutive
+@@ -2136,7 +2171,6 @@ const struct tune_params arm_cortex_a12_tune =
+
+ const struct tune_params arm_v7m_tune =
+ {
+- arm_9e_rtx_costs,
+ &v7m_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_cortex_m_branch_cost,
+@@ -2161,7 +2195,6 @@ const struct tune_params arm_v7m_tune =
+
+ const struct tune_params arm_cortex_m7_tune =
+ {
+- arm_9e_rtx_costs,
+ &v7m_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_cortex_m7_branch_cost,
+@@ -2183,11 +2216,11 @@ const struct tune_params arm_cortex_m7_tune =
+ };
+
+ /* The arm_v6m_tune is duplicated from arm_cortex_tune, rather than
+- arm_v6t2_tune. It is used for cortex-m0, cortex-m1 and cortex-m0plus. */
++ arm_v6t2_tune. It is used for cortex-m0, cortex-m1, cortex-m0plus and
++ cortex-m23. */
+ const struct tune_params arm_v6m_tune =
+ {
+- arm_9e_rtx_costs,
+- NULL, /* Insn extra costs. */
++ &generic_extra_costs, /* Insn extra costs. */
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+ &arm_default_vec_cost, /* Vectorizer costs. */
+@@ -2209,8 +2242,7 @@ const struct tune_params arm_v6m_tune =
+
+ const struct tune_params arm_fa726te_tune =
+ {
+- arm_9e_rtx_costs,
+- NULL, /* Insn extra costs. */
++ &generic_extra_costs, /* Insn extra costs. */
+ fa726te_sched_adjust_cost,
+ arm_default_branch_cost,
+ &arm_default_vec_cost,
+@@ -2264,16 +2296,18 @@ static const struct processors *arm_selected_arch;
+ static const struct processors *arm_selected_cpu;
+ static const struct processors *arm_selected_tune;
+
+-/* The name of the preprocessor macro to define for this architecture. */
++/* The name of the preprocessor macro to define for this architecture. PROFILE
++ is replaced by the architecture name (eg. 8A) in arm_option_override () and
++ is thus chosen to be big enough to hold the longest architecture name. */
+
+-char arm_arch_name[] = "__ARM_ARCH_0UNK__";
++char arm_arch_name[] = "__ARM_ARCH_PROFILE__";
+
+ /* Available values for -mfpu=. */
+
+ const struct arm_fpu_desc all_fpus[] =
+ {
+-#define ARM_FPU(NAME, MODEL, REV, VFP_REGS, FEATURES) \
+- { NAME, MODEL, REV, VFP_REGS, FEATURES },
++#define ARM_FPU(NAME, REV, VFP_REGS, FEATURES) \
++ { NAME, REV, VFP_REGS, FEATURES },
+ #include "arm-fpus.def"
+ #undef ARM_FPU
+ };
+@@ -2752,8 +2786,8 @@ arm_option_check_internal (struct gcc_options *opts)
+ const struct arm_fpu_desc *fpu_desc = &all_fpus[opts->x_arm_fpu_index];
+
+ /* iWMMXt and NEON are incompatible. */
+- if (TARGET_IWMMXT && TARGET_VFP
+- && ARM_FPU_FSET_HAS (fpu_desc->features, FPU_FL_NEON))
++ if (TARGET_IWMMXT
++ && ARM_FPU_FSET_HAS (fpu_desc->features, FPU_FL_NEON))
+ error ("iWMMXt and NEON are incompatible");
+
+ /* Make sure that the processor choice does not conflict with any of the
+@@ -2907,7 +2941,8 @@ arm_option_override_internal (struct gcc_options *opts,
+ if (! opts_set->x_arm_restrict_it)
+ opts->x_arm_restrict_it = arm_arch8;
+
+- if (!TARGET_THUMB2_P (opts->x_target_flags))
++ /* ARM execution state and M profile don't have [restrict] IT. */
++ if (!TARGET_THUMB2_P (opts->x_target_flags) || !arm_arch_notm)
+ opts->x_arm_restrict_it = 0;
+
+ /* Enable -munaligned-access by default for
+@@ -2918,7 +2953,8 @@ arm_option_override_internal (struct gcc_options *opts,
+
+ Disable -munaligned-access by default for
+ - all pre-ARMv6 architecture-based processors
+- - ARMv6-M architecture-based processors. */
++ - ARMv6-M architecture-based processors
++ - ARMv8-M Baseline processors. */
+
+ if (! opts_set->x_unaligned_access)
+ {
+@@ -3152,9 +3188,6 @@ arm_option_override (void)
+ if (TARGET_APCS_REENT)
+ warning (0, "APCS reentrant code not supported. Ignored");
+
+- if (TARGET_APCS_FLOAT)
+- warning (0, "passing floating point arguments in fp regs not yet supported");
+-
+ /* Initialize boolean versions of the flags, for use in the arm.md file. */
+ arm_arch3m = ARM_FSET_HAS_CPU1 (insn_flags, FL_ARCH3M);
+ arm_arch4 = ARM_FSET_HAS_CPU1 (insn_flags, FL_ARCH4);
+@@ -3170,6 +3203,8 @@ arm_option_override (void)
+ arm_arch7em = ARM_FSET_HAS_CPU1 (insn_flags, FL_ARCH7EM);
+ arm_arch8 = ARM_FSET_HAS_CPU1 (insn_flags, FL_ARCH8);
+ arm_arch8_1 = ARM_FSET_HAS_CPU2 (insn_flags, FL2_ARCH8_1);
++ arm_arch8_2 = ARM_FSET_HAS_CPU2 (insn_flags, FL2_ARCH8_2);
++ arm_arch_thumb1 = ARM_FSET_HAS_CPU1 (insn_flags, FL_THUMB);
+ arm_arch_thumb2 = ARM_FSET_HAS_CPU1 (insn_flags, FL_THUMB2);
+ arm_arch_xscale = ARM_FSET_HAS_CPU1 (insn_flags, FL_XSCALE);
+
+@@ -3184,7 +3219,15 @@ arm_option_override (void)
+ arm_arch_no_volatile_ce = ARM_FSET_HAS_CPU1 (insn_flags, FL_NO_VOLATILE_CE);
+ arm_tune_cortex_a9 = (arm_tune == cortexa9) != 0;
+ arm_arch_crc = ARM_FSET_HAS_CPU1 (insn_flags, FL_CRC32);
++ arm_arch_cmse = ARM_FSET_HAS_CPU2 (insn_flags, FL2_CMSE);
+ arm_m_profile_small_mul = ARM_FSET_HAS_CPU1 (insn_flags, FL_SMALLMUL);
++ arm_fp16_inst = ARM_FSET_HAS_CPU2 (insn_flags, FL2_FP16INST);
++ if (arm_fp16_inst)
++ {
++ if (arm_fp16_format == ARM_FP16_FORMAT_ALTERNATIVE)
++ error ("selected fp16 options are incompatible.");
++ arm_fp16_format = ARM_FP16_FORMAT_IEEE;
++ }
+
+ /* V5 code we generate is completely interworking capable, so we turn off
+ TARGET_INTERWORK here to avoid many tests later on. */
+@@ -3222,10 +3265,8 @@ arm_option_override (void)
+ /* If soft-float is specified then don't use FPU. */
+ if (TARGET_SOFT_FLOAT)
+ arm_fpu_attr = FPU_NONE;
+- else if (TARGET_VFP)
+- arm_fpu_attr = FPU_VFP;
+ else
+- gcc_unreachable();
++ arm_fpu_attr = FPU_VFP;
+
+ if (TARGET_AAPCS_BASED)
+ {
+@@ -3245,15 +3286,14 @@ arm_option_override (void)
+ if (arm_abi == ARM_ABI_IWMMXT)
+ arm_pcs_default = ARM_PCS_AAPCS_IWMMXT;
+ else if (arm_float_abi == ARM_FLOAT_ABI_HARD
+- && TARGET_HARD_FLOAT
+- && TARGET_VFP)
++ && TARGET_HARD_FLOAT)
+ arm_pcs_default = ARM_PCS_AAPCS_VFP;
+ else
+ arm_pcs_default = ARM_PCS_AAPCS;
+ }
+ else
+ {
+- if (arm_float_abi == ARM_FLOAT_ABI_HARD && TARGET_VFP)
++ if (arm_float_abi == ARM_FLOAT_ABI_HARD)
+ sorry ("-mfloat-abi=hard and VFP");
+
+ if (arm_abi == ARM_ABI_APCS)
+@@ -3298,6 +3338,20 @@ arm_option_override (void)
+ }
+ }
+
++ if (TARGET_VXWORKS_RTP)
++ {
++ if (!global_options_set.x_arm_pic_data_is_text_relative)
++ arm_pic_data_is_text_relative = 0;
++ }
++ else if (flag_pic
++ && !arm_pic_data_is_text_relative
++ && !(global_options_set.x_target_flags & MASK_SINGLE_PIC_BASE))
++ /* When text & data segments don't have a fixed displacement, the
++ intended use is with a single, read only, pic base register.
++ Unless the user explicitly requested not to do that, set
++ it. */
++ target_flags |= MASK_SINGLE_PIC_BASE;
++
+ /* If stack checking is disabled, we can use r10 as the PIC register,
+ which keeps r9 available. The EABI specifies r9 as the PIC register. */
+ if (flag_pic && TARGET_SINGLE_PIC_BASE)
+@@ -3329,10 +3383,6 @@ arm_option_override (void)
+ arm_pic_register = pic_register;
+ }
+
+- if (TARGET_VXWORKS_RTP
+- && !global_options_set.x_arm_pic_data_is_text_relative)
+- arm_pic_data_is_text_relative = 0;
+-
+ /* Enable -mfix-cortex-m3-ldrd by default for Cortex-M3 cores. */
+ if (fix_cm3_ldrd == 2)
+ {
+@@ -3436,6 +3486,9 @@ arm_option_override (void)
+ if (target_slow_flash_data)
+ arm_disable_literal_pool = true;
+
++ if (use_cmse && !arm_arch_cmse)
++ error ("target CPU does not support ARMv8-M Security Extensions");
++
+ /* Disable scheduling fusion by default if it's not armv7 processor
+ or doesn't prefer ldrd/strd. */
+ if (flag_schedule_fusion == 2
+@@ -3568,6 +3621,9 @@ arm_compute_func_type (void)
+ else
+ type |= arm_isr_value (TREE_VALUE (a));
+
++ if (lookup_attribute ("cmse_nonsecure_entry", attr))
++ type |= ARM_FT_CMSE_ENTRY;
++
+ return type;
+ }
+
+@@ -3794,6 +3850,11 @@ use_return_insn (int iscond, rtx sibling)
+ return 0;
+ }
+
++ /* ARMv8-M nonsecure entry function need to use bxns to return and thus need
++ several instructions if anything needs to be popped. */
++ if (saved_int_regs && IS_CMSE_ENTRY (func_type))
++ return 0;
++
+ /* If there are saved registers but the LR isn't saved, then we need
+ two instructions for the return. */
+ if (saved_int_regs && !(saved_int_regs & (1 << LR_REGNUM)))
+@@ -3801,7 +3862,7 @@ use_return_insn (int iscond, rtx sibling)
+
+ /* Can't be done if any of the VFP regs are pushed,
+ since this also requires an insn. */
+- if (TARGET_HARD_FLOAT && TARGET_VFP)
++ if (TARGET_HARD_FLOAT)
+ for (regno = FIRST_VFP_REGNUM; regno <= LAST_VFP_REGNUM; regno++)
+ if (df_regs_ever_live_p (regno) && !call_used_regs[regno])
+ return 0;
+@@ -3899,7 +3960,7 @@ const_ok_for_op (HOST_WIDE_INT i, enum rtx_code code)
+ {
+ case SET:
+ /* See if we can use movw. */
+- if (arm_arch_thumb2 && (i & 0xffff0000) == 0)
++ if (TARGET_HAVE_MOVT && (i & 0xffff0000) == 0)
+ return 1;
+ else
+ /* Otherwise, try mvn. */
+@@ -4118,7 +4179,7 @@ optimal_immediate_sequence (enum rtx_code code, unsigned HOST_WIDE_INT val,
+ yield a shorter sequence, we may as well use zero. */
+ insns1 = optimal_immediate_sequence_1 (code, val, return_sequence, best_start);
+ if (best_start != 0
+- && ((((unsigned HOST_WIDE_INT) 1) << best_start) < val))
++ && ((HOST_WIDE_INT_1U << best_start) < val))
+ {
+ insns2 = optimal_immediate_sequence_1 (code, val, &tmp_sequence, 0);
+ if (insns2 <= insns1)
+@@ -4949,7 +5010,7 @@ arm_canonicalize_comparison (int *code, rtx *op0, rtx *op1,
+ if (mode == VOIDmode)
+ mode = GET_MODE (*op1);
+
+- maxval = (((unsigned HOST_WIDE_INT) 1) << (GET_MODE_BITSIZE(mode) - 1)) - 1;
++ maxval = (HOST_WIDE_INT_1U << (GET_MODE_BITSIZE (mode) - 1)) - 1;
+
+ /* For DImode, we have GE/LT/GEU/LTU comparisons. In ARM mode
+ we can also use cmp/cmpeq for GTU/LEU. GT/LE must be either
+@@ -5255,7 +5316,6 @@ arm_function_value_regno_p (const unsigned int regno)
+ if (regno == ARG_REGISTER (1)
+ || (TARGET_32BIT
+ && TARGET_AAPCS_BASED
+- && TARGET_VFP
+ && TARGET_HARD_FLOAT
+ && regno == FIRST_VFP_REGNUM)
+ || (TARGET_IWMMXT_ABI
+@@ -5274,7 +5334,7 @@ arm_apply_result_size (void)
+
+ if (TARGET_32BIT)
+ {
+- if (TARGET_HARD_FLOAT_ABI && TARGET_VFP)
++ if (TARGET_HARD_FLOAT_ABI)
+ size += 32;
+ if (TARGET_IWMMXT_ABI)
+ size += 8;
+@@ -5549,7 +5609,7 @@ aapcs_vfp_sub_candidate (const_tree type, machine_mode *modep)
+ {
+ case REAL_TYPE:
+ mode = TYPE_MODE (type);
+- if (mode != DFmode && mode != SFmode)
++ if (mode != DFmode && mode != SFmode && mode != HFmode)
+ return -1;
+
+ if (*modep == VOIDmode)
+@@ -5722,7 +5782,7 @@ use_vfp_abi (enum arm_pcs pcs_variant, bool is_double)
+ if (pcs_variant != ARM_PCS_AAPCS_LOCAL)
+ return false;
+
+- return (TARGET_32BIT && TARGET_VFP && TARGET_HARD_FLOAT &&
++ return (TARGET_32BIT && TARGET_HARD_FLOAT &&
+ (TARGET_VFP_DOUBLE || !is_double));
+ }
+
+@@ -5797,11 +5857,16 @@ aapcs_vfp_is_call_candidate (CUMULATIVE_ARGS *pcum, machine_mode mode,
+ &pcum->aapcs_vfp_rcount);
+ }
+
++/* Implement the allocate field in aapcs_cp_arg_layout. See the comment there
++ for the behaviour of this function. */
++
+ static bool
+ aapcs_vfp_allocate (CUMULATIVE_ARGS *pcum, machine_mode mode,
+ const_tree type ATTRIBUTE_UNUSED)
+ {
+- int shift = GET_MODE_SIZE (pcum->aapcs_vfp_rmode) / GET_MODE_SIZE (SFmode);
++ int rmode_size
++ = MAX (GET_MODE_SIZE (pcum->aapcs_vfp_rmode), GET_MODE_SIZE (SFmode));
++ int shift = rmode_size / GET_MODE_SIZE (SFmode);
+ unsigned mask = (1 << (shift * pcum->aapcs_vfp_rcount)) - 1;
+ int regno;
+
+@@ -5850,6 +5915,9 @@ aapcs_vfp_allocate (CUMULATIVE_ARGS *pcum, machine_mode mode,
+ return false;
+ }
+
++/* Implement the allocate_return_reg field in aapcs_cp_arg_layout. See the
++ comment there for the behaviour of this function. */
++
+ static rtx
+ aapcs_vfp_allocate_return_reg (enum arm_pcs pcs_variant ATTRIBUTE_UNUSED,
+ machine_mode mode,
+@@ -5940,13 +6008,13 @@ static struct
+ required for a return from FUNCTION_ARG. */
+ bool (*allocate) (CUMULATIVE_ARGS *, machine_mode, const_tree);
+
+- /* Return true if a result of mode MODE (or type TYPE if MODE is
+- BLKmode) is can be returned in this co-processor's registers. */
++ /* Return true if a result of mode MODE (or type TYPE if MODE is BLKmode) can
++ be returned in this co-processor's registers. */
+ bool (*is_return_candidate) (enum arm_pcs, machine_mode, const_tree);
+
+- /* Allocate and return an RTX element to hold the return type of a
+- call, this routine must not fail and will only be called if
+- is_return_candidate returned true with the same parameters. */
++ /* Allocate and return an RTX element to hold the return type of a call. This
++ routine must not fail and will only be called if is_return_candidate
++ returned true with the same parameters. */
+ rtx (*allocate_return_reg) (enum arm_pcs, machine_mode, const_tree);
+
+ /* Finish processing this argument and prepare to start processing
+@@ -6561,6 +6629,185 @@ arm_handle_notshared_attribute (tree *node,
+ }
+ #endif
+
++/* This function returns true if a function with declaration FNDECL and type
++ FNTYPE uses the stack to pass arguments or return variables and false
++ otherwise. This is used for functions with the attributes
++ 'cmse_nonsecure_call' or 'cmse_nonsecure_entry' and this function will issue
++ diagnostic messages if the stack is used. NAME is the name of the attribute
++ used. */
++
++static bool
++cmse_func_args_or_return_in_stack (tree fndecl, tree name, tree fntype)
++{
++ function_args_iterator args_iter;
++ CUMULATIVE_ARGS args_so_far_v;
++ cumulative_args_t args_so_far;
++ bool first_param = true;
++ tree arg_type, prev_arg_type = NULL_TREE, ret_type;
++
++ /* Error out if any argument is passed on the stack. */
++ arm_init_cumulative_args (&args_so_far_v, fntype, NULL_RTX, fndecl);
++ args_so_far = pack_cumulative_args (&args_so_far_v);
++ FOREACH_FUNCTION_ARGS (fntype, arg_type, args_iter)
++ {
++ rtx arg_rtx;
++ machine_mode arg_mode = TYPE_MODE (arg_type);
++
++ prev_arg_type = arg_type;
++ if (VOID_TYPE_P (arg_type))
++ continue;
++
++ if (!first_param)
++ arm_function_arg_advance (args_so_far, arg_mode, arg_type, true);
++ arg_rtx = arm_function_arg (args_so_far, arg_mode, arg_type, true);
++ if (!arg_rtx
++ || arm_arg_partial_bytes (args_so_far, arg_mode, arg_type, true))
++ {
++ error ("%qE attribute not available to functions with arguments "
++ "passed on the stack", name);
++ return true;
++ }
++ first_param = false;
++ }
++
++ /* Error out for variadic functions since we cannot control how many
++ arguments will be passed and thus stack could be used. stdarg_p () is not
++ used for the checking to avoid browsing arguments twice. */
++ if (prev_arg_type != NULL_TREE && !VOID_TYPE_P (prev_arg_type))
++ {
++ error ("%qE attribute not available to functions with variable number "
++ "of arguments", name);
++ return true;
++ }
++
++ /* Error out if return value is passed on the stack. */
++ ret_type = TREE_TYPE (fntype);
++ if (arm_return_in_memory (ret_type, fntype))
++ {
++ error ("%qE attribute not available to functions that return value on "
++ "the stack", name);
++ return true;
++ }
++ return false;
++}
++
++/* Called upon detection of the use of the cmse_nonsecure_entry attribute, this
++ function will check whether the attribute is allowed here and will add the
++ attribute to the function declaration tree or otherwise issue a warning. */
++
++static tree
++arm_handle_cmse_nonsecure_entry (tree *node, tree name,
++ tree /* args */,
++ int /* flags */,
++ bool *no_add_attrs)
++{
++ tree fndecl;
++
++ if (!use_cmse)
++ {
++ *no_add_attrs = true;
++ warning (OPT_Wattributes, "%qE attribute ignored without -mcmse option.",
++ name);
++ return NULL_TREE;
++ }
++
++ /* Ignore attribute for function types. */
++ if (TREE_CODE (*node) != FUNCTION_DECL)
++ {
++ warning (OPT_Wattributes, "%qE attribute only applies to functions",
++ name);
++ *no_add_attrs = true;
++ return NULL_TREE;
++ }
++
++ fndecl = *node;
++
++ /* Warn for static linkage functions. */
++ if (!TREE_PUBLIC (fndecl))
++ {
++ warning (OPT_Wattributes, "%qE attribute has no effect on functions "
++ "with static linkage", name);
++ *no_add_attrs = true;
++ return NULL_TREE;
++ }
++
++ *no_add_attrs |= cmse_func_args_or_return_in_stack (fndecl, name,
++ TREE_TYPE (fndecl));
++ return NULL_TREE;
++}
++
++
++/* Called upon detection of the use of the cmse_nonsecure_call attribute, this
++ function will check whether the attribute is allowed here and will add the
++ attribute to the function type tree or otherwise issue a diagnostic. The
++ reason we check this at declaration time is to only allow the use of the
++ attribute with declarations of function pointers and not function
++ declarations. This function checks NODE is of the expected type and issues
++ diagnostics otherwise using NAME. If it is not of the expected type
++ *NO_ADD_ATTRS will be set to true. */
++
++static tree
++arm_handle_cmse_nonsecure_call (tree *node, tree name,
++ tree /* args */,
++ int /* flags */,
++ bool *no_add_attrs)
++{
++ tree decl = NULL_TREE, fntype = NULL_TREE;
++ tree type;
++
++ if (!use_cmse)
++ {
++ *no_add_attrs = true;
++ warning (OPT_Wattributes, "%qE attribute ignored without -mcmse option.",
++ name);
++ return NULL_TREE;
++ }
++
++ if (TREE_CODE (*node) == VAR_DECL || TREE_CODE (*node) == TYPE_DECL)
++ {
++ decl = *node;
++ fntype = TREE_TYPE (decl);
++ }
++
++ while (fntype != NULL_TREE && TREE_CODE (fntype) == POINTER_TYPE)
++ fntype = TREE_TYPE (fntype);
++
++ if (!decl || TREE_CODE (fntype) != FUNCTION_TYPE)
++ {
++ warning (OPT_Wattributes, "%qE attribute only applies to base type of a "
++ "function pointer", name);
++ *no_add_attrs = true;
++ return NULL_TREE;
++ }
++
++ *no_add_attrs |= cmse_func_args_or_return_in_stack (NULL, name, fntype);
++
++ if (*no_add_attrs)
++ return NULL_TREE;
++
++ /* Prevent trees being shared among function types with and without
++ cmse_nonsecure_call attribute. */
++ type = TREE_TYPE (decl);
++
++ type = build_distinct_type_copy (type);
++ TREE_TYPE (decl) = type;
++ fntype = type;
++
++ while (TREE_CODE (fntype) != FUNCTION_TYPE)
++ {
++ type = fntype;
++ fntype = TREE_TYPE (fntype);
++ fntype = build_distinct_type_copy (fntype);
++ TREE_TYPE (type) = fntype;
++ }
++
++ /* Construct a type attribute and add it to the function type. */
++ tree attrs = tree_cons (get_identifier ("cmse_nonsecure_call"), NULL_TREE,
++ TYPE_ATTRIBUTES (fntype));
++ TYPE_ATTRIBUTES (fntype) = attrs;
++ return NULL_TREE;
++}
++
+ /* Return 0 if the attributes for two types are incompatible, 1 if they
+ are compatible, and 2 if they are nearly compatible (which causes a
+ warning to be generated). */
+@@ -6601,6 +6848,14 @@ arm_comp_type_attributes (const_tree type1, const_tree type2)
+ if (l1 != l2)
+ return 0;
+
++ l1 = lookup_attribute ("cmse_nonsecure_call",
++ TYPE_ATTRIBUTES (type1)) != NULL;
++ l2 = lookup_attribute ("cmse_nonsecure_call",
++ TYPE_ATTRIBUTES (type2)) != NULL;
++
++ if (l1 != l2)
++ return 0;
++
+ return 1;
+ }
+
+@@ -6711,7 +6966,7 @@ arm_function_ok_for_sibcall (tree decl, tree exp)
+ may be used both as target of the call and base register for restoring
+ the VFP registers */
+ if (TARGET_APCS_FRAME && TARGET_ARM
+- && TARGET_HARD_FLOAT && TARGET_VFP
++ && TARGET_HARD_FLOAT
+ && decl && arm_is_long_call_p (decl))
+ return false;
+
+@@ -6727,6 +6982,20 @@ arm_function_ok_for_sibcall (tree decl, tree exp)
+ if (IS_INTERRUPT (func_type))
+ return false;
+
++ /* ARMv8-M non-secure entry functions need to return with bxns which is only
++ generated for entry functions themselves. */
++ if (IS_CMSE_ENTRY (arm_current_func_type ()))
++ return false;
++
++ /* We do not allow ARMv8-M non-secure calls to be turned into sibling calls,
++ this would complicate matters for later code generation. */
++ if (TREE_CODE (exp) == CALL_EXPR)
++ {
++ tree fntype = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (exp)));
++ if (lookup_attribute ("cmse_nonsecure_call", TYPE_ATTRIBUTES (fntype)))
++ return false;
++ }
++
+ if (!VOID_TYPE_P (TREE_TYPE (DECL_RESULT (cfun->decl))))
+ {
+ /* Check that the return value locations are the same. For
+@@ -7187,8 +7456,7 @@ arm_legitimate_address_outer_p (machine_mode mode, rtx x, RTX_CODE outer,
+ return 1;
+
+ use_ldrd = (TARGET_LDRD
+- && (mode == DImode
+- || (mode == DFmode && (TARGET_SOFT_FLOAT || TARGET_VFP))));
++ && (mode == DImode || mode == DFmode));
+
+ if (code == POST_INC || code == PRE_DEC
+ || ((code == PRE_INC || code == POST_DEC)
+@@ -7273,8 +7541,7 @@ thumb2_legitimate_address_p (machine_mode mode, rtx x, int strict_p)
+ return 1;
+
+ use_ldrd = (TARGET_LDRD
+- && (mode == DImode
+- || (mode == DFmode && (TARGET_SOFT_FLOAT || TARGET_VFP))));
++ && (mode == DImode || mode == DFmode));
+
+ if (code == POST_INC || code == PRE_DEC
+ || ((code == PRE_INC || code == POST_DEC)
+@@ -7367,7 +7634,6 @@ arm_legitimate_index_p (machine_mode mode, rtx index, RTX_CODE outer,
+
+ /* Standard coprocessor addressing modes. */
+ if (TARGET_HARD_FLOAT
+- && TARGET_VFP
+ && (mode == SFmode || mode == DFmode))
+ return (code == CONST_INT && INTVAL (index) < 1024
+ && INTVAL (index) > -1024
+@@ -7487,7 +7753,6 @@ thumb2_legitimate_index_p (machine_mode mode, rtx index, int strict_p)
+ /* ??? Combine arm and thumb2 coprocessor addressing modes. */
+ /* Standard coprocessor addressing modes. */
+ if (TARGET_HARD_FLOAT
+- && TARGET_VFP
+ && (mode == SFmode || mode == DFmode))
+ return (code == CONST_INT && INTVAL (index) < 1024
+ /* Thumb-2 allows only > -256 index range for it's core register
+@@ -8033,8 +8298,7 @@ arm_legitimize_address (rtx x, rtx orig_x, machine_mode mode)
+
+ /* VFP addressing modes actually allow greater offsets, but for
+ now we just stick with the lowest common denominator. */
+- if (mode == DImode
+- || ((TARGET_SOFT_FLOAT || TARGET_VFP) && mode == DFmode))
++ if (mode == DImode || mode == DFmode)
+ {
+ low_n = n & 0x0f;
+ n &= ~0x0f;
+@@ -8226,6 +8490,12 @@ arm_legitimate_constant_p_1 (machine_mode, rtx x)
+ static bool
+ thumb_legitimate_constant_p (machine_mode mode ATTRIBUTE_UNUSED, rtx x)
+ {
++ /* Splitters for TARGET_USE_MOVT call arm_emit_movpair which creates high
++ RTX. These RTX must therefore be allowed for Thumb-1 so that when run
++ for ARMv8-M Baseline or later the result is valid. */
++ if (TARGET_HAVE_MOVT && GET_CODE (x) == HIGH)
++ x = XEXP (x, 0);
++
+ return (CONST_INT_P (x)
+ || CONST_DOUBLE_P (x)
+ || CONSTANT_ADDRESS_P (x)
+@@ -8312,7 +8582,9 @@ thumb1_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer)
+ case CONST_INT:
+ if (outer == SET)
+ {
+- if ((unsigned HOST_WIDE_INT) INTVAL (x) < 256)
++ if (UINTVAL (x) < 256
++ /* 16-bit constant. */
++ || (TARGET_HAVE_MOVT && !(INTVAL (x) & 0xffff0000)))
+ return 0;
+ if (thumb_shiftable_const (INTVAL (x)))
+ return COSTS_N_INSNS (2);
+@@ -8329,8 +8601,8 @@ thumb1_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer)
+ int i;
+ /* This duplicates the tests in the andsi3 expander. */
+ for (i = 9; i <= 31; i++)
+- if ((((HOST_WIDE_INT) 1) << i) - 1 == INTVAL (x)
+- || (((HOST_WIDE_INT) 1) << i) - 1 == ~INTVAL (x))
++ if ((HOST_WIDE_INT_1 << i) - 1 == INTVAL (x)
++ || (HOST_WIDE_INT_1 << i) - 1 == ~INTVAL (x))
+ return COSTS_N_INSNS (2);
+ }
+ else if (outer == ASHIFT || outer == ASHIFTRT
+@@ -8393,1006 +8665,162 @@ thumb1_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer)
+ }
+ }
+
+-static inline bool
+-arm_rtx_costs_1 (rtx x, enum rtx_code outer, int* total, bool speed)
++/* Estimates the size cost of thumb1 instructions.
++ For now most of the code is copied from thumb1_rtx_costs. We need more
++ fine grain tuning when we have more related test cases. */
++static inline int
++thumb1_size_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer)
+ {
+ machine_mode mode = GET_MODE (x);
+- enum rtx_code subcode;
+- rtx operand;
+- enum rtx_code code = GET_CODE (x);
+- *total = 0;
++ int words, cost;
+
+ switch (code)
+ {
+- case MEM:
+- /* Memory costs quite a lot for the first word, but subsequent words
+- load at the equivalent of a single insn each. */
+- *total = COSTS_N_INSNS (2 + ARM_NUM_REGS (mode));
+- return true;
++ case ASHIFT:
++ case ASHIFTRT:
++ case LSHIFTRT:
++ case ROTATERT:
++ return (mode == SImode) ? COSTS_N_INSNS (1) : COSTS_N_INSNS (2);
+
+- case DIV:
+- case MOD:
+- case UDIV:
+- case UMOD:
+- if (TARGET_HARD_FLOAT && mode == SFmode)
+- *total = COSTS_N_INSNS (2);
+- else if (TARGET_HARD_FLOAT && mode == DFmode && !TARGET_VFP_SINGLE)
+- *total = COSTS_N_INSNS (4);
+- else
+- *total = COSTS_N_INSNS (20);
+- return false;
++ case PLUS:
++ case MINUS:
++ /* Thumb-1 needs two instructions to fulfill shiftadd/shiftsub0/shiftsub1
++ defined by RTL expansion, especially for the expansion of
++ multiplication. */
++ if ((GET_CODE (XEXP (x, 0)) == MULT
++ && power_of_two_operand (XEXP (XEXP (x,0),1), SImode))
++ || (GET_CODE (XEXP (x, 1)) == MULT
++ && power_of_two_operand (XEXP (XEXP (x, 1), 1), SImode)))
++ return COSTS_N_INSNS (2);
++ /* On purpose fall through for normal RTX. */
++ case COMPARE:
++ case NEG:
++ case NOT:
++ return COSTS_N_INSNS (1);
+
+- case ROTATE:
+- if (REG_P (XEXP (x, 1)))
+- *total = COSTS_N_INSNS (1); /* Need to subtract from 32 */
+- else if (!CONST_INT_P (XEXP (x, 1)))
+- *total = rtx_cost (XEXP (x, 1), mode, code, 1, speed);
++ case MULT:
++ if (CONST_INT_P (XEXP (x, 1)))
++ {
++ /* Thumb1 mul instruction can't operate on const. We must Load it
++ into a register first. */
++ int const_size = thumb1_size_rtx_costs (XEXP (x, 1), CONST_INT, SET);
++ /* For the targets which have a very small and high-latency multiply
++ unit, we prefer to synthesize the mult with up to 5 instructions,
++ giving a good balance between size and performance. */
++ if (arm_arch6m && arm_m_profile_small_mul)
++ return COSTS_N_INSNS (5);
++ else
++ return COSTS_N_INSNS (1) + const_size;
++ }
++ return COSTS_N_INSNS (1);
+
+- /* Fall through */
+- case ROTATERT:
+- if (mode != SImode)
+- {
+- *total += COSTS_N_INSNS (4);
+- return true;
+- }
++ case SET:
++ /* A SET doesn't have a mode, so let's look at the SET_DEST to get
++ the mode. */
++ words = ARM_NUM_INTS (GET_MODE_SIZE (GET_MODE (SET_DEST (x))));
++ cost = COSTS_N_INSNS (words);
++ if (satisfies_constraint_J (SET_SRC (x))
++ || satisfies_constraint_K (SET_SRC (x))
++ /* Too big an immediate for a 2-byte mov, using MOVT. */
++ || (CONST_INT_P (SET_SRC (x))
++ && UINTVAL (SET_SRC (x)) >= 256
++ && TARGET_HAVE_MOVT
++ && satisfies_constraint_j (SET_SRC (x)))
++ /* thumb1_movdi_insn. */
++ || ((words > 1) && MEM_P (SET_SRC (x))))
++ cost += COSTS_N_INSNS (1);
++ return cost;
+
+- /* Fall through */
+- case ASHIFT: case LSHIFTRT: case ASHIFTRT:
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- if (mode == DImode)
+- {
+- *total += COSTS_N_INSNS (3);
+- return true;
+- }
++ case CONST_INT:
++ if (outer == SET)
++ {
++ if (UINTVAL (x) < 256)
++ return COSTS_N_INSNS (1);
++ /* movw is 4byte long. */
++ if (TARGET_HAVE_MOVT && !(INTVAL (x) & 0xffff0000))
++ return COSTS_N_INSNS (2);
++ /* See split "TARGET_THUMB1 && satisfies_constraint_J". */
++ if (INTVAL (x) >= -255 && INTVAL (x) <= -1)
++ return COSTS_N_INSNS (2);
++ /* See split "TARGET_THUMB1 && satisfies_constraint_K". */
++ if (thumb_shiftable_const (INTVAL (x)))
++ return COSTS_N_INSNS (2);
++ return COSTS_N_INSNS (3);
++ }
++ else if ((outer == PLUS || outer == COMPARE)
++ && INTVAL (x) < 256 && INTVAL (x) > -256)
++ return 0;
++ else if ((outer == IOR || outer == XOR || outer == AND)
++ && INTVAL (x) < 256 && INTVAL (x) >= -256)
++ return COSTS_N_INSNS (1);
++ else if (outer == AND)
++ {
++ int i;
++ /* This duplicates the tests in the andsi3 expander. */
++ for (i = 9; i <= 31; i++)
++ if ((HOST_WIDE_INT_1 << i) - 1 == INTVAL (x)
++ || (HOST_WIDE_INT_1 << i) - 1 == ~INTVAL (x))
++ return COSTS_N_INSNS (2);
++ }
++ else if (outer == ASHIFT || outer == ASHIFTRT
++ || outer == LSHIFTRT)
++ return 0;
++ return COSTS_N_INSNS (2);
+
+- *total += COSTS_N_INSNS (1);
+- /* Increase the cost of complex shifts because they aren't any faster,
+- and reduce dual issue opportunities. */
+- if (arm_tune_cortex_a9
+- && outer != SET && !CONST_INT_P (XEXP (x, 1)))
+- ++*total;
++ case CONST:
++ case CONST_DOUBLE:
++ case LABEL_REF:
++ case SYMBOL_REF:
++ return COSTS_N_INSNS (3);
+
+- return true;
++ case UDIV:
++ case UMOD:
++ case DIV:
++ case MOD:
++ return 100;
+
+- case MINUS:
+- if (mode == DImode)
+- {
+- *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+- if (CONST_INT_P (XEXP (x, 0))
+- && const_ok_for_arm (INTVAL (XEXP (x, 0))))
+- {
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- return true;
+- }
+-
+- if (CONST_INT_P (XEXP (x, 1))
+- && const_ok_for_arm (INTVAL (XEXP (x, 1))))
+- {
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- return true;
+- }
+-
+- return false;
+- }
+-
+- if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+- {
+- if (TARGET_HARD_FLOAT
+- && (mode == SFmode
+- || (mode == DFmode && !TARGET_VFP_SINGLE)))
+- {
+- *total = COSTS_N_INSNS (1);
+- if (CONST_DOUBLE_P (XEXP (x, 0))
+- && arm_const_double_rtx (XEXP (x, 0)))
+- {
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- return true;
+- }
+-
+- if (CONST_DOUBLE_P (XEXP (x, 1))
+- && arm_const_double_rtx (XEXP (x, 1)))
+- {
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- return true;
+- }
+-
+- return false;
+- }
+- *total = COSTS_N_INSNS (20);
+- return false;
+- }
+-
+- *total = COSTS_N_INSNS (1);
+- if (CONST_INT_P (XEXP (x, 0))
+- && const_ok_for_arm (INTVAL (XEXP (x, 0))))
+- {
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- return true;
+- }
+-
+- subcode = GET_CODE (XEXP (x, 1));
+- if (subcode == ASHIFT || subcode == ASHIFTRT
+- || subcode == LSHIFTRT
+- || subcode == ROTATE || subcode == ROTATERT)
+- {
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- *total += rtx_cost (XEXP (XEXP (x, 1), 0), mode, subcode, 0, speed);
+- return true;
+- }
+-
+- /* A shift as a part of RSB costs no more than RSB itself. */
+- if (GET_CODE (XEXP (x, 0)) == MULT
+- && power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode))
+- {
+- *total += rtx_cost (XEXP (XEXP (x, 0), 0), mode, code, 0, speed);
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- return true;
+- }
+-
+- if (subcode == MULT
+- && power_of_two_operand (XEXP (XEXP (x, 1), 1), SImode))
+- {
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- *total += rtx_cost (XEXP (XEXP (x, 1), 0), mode, subcode, 0, speed);
+- return true;
+- }
+-
+- if (GET_RTX_CLASS (GET_CODE (XEXP (x, 1))) == RTX_COMPARE
+- || GET_RTX_CLASS (GET_CODE (XEXP (x, 1))) == RTX_COMM_COMPARE)
+- {
+- *total = COSTS_N_INSNS (1) + rtx_cost (XEXP (x, 0), mode, code,
+- 0, speed);
+- if (REG_P (XEXP (XEXP (x, 1), 0))
+- && REGNO (XEXP (XEXP (x, 1), 0)) != CC_REGNUM)
+- *total += COSTS_N_INSNS (1);
+-
+- return true;
+- }
+-
+- /* Fall through */
+-
+- case PLUS:
+- if (code == PLUS && arm_arch6 && mode == SImode
+- && (GET_CODE (XEXP (x, 0)) == ZERO_EXTEND
+- || GET_CODE (XEXP (x, 0)) == SIGN_EXTEND))
+- {
+- *total = COSTS_N_INSNS (1);
+- *total += rtx_cost (XEXP (XEXP (x, 0), 0), VOIDmode,
+- GET_CODE (XEXP (x, 0)), 0, speed);
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- return true;
+- }
+-
+- /* MLA: All arguments must be registers. We filter out
+- multiplication by a power of two, so that we fall down into
+- the code below. */
+- if (GET_CODE (XEXP (x, 0)) == MULT
+- && !power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode))
+- {
+- /* The cost comes from the cost of the multiply. */
+- return false;
+- }
+-
+- if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+- {
+- if (TARGET_HARD_FLOAT
+- && (mode == SFmode
+- || (mode == DFmode && !TARGET_VFP_SINGLE)))
+- {
+- *total = COSTS_N_INSNS (1);
+- if (CONST_DOUBLE_P (XEXP (x, 1))
+- && arm_const_double_rtx (XEXP (x, 1)))
+- {
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- return true;
+- }
+-
+- return false;
+- }
+-
+- *total = COSTS_N_INSNS (20);
+- return false;
+- }
+-
+- if (GET_RTX_CLASS (GET_CODE (XEXP (x, 0))) == RTX_COMPARE
+- || GET_RTX_CLASS (GET_CODE (XEXP (x, 0))) == RTX_COMM_COMPARE)
+- {
+- *total = COSTS_N_INSNS (1) + rtx_cost (XEXP (x, 1), mode, code,
+- 1, speed);
+- if (REG_P (XEXP (XEXP (x, 0), 0))
+- && REGNO (XEXP (XEXP (x, 0), 0)) != CC_REGNUM)
+- *total += COSTS_N_INSNS (1);
+- return true;
+- }
+-
+- /* Fall through */
+-
+- case AND: case XOR: case IOR:
+-
+- /* Normally the frame registers will be spilt into reg+const during
+- reload, so it is a bad idea to combine them with other instructions,
+- since then they might not be moved outside of loops. As a compromise
+- we allow integration with ops that have a constant as their second
+- operand. */
+- if (REG_OR_SUBREG_REG (XEXP (x, 0))
+- && ARM_FRAME_RTX (REG_OR_SUBREG_RTX (XEXP (x, 0)))
+- && !CONST_INT_P (XEXP (x, 1)))
+- *total = COSTS_N_INSNS (1);
+-
+- if (mode == DImode)
+- {
+- *total += COSTS_N_INSNS (2);
+- if (CONST_INT_P (XEXP (x, 1))
+- && const_ok_for_op (INTVAL (XEXP (x, 1)), code))
+- {
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- return true;
+- }
+-
+- return false;
+- }
+-
+- *total += COSTS_N_INSNS (1);
+- if (CONST_INT_P (XEXP (x, 1))
+- && const_ok_for_op (INTVAL (XEXP (x, 1)), code))
+- {
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- return true;
+- }
+- subcode = GET_CODE (XEXP (x, 0));
+- if (subcode == ASHIFT || subcode == ASHIFTRT
+- || subcode == LSHIFTRT
+- || subcode == ROTATE || subcode == ROTATERT)
+- {
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- *total += rtx_cost (XEXP (XEXP (x, 0), 0), mode, subcode, 0, speed);
+- return true;
+- }
+-
+- if (subcode == MULT
+- && power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode))
+- {
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- *total += rtx_cost (XEXP (XEXP (x, 0), 0), mode, subcode, 0, speed);
+- return true;
+- }
+-
+- if (subcode == UMIN || subcode == UMAX
+- || subcode == SMIN || subcode == SMAX)
+- {
+- *total = COSTS_N_INSNS (3);
+- return true;
+- }
+-
+- return false;
+-
+- case MULT:
+- /* This should have been handled by the CPU specific routines. */
+- gcc_unreachable ();
+-
+- case TRUNCATE:
+- if (arm_arch3m && mode == SImode
+- && GET_CODE (XEXP (x, 0)) == LSHIFTRT
+- && GET_CODE (XEXP (XEXP (x, 0), 0)) == MULT
+- && (GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0))
+- == GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 1)))
+- && (GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == ZERO_EXTEND
+- || GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == SIGN_EXTEND))
+- {
+- *total = rtx_cost (XEXP (XEXP (x, 0), 0), VOIDmode, LSHIFTRT,
+- 0, speed);
+- return true;
+- }
+- *total = COSTS_N_INSNS (2); /* Plus the cost of the MULT */
+- return false;
+-
+- case NEG:
+- if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+- {
+- if (TARGET_HARD_FLOAT
+- && (mode == SFmode
+- || (mode == DFmode && !TARGET_VFP_SINGLE)))
+- {
+- *total = COSTS_N_INSNS (1);
+- return false;
+- }
+- *total = COSTS_N_INSNS (2);
+- return false;
+- }
+-
+- /* Fall through */
+- case NOT:
+- *total = COSTS_N_INSNS (ARM_NUM_REGS(mode));
+- if (mode == SImode && code == NOT)
+- {
+- subcode = GET_CODE (XEXP (x, 0));
+- if (subcode == ASHIFT || subcode == ASHIFTRT
+- || subcode == LSHIFTRT
+- || subcode == ROTATE || subcode == ROTATERT
+- || (subcode == MULT
+- && power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode)))
+- {
+- *total += rtx_cost (XEXP (XEXP (x, 0), 0), mode, subcode,
+- 0, speed);
+- /* Register shifts cost an extra cycle. */
+- if (!CONST_INT_P (XEXP (XEXP (x, 0), 1)))
+- *total += COSTS_N_INSNS (1) + rtx_cost (XEXP (XEXP (x, 0), 1),
+- mode, subcode,
+- 1, speed);
+- return true;
+- }
+- }
+-
+- return false;
+-
+- case IF_THEN_ELSE:
+- if (GET_CODE (XEXP (x, 1)) == PC || GET_CODE (XEXP (x, 2)) == PC)
+- {
+- *total = COSTS_N_INSNS (4);
+- return true;
+- }
+-
+- operand = XEXP (x, 0);
+-
+- if (!((GET_RTX_CLASS (GET_CODE (operand)) == RTX_COMPARE
+- || GET_RTX_CLASS (GET_CODE (operand)) == RTX_COMM_COMPARE)
+- && REG_P (XEXP (operand, 0))
+- && REGNO (XEXP (operand, 0)) == CC_REGNUM))
+- *total += COSTS_N_INSNS (1);
+- *total += rtx_cost (XEXP (x, 1), VOIDmode, code, 1, speed);
+- *total += rtx_cost (XEXP (x, 2), VOIDmode, code, 2, speed);
+- return true;
+-
+- case NE:
+- if (mode == SImode && XEXP (x, 1) == const0_rtx)
+- {
+- *total = COSTS_N_INSNS (2) + rtx_cost (XEXP (x, 0), mode, code,
+- 0, speed);
+- return true;
+- }
+- goto scc_insn;
+-
+- case GE:
+- if ((!REG_P (XEXP (x, 0)) || REGNO (XEXP (x, 0)) != CC_REGNUM)
+- && mode == SImode && XEXP (x, 1) == const0_rtx)
+- {
+- *total = COSTS_N_INSNS (2) + rtx_cost (XEXP (x, 0), mode, code,
+- 0, speed);
+- return true;
+- }
+- goto scc_insn;
+-
+- case LT:
+- if ((!REG_P (XEXP (x, 0)) || REGNO (XEXP (x, 0)) != CC_REGNUM)
+- && mode == SImode && XEXP (x, 1) == const0_rtx)
+- {
+- *total = COSTS_N_INSNS (1) + rtx_cost (XEXP (x, 0), mode, code,
+- 0, speed);
+- return true;
+- }
+- goto scc_insn;
+-
+- case EQ:
+- case GT:
+- case LE:
+- case GEU:
+- case LTU:
+- case GTU:
+- case LEU:
+- case UNORDERED:
+- case ORDERED:
+- case UNEQ:
+- case UNGE:
+- case UNLT:
+- case UNGT:
+- case UNLE:
+- scc_insn:
+- /* SCC insns. In the case where the comparison has already been
+- performed, then they cost 2 instructions. Otherwise they need
+- an additional comparison before them. */
+- *total = COSTS_N_INSNS (2);
+- if (REG_P (XEXP (x, 0)) && REGNO (XEXP (x, 0)) == CC_REGNUM)
+- {
+- return true;
+- }
+-
+- /* Fall through */
+- case COMPARE:
+- if (REG_P (XEXP (x, 0)) && REGNO (XEXP (x, 0)) == CC_REGNUM)
+- {
+- *total = 0;
+- return true;
+- }
+-
+- *total += COSTS_N_INSNS (1);
+- if (CONST_INT_P (XEXP (x, 1))
+- && const_ok_for_op (INTVAL (XEXP (x, 1)), code))
+- {
+- *total += rtx_cost (XEXP (x, 0), VOIDmode, code, 0, speed);
+- return true;
+- }
+-
+- subcode = GET_CODE (XEXP (x, 0));
+- if (subcode == ASHIFT || subcode == ASHIFTRT
+- || subcode == LSHIFTRT
+- || subcode == ROTATE || subcode == ROTATERT)
+- {
+- mode = GET_MODE (XEXP (x, 0));
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- *total += rtx_cost (XEXP (XEXP (x, 0), 0), mode, subcode, 0, speed);
+- return true;
+- }
+-
+- if (subcode == MULT
+- && power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode))
+- {
+- mode = GET_MODE (XEXP (x, 0));
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- *total += rtx_cost (XEXP (XEXP (x, 0), 0), mode, subcode, 0, speed);
+- return true;
+- }
+-
+- return false;
+-
+- case UMIN:
+- case UMAX:
+- case SMIN:
+- case SMAX:
+- *total = COSTS_N_INSNS (2) + rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- if (!CONST_INT_P (XEXP (x, 1))
+- || !const_ok_for_arm (INTVAL (XEXP (x, 1))))
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed);
+- return true;
+-
+- case ABS:
+- if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+- {
+- if (TARGET_HARD_FLOAT
+- && (mode == SFmode
+- || (mode == DFmode && !TARGET_VFP_SINGLE)))
+- {
+- *total = COSTS_N_INSNS (1);
+- return false;
+- }
+- *total = COSTS_N_INSNS (20);
+- return false;
+- }
+- *total = COSTS_N_INSNS (1);
+- if (mode == DImode)
+- *total += COSTS_N_INSNS (3);
+- return false;
+-
+- case SIGN_EXTEND:
+- case ZERO_EXTEND:
+- *total = 0;
+- if (GET_MODE_CLASS (mode) == MODE_INT)
+- {
+- rtx op = XEXP (x, 0);
+- machine_mode opmode = GET_MODE (op);
+-
+- if (mode == DImode)
+- *total += COSTS_N_INSNS (1);
+-
+- if (opmode != SImode)
+- {
+- if (MEM_P (op))
+- {
+- /* If !arm_arch4, we use one of the extendhisi2_mem
+- or movhi_bytes patterns for HImode. For a QImode
+- sign extension, we first zero-extend from memory
+- and then perform a shift sequence. */
+- if (!arm_arch4 && (opmode != QImode || code == SIGN_EXTEND))
+- *total += COSTS_N_INSNS (2);
+- }
+- else if (arm_arch6)
+- *total += COSTS_N_INSNS (1);
+-
+- /* We don't have the necessary insn, so we need to perform some
+- other operation. */
+- else if (TARGET_ARM && code == ZERO_EXTEND && mode == QImode)
+- /* An and with constant 255. */
+- *total += COSTS_N_INSNS (1);
+- else
+- /* A shift sequence. Increase costs slightly to avoid
+- combining two shifts into an extend operation. */
+- *total += COSTS_N_INSNS (2) + 1;
+- }
+-
+- return false;
+- }
+-
+- switch (GET_MODE (XEXP (x, 0)))
+- {
+- case V8QImode:
+- case V4HImode:
+- case V2SImode:
+- case V4QImode:
+- case V2HImode:
+- *total = COSTS_N_INSNS (1);
+- return false;
+-
+- default:
+- gcc_unreachable ();
+- }
+- gcc_unreachable ();
+-
+- case ZERO_EXTRACT:
+- case SIGN_EXTRACT:
+- mode = GET_MODE (XEXP (x, 0));
+- *total = COSTS_N_INSNS (1) + rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- return true;
+-
+- case CONST_INT:
+- if (const_ok_for_arm (INTVAL (x))
+- || const_ok_for_arm (~INTVAL (x)))
+- *total = COSTS_N_INSNS (1);
+- else
+- *total = COSTS_N_INSNS (arm_gen_constant (SET, mode, NULL_RTX,
+- INTVAL (x), NULL_RTX,
+- NULL_RTX, 0, 0));
+- return true;
+-
+- case CONST:
+- case LABEL_REF:
+- case SYMBOL_REF:
+- *total = COSTS_N_INSNS (3);
+- return true;
+-
+- case HIGH:
+- *total = COSTS_N_INSNS (1);
+- return true;
+-
+- case LO_SUM:
+- *total = COSTS_N_INSNS (1);
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- return true;
+-
+- case CONST_DOUBLE:
+- if (TARGET_HARD_FLOAT && vfp3_const_double_rtx (x)
+- && (mode == SFmode || !TARGET_VFP_SINGLE))
+- *total = COSTS_N_INSNS (1);
+- else
+- *total = COSTS_N_INSNS (4);
+- return true;
+-
+- case SET:
+- /* The vec_extract patterns accept memory operands that require an
+- address reload. Account for the cost of that reload to give the
+- auto-inc-dec pass an incentive to try to replace them. */
+- if (TARGET_NEON && MEM_P (SET_DEST (x))
+- && GET_CODE (SET_SRC (x)) == VEC_SELECT)
+- {
+- mode = GET_MODE (SET_DEST (x));
+- *total = rtx_cost (SET_DEST (x), mode, code, 0, speed);
+- if (!neon_vector_mem_operand (SET_DEST (x), 2, true))
+- *total += COSTS_N_INSNS (1);
+- return true;
+- }
+- /* Likewise for the vec_set patterns. */
+- if (TARGET_NEON && GET_CODE (SET_SRC (x)) == VEC_MERGE
+- && GET_CODE (XEXP (SET_SRC (x), 0)) == VEC_DUPLICATE
+- && MEM_P (XEXP (XEXP (SET_SRC (x), 0), 0)))
+- {
+- rtx mem = XEXP (XEXP (SET_SRC (x), 0), 0);
+- mode = GET_MODE (SET_DEST (x));
+- *total = rtx_cost (mem, mode, code, 0, speed);
+- if (!neon_vector_mem_operand (mem, 2, true))
+- *total += COSTS_N_INSNS (1);
+- return true;
+- }
+- return false;
+-
+- case UNSPEC:
+- /* We cost this as high as our memory costs to allow this to
+- be hoisted from loops. */
+- if (XINT (x, 1) == UNSPEC_PIC_UNIFIED)
+- {
+- *total = COSTS_N_INSNS (2 + ARM_NUM_REGS (mode));
+- }
+- return true;
+-
+- case CONST_VECTOR:
+- if (TARGET_NEON
+- && TARGET_HARD_FLOAT
+- && outer == SET
+- && (VALID_NEON_DREG_MODE (mode) || VALID_NEON_QREG_MODE (mode))
+- && neon_immediate_valid_for_move (x, mode, NULL, NULL))
+- *total = COSTS_N_INSNS (1);
+- else
+- *total = COSTS_N_INSNS (4);
+- return true;
+-
+- default:
+- *total = COSTS_N_INSNS (4);
+- return false;
+- }
+-}
+-
+-/* Estimates the size cost of thumb1 instructions.
+- For now most of the code is copied from thumb1_rtx_costs. We need more
+- fine grain tuning when we have more related test cases. */
+-static inline int
+-thumb1_size_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer)
+-{
+- machine_mode mode = GET_MODE (x);
+- int words;
+-
+- switch (code)
+- {
+- case ASHIFT:
+- case ASHIFTRT:
+- case LSHIFTRT:
+- case ROTATERT:
+- return (mode == SImode) ? COSTS_N_INSNS (1) : COSTS_N_INSNS (2);
+-
+- case PLUS:
+- case MINUS:
+- /* Thumb-1 needs two instructions to fulfill shiftadd/shiftsub0/shiftsub1
+- defined by RTL expansion, especially for the expansion of
+- multiplication. */
+- if ((GET_CODE (XEXP (x, 0)) == MULT
+- && power_of_two_operand (XEXP (XEXP (x,0),1), SImode))
+- || (GET_CODE (XEXP (x, 1)) == MULT
+- && power_of_two_operand (XEXP (XEXP (x, 1), 1), SImode)))
+- return COSTS_N_INSNS (2);
+- /* On purpose fall through for normal RTX. */
+- case COMPARE:
+- case NEG:
+- case NOT:
+- return COSTS_N_INSNS (1);
+-
+- case MULT:
+- if (CONST_INT_P (XEXP (x, 1)))
+- {
+- /* Thumb1 mul instruction can't operate on const. We must Load it
+- into a register first. */
+- int const_size = thumb1_size_rtx_costs (XEXP (x, 1), CONST_INT, SET);
+- /* For the targets which have a very small and high-latency multiply
+- unit, we prefer to synthesize the mult with up to 5 instructions,
+- giving a good balance between size and performance. */
+- if (arm_arch6m && arm_m_profile_small_mul)
+- return COSTS_N_INSNS (5);
+- else
+- return COSTS_N_INSNS (1) + const_size;
+- }
+- return COSTS_N_INSNS (1);
+-
+- case SET:
+- /* A SET doesn't have a mode, so let's look at the SET_DEST to get
+- the mode. */
+- words = ARM_NUM_INTS (GET_MODE_SIZE (GET_MODE (SET_DEST (x))));
+- return COSTS_N_INSNS (words)
+- + COSTS_N_INSNS (1) * (satisfies_constraint_J (SET_SRC (x))
+- || satisfies_constraint_K (SET_SRC (x))
+- /* thumb1_movdi_insn. */
+- || ((words > 1) && MEM_P (SET_SRC (x))));
+-
+- case CONST_INT:
+- if (outer == SET)
+- {
+- if ((unsigned HOST_WIDE_INT) INTVAL (x) < 256)
+- return COSTS_N_INSNS (1);
+- /* See split "TARGET_THUMB1 && satisfies_constraint_J". */
+- if (INTVAL (x) >= -255 && INTVAL (x) <= -1)
+- return COSTS_N_INSNS (2);
+- /* See split "TARGET_THUMB1 && satisfies_constraint_K". */
+- if (thumb_shiftable_const (INTVAL (x)))
+- return COSTS_N_INSNS (2);
+- return COSTS_N_INSNS (3);
+- }
+- else if ((outer == PLUS || outer == COMPARE)
+- && INTVAL (x) < 256 && INTVAL (x) > -256)
+- return 0;
+- else if ((outer == IOR || outer == XOR || outer == AND)
+- && INTVAL (x) < 256 && INTVAL (x) >= -256)
+- return COSTS_N_INSNS (1);
+- else if (outer == AND)
+- {
+- int i;
+- /* This duplicates the tests in the andsi3 expander. */
+- for (i = 9; i <= 31; i++)
+- if ((((HOST_WIDE_INT) 1) << i) - 1 == INTVAL (x)
+- || (((HOST_WIDE_INT) 1) << i) - 1 == ~INTVAL (x))
+- return COSTS_N_INSNS (2);
+- }
+- else if (outer == ASHIFT || outer == ASHIFTRT
+- || outer == LSHIFTRT)
+- return 0;
+- return COSTS_N_INSNS (2);
+-
+- case CONST:
+- case CONST_DOUBLE:
+- case LABEL_REF:
+- case SYMBOL_REF:
+- return COSTS_N_INSNS (3);
+-
+- case UDIV:
+- case UMOD:
+- case DIV:
+- case MOD:
+- return 100;
+-
+- case TRUNCATE:
+- return 99;
+-
+- case AND:
+- case XOR:
+- case IOR:
+- return COSTS_N_INSNS (1);
+-
+- case MEM:
+- return (COSTS_N_INSNS (1)
+- + COSTS_N_INSNS (1)
+- * ((GET_MODE_SIZE (mode) - 1) / UNITS_PER_WORD)
+- + ((GET_CODE (x) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x))
+- ? COSTS_N_INSNS (1) : 0));
+-
+- case IF_THEN_ELSE:
+- /* XXX a guess. */
+- if (GET_CODE (XEXP (x, 1)) == PC || GET_CODE (XEXP (x, 2)) == PC)
+- return 14;
+- return 2;
+-
+- case ZERO_EXTEND:
+- /* XXX still guessing. */
+- switch (GET_MODE (XEXP (x, 0)))
+- {
+- case QImode:
+- return (1 + (mode == DImode ? 4 : 0)
+- + (MEM_P (XEXP (x, 0)) ? 10 : 0));
+-
+- case HImode:
+- return (4 + (mode == DImode ? 4 : 0)
+- + (MEM_P (XEXP (x, 0)) ? 10 : 0));
+-
+- case SImode:
+- return (1 + (MEM_P (XEXP (x, 0)) ? 10 : 0));
+-
+- default:
+- return 99;
+- }
+-
+- default:
+- return 99;
+- }
+-}
+-
+-/* RTX costs when optimizing for size. */
+-static bool
+-arm_size_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
+- int *total)
+-{
+- machine_mode mode = GET_MODE (x);
+- if (TARGET_THUMB1)
+- {
+- *total = thumb1_size_rtx_costs (x, code, outer_code);
+- return true;
+- }
+-
+- /* FIXME: This makes no attempt to prefer narrow Thumb-2 instructions. */
+- switch (code)
+- {
+- case MEM:
+- /* A memory access costs 1 insn if the mode is small, or the address is
+- a single register, otherwise it costs one insn per word. */
+- if (REG_P (XEXP (x, 0)))
+- *total = COSTS_N_INSNS (1);
+- else if (flag_pic
+- && GET_CODE (XEXP (x, 0)) == PLUS
+- && will_be_in_index_register (XEXP (XEXP (x, 0), 1)))
+- /* This will be split into two instructions.
+- See arm.md:calculate_pic_address. */
+- *total = COSTS_N_INSNS (2);
+- else
+- *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+- return true;
+-
+- case DIV:
+- case MOD:
+- case UDIV:
+- case UMOD:
+- /* Needs a libcall, so it costs about this. */
+- *total = COSTS_N_INSNS (2);
+- return false;
+-
+- case ROTATE:
+- if (mode == SImode && REG_P (XEXP (x, 1)))
+- {
+- *total = COSTS_N_INSNS (2) + rtx_cost (XEXP (x, 0), mode, code,
+- 0, false);
+- return true;
+- }
+- /* Fall through */
+- case ROTATERT:
+- case ASHIFT:
+- case LSHIFTRT:
+- case ASHIFTRT:
+- if (mode == DImode && CONST_INT_P (XEXP (x, 1)))
+- {
+- *total = COSTS_N_INSNS (3) + rtx_cost (XEXP (x, 0), mode, code,
+- 0, false);
+- return true;
+- }
+- else if (mode == SImode)
+- {
+- *total = COSTS_N_INSNS (1) + rtx_cost (XEXP (x, 0), mode, code,
+- 0, false);
+- /* Slightly disparage register shifts, but not by much. */
+- if (!CONST_INT_P (XEXP (x, 1)))
+- *total += 1 + rtx_cost (XEXP (x, 1), mode, code, 1, false);
+- return true;
+- }
+-
+- /* Needs a libcall. */
+- *total = COSTS_N_INSNS (2);
+- return false;
+-
+- case MINUS:
+- if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
+- && (mode == SFmode || !TARGET_VFP_SINGLE))
+- {
+- *total = COSTS_N_INSNS (1);
+- return false;
+- }
+-
+- if (mode == SImode)
+- {
+- enum rtx_code subcode0 = GET_CODE (XEXP (x, 0));
+- enum rtx_code subcode1 = GET_CODE (XEXP (x, 1));
+-
+- if (subcode0 == ROTATE || subcode0 == ROTATERT || subcode0 == ASHIFT
+- || subcode0 == LSHIFTRT || subcode0 == ASHIFTRT
+- || subcode1 == ROTATE || subcode1 == ROTATERT
+- || subcode1 == ASHIFT || subcode1 == LSHIFTRT
+- || subcode1 == ASHIFTRT)
+- {
+- /* It's just the cost of the two operands. */
+- *total = 0;
+- return false;
+- }
+-
+- *total = COSTS_N_INSNS (1);
+- return false;
+- }
+-
+- *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+- return false;
+-
+- case PLUS:
+- if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
+- && (mode == SFmode || !TARGET_VFP_SINGLE))
+- {
+- *total = COSTS_N_INSNS (1);
+- return false;
+- }
+-
+- /* A shift as a part of ADD costs nothing. */
+- if (GET_CODE (XEXP (x, 0)) == MULT
+- && power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode))
+- {
+- *total = COSTS_N_INSNS (TARGET_THUMB2 ? 2 : 1);
+- *total += rtx_cost (XEXP (XEXP (x, 0), 0), mode, code, 0, false);
+- *total += rtx_cost (XEXP (x, 1), mode, code, 1, false);
+- return true;
+- }
+-
+- /* Fall through */
+- case AND: case XOR: case IOR:
+- if (mode == SImode)
+- {
+- enum rtx_code subcode = GET_CODE (XEXP (x, 0));
+-
+- if (subcode == ROTATE || subcode == ROTATERT || subcode == ASHIFT
+- || subcode == LSHIFTRT || subcode == ASHIFTRT
+- || (code == AND && subcode == NOT))
+- {
+- /* It's just the cost of the two operands. */
+- *total = 0;
+- return false;
+- }
+- }
+-
+- *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+- return false;
+-
+- case MULT:
+- *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+- return false;
+-
+- case NEG:
+- if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
+- && (mode == SFmode || !TARGET_VFP_SINGLE))
+- {
+- *total = COSTS_N_INSNS (1);
+- return false;
+- }
+-
+- /* Fall through */
+- case NOT:
+- *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+-
+- return false;
++ case TRUNCATE:
++ return 99;
+
+- case IF_THEN_ELSE:
+- *total = 0;
+- return false;
++ case AND:
++ case XOR:
++ case IOR:
++ return COSTS_N_INSNS (1);
+
+- case COMPARE:
+- if (cc_register (XEXP (x, 0), VOIDmode))
+- * total = 0;
+- else
+- *total = COSTS_N_INSNS (1);
+- return false;
++ case MEM:
++ return (COSTS_N_INSNS (1)
++ + COSTS_N_INSNS (1)
++ * ((GET_MODE_SIZE (mode) - 1) / UNITS_PER_WORD)
++ + ((GET_CODE (x) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x))
++ ? COSTS_N_INSNS (1) : 0));
+
+- case ABS:
+- if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
+- && (mode == SFmode || !TARGET_VFP_SINGLE))
+- *total = COSTS_N_INSNS (1);
+- else
+- *total = COSTS_N_INSNS (1 + ARM_NUM_REGS (mode));
+- return false;
++ case IF_THEN_ELSE:
++ /* XXX a guess. */
++ if (GET_CODE (XEXP (x, 1)) == PC || GET_CODE (XEXP (x, 2)) == PC)
++ return 14;
++ return 2;
+
+- case SIGN_EXTEND:
+ case ZERO_EXTEND:
+- return arm_rtx_costs_1 (x, outer_code, total, 0);
+-
+- case CONST_INT:
+- if (const_ok_for_arm (INTVAL (x)))
+- /* A multiplication by a constant requires another instruction
+- to load the constant to a register. */
+- *total = COSTS_N_INSNS ((outer_code == SET || outer_code == MULT)
+- ? 1 : 0);
+- else if (const_ok_for_arm (~INTVAL (x)))
+- *total = COSTS_N_INSNS (outer_code == AND ? 0 : 1);
+- else if (const_ok_for_arm (-INTVAL (x)))
+- {
+- if (outer_code == COMPARE || outer_code == PLUS
+- || outer_code == MINUS)
+- *total = 0;
+- else
+- *total = COSTS_N_INSNS (1);
+- }
+- else
+- *total = COSTS_N_INSNS (2);
+- return true;
+-
+- case CONST:
+- case LABEL_REF:
+- case SYMBOL_REF:
+- *total = COSTS_N_INSNS (2);
+- return true;
+-
+- case CONST_DOUBLE:
+- *total = COSTS_N_INSNS (4);
+- return true;
++ /* XXX still guessing. */
++ switch (GET_MODE (XEXP (x, 0)))
++ {
++ case QImode:
++ return (1 + (mode == DImode ? 4 : 0)
++ + (MEM_P (XEXP (x, 0)) ? 10 : 0));
+
+- case CONST_VECTOR:
+- if (TARGET_NEON
+- && TARGET_HARD_FLOAT
+- && outer_code == SET
+- && (VALID_NEON_DREG_MODE (mode) || VALID_NEON_QREG_MODE (mode))
+- && neon_immediate_valid_for_move (x, mode, NULL, NULL))
+- *total = COSTS_N_INSNS (1);
+- else
+- *total = COSTS_N_INSNS (4);
+- return true;
++ case HImode:
++ return (4 + (mode == DImode ? 4 : 0)
++ + (MEM_P (XEXP (x, 0)) ? 10 : 0));
+
+- case HIGH:
+- case LO_SUM:
+- /* We prefer constant pool entries to MOVW/MOVT pairs, so bump the
+- cost of these slightly. */
+- *total = COSTS_N_INSNS (1) + 1;
+- return true;
++ case SImode:
++ return (1 + (MEM_P (XEXP (x, 0)) ? 10 : 0));
+
+- case SET:
+- return false;
++ default:
++ return 99;
++ }
+
+ default:
+- if (mode != VOIDmode)
+- *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+- else
+- *total = COSTS_N_INSNS (4); /* How knows? */
+- return false;
++ return 99;
+ }
+ }
+
+@@ -9519,7 +8947,7 @@ arm_unspec_cost (rtx x, enum rtx_code /* outer_code */, bool speed_p, int *cost)
+ flags are live or not, and thus no realistic way to determine what
+ the size will eventually be. */
+ static bool
+-arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
++arm_rtx_costs_internal (rtx x, enum rtx_code code, enum rtx_code outer_code,
+ const struct cpu_cost_table *extra_cost,
+ int *cost, bool speed_p)
+ {
+@@ -10771,8 +10199,6 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
+ if ((arm_arch4 || GET_MODE (XEXP (x, 0)) == SImode)
+ && MEM_P (XEXP (x, 0)))
+ {
+- *cost = rtx_cost (XEXP (x, 0), VOIDmode, code, 0, speed_p);
+-
+ if (mode == DImode)
+ *cost += COSTS_N_INSNS (1);
+
+@@ -11164,390 +10590,70 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
+ /* Vector costs? */
+ }
+ *cost = LIBCALL_COST (1);
+- return false;
+-
+- case FLOAT:
+- case UNSIGNED_FLOAT:
+- if (TARGET_HARD_FLOAT)
+- {
+- /* ??? Increase the cost to deal with transferring from CORE
+- -> FP registers? */
+- if (speed_p)
+- *cost += extra_cost->fp[mode == DFmode].fromint;
+- return false;
+- }
+- *cost = LIBCALL_COST (1);
+- return false;
+-
+- case CALL:
+- return true;
+-
+- case ASM_OPERANDS:
+- {
+- /* Just a guess. Guess number of instructions in the asm
+- plus one insn per input. Always a minimum of COSTS_N_INSNS (1)
+- though (see PR60663). */
+- int asm_length = MAX (1, asm_str_count (ASM_OPERANDS_TEMPLATE (x)));
+- int num_operands = ASM_OPERANDS_INPUT_LENGTH (x);
+-
+- *cost = COSTS_N_INSNS (asm_length + num_operands);
+- return true;
+- }
+- default:
+- if (mode != VOIDmode)
+- *cost = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+- else
+- *cost = COSTS_N_INSNS (4); /* Who knows? */
+- return false;
+- }
+-}
+-
+-#undef HANDLE_NARROW_SHIFT_ARITH
+-
+-/* RTX costs when optimizing for size. */
+-static bool
+-arm_rtx_costs (rtx x, machine_mode mode ATTRIBUTE_UNUSED, int outer_code,
+- int opno ATTRIBUTE_UNUSED, int *total, bool speed)
+-{
+- bool result;
+- int code = GET_CODE (x);
+-
+- if (TARGET_OLD_RTX_COSTS
+- || (!current_tune->insn_extra_cost && !TARGET_NEW_GENERIC_COSTS))
+- {
+- /* Old way. (Deprecated.) */
+- if (!speed)
+- result = arm_size_rtx_costs (x, (enum rtx_code) code,
+- (enum rtx_code) outer_code, total);
+- else
+- result = current_tune->rtx_costs (x, (enum rtx_code) code,
+- (enum rtx_code) outer_code, total,
+- speed);
+- }
+- else
+- {
+- /* New way. */
+- if (current_tune->insn_extra_cost)
+- result = arm_new_rtx_costs (x, (enum rtx_code) code,
+- (enum rtx_code) outer_code,
+- current_tune->insn_extra_cost,
+- total, speed);
+- /* TARGET_NEW_GENERIC_COSTS && !TARGET_OLD_RTX_COSTS
+- && current_tune->insn_extra_cost != NULL */
+- else
+- result = arm_new_rtx_costs (x, (enum rtx_code) code,
+- (enum rtx_code) outer_code,
+- &generic_extra_costs, total, speed);
+- }
+-
+- if (dump_file && (dump_flags & TDF_DETAILS))
+- {
+- print_rtl_single (dump_file, x);
+- fprintf (dump_file, "\n%s cost: %d (%s)\n", speed ? "Hot" : "Cold",
+- *total, result ? "final" : "partial");
+- }
+- return result;
+-}
+-
+-/* RTX costs for cores with a slow MUL implementation. Thumb-2 is not
+- supported on any "slowmul" cores, so it can be ignored. */
+-
+-static bool
+-arm_slowmul_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
+- int *total, bool speed)
+-{
+- machine_mode mode = GET_MODE (x);
+-
+- if (TARGET_THUMB)
+- {
+- *total = thumb1_rtx_costs (x, code, outer_code);
+- return true;
+- }
+-
+- switch (code)
+- {
+- case MULT:
+- if (GET_MODE_CLASS (mode) == MODE_FLOAT
+- || mode == DImode)
+- {
+- *total = COSTS_N_INSNS (20);
+- return false;
+- }
+-
+- if (CONST_INT_P (XEXP (x, 1)))
+- {
+- unsigned HOST_WIDE_INT i = (INTVAL (XEXP (x, 1))
+- & (unsigned HOST_WIDE_INT) 0xffffffff);
+- int cost, const_ok = const_ok_for_arm (i);
+- int j, booth_unit_size;
+-
+- /* Tune as appropriate. */
+- cost = const_ok ? 4 : 8;
+- booth_unit_size = 2;
+- for (j = 0; i && j < 32; j += booth_unit_size)
+- {
+- i >>= booth_unit_size;
+- cost++;
+- }
+-
+- *total = COSTS_N_INSNS (cost);
+- *total += rtx_cost (XEXP (x, 0), mode, code, 0, speed);
+- return true;
+- }
+-
+- *total = COSTS_N_INSNS (20);
+- return false;
+-
+- default:
+- return arm_rtx_costs_1 (x, outer_code, total, speed);;
+- }
+-}
+-
+-
+-/* RTX cost for cores with a fast multiply unit (M variants). */
+-
+-static bool
+-arm_fastmul_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
+- int *total, bool speed)
+-{
+- machine_mode mode = GET_MODE (x);
+-
+- if (TARGET_THUMB1)
+- {
+- *total = thumb1_rtx_costs (x, code, outer_code);
+- return true;
+- }
+-
+- /* ??? should thumb2 use different costs? */
+- switch (code)
+- {
+- case MULT:
+- /* There is no point basing this on the tuning, since it is always the
+- fast variant if it exists at all. */
+- if (mode == DImode
+- && (GET_CODE (XEXP (x, 0)) == GET_CODE (XEXP (x, 1)))
+- && (GET_CODE (XEXP (x, 0)) == ZERO_EXTEND
+- || GET_CODE (XEXP (x, 0)) == SIGN_EXTEND))
+- {
+- *total = COSTS_N_INSNS(2);
+- return false;
+- }
+-
+-
+- if (mode == DImode)
+- {
+- *total = COSTS_N_INSNS (5);
+- return false;
+- }
+-
+- if (CONST_INT_P (XEXP (x, 1)))
+- {
+- unsigned HOST_WIDE_INT i = (INTVAL (XEXP (x, 1))
+- & (unsigned HOST_WIDE_INT) 0xffffffff);
+- int cost, const_ok = const_ok_for_arm (i);
+- int j, booth_unit_size;
+-
+- /* Tune as appropriate. */
+- cost = const_ok ? 4 : 8;
+- booth_unit_size = 8;
+- for (j = 0; i && j < 32; j += booth_unit_size)
+- {
+- i >>= booth_unit_size;
+- cost++;
+- }
+-
+- *total = COSTS_N_INSNS(cost);
+- return false;
+- }
+-
+- if (mode == SImode)
+- {
+- *total = COSTS_N_INSNS (4);
+- return false;
+- }
+-
+- if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+- {
+- if (TARGET_HARD_FLOAT
+- && (mode == SFmode
+- || (mode == DFmode && !TARGET_VFP_SINGLE)))
+- {
+- *total = COSTS_N_INSNS (1);
+- return false;
+- }
+- }
+-
+- /* Requires a lib call */
+- *total = COSTS_N_INSNS (20);
+- return false;
+-
+- default:
+- return arm_rtx_costs_1 (x, outer_code, total, speed);
+- }
+-}
+-
+-
+-/* RTX cost for XScale CPUs. Thumb-2 is not supported on any xscale cores,
+- so it can be ignored. */
+-
+-static bool
+-arm_xscale_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
+- int *total, bool speed)
+-{
+- machine_mode mode = GET_MODE (x);
+-
+- if (TARGET_THUMB)
+- {
+- *total = thumb1_rtx_costs (x, code, outer_code);
+- return true;
+- }
+-
+- switch (code)
+- {
+- case COMPARE:
+- if (GET_CODE (XEXP (x, 0)) != MULT)
+- return arm_rtx_costs_1 (x, outer_code, total, speed);
+-
+- /* A COMPARE of a MULT is slow on XScale; the muls instruction
+- will stall until the multiplication is complete. */
+- *total = COSTS_N_INSNS (3);
+- return false;
+-
+- case MULT:
+- /* There is no point basing this on the tuning, since it is always the
+- fast variant if it exists at all. */
+- if (mode == DImode
+- && (GET_CODE (XEXP (x, 0)) == GET_CODE (XEXP (x, 1)))
+- && (GET_CODE (XEXP (x, 0)) == ZERO_EXTEND
+- || GET_CODE (XEXP (x, 0)) == SIGN_EXTEND))
+- {
+- *total = COSTS_N_INSNS (2);
+- return false;
+- }
+-
+-
+- if (mode == DImode)
+- {
+- *total = COSTS_N_INSNS (5);
+- return false;
+- }
+-
+- if (CONST_INT_P (XEXP (x, 1)))
+- {
+- /* If operand 1 is a constant we can more accurately
+- calculate the cost of the multiply. The multiplier can
+- retire 15 bits on the first cycle and a further 12 on the
+- second. We do, of course, have to load the constant into
+- a register first. */
+- unsigned HOST_WIDE_INT i = INTVAL (XEXP (x, 1));
+- /* There's a general overhead of one cycle. */
+- int cost = 1;
+- unsigned HOST_WIDE_INT masked_const;
+-
+- if (i & 0x80000000)
+- i = ~i;
+-
+- i &= (unsigned HOST_WIDE_INT) 0xffffffff;
+-
+- masked_const = i & 0xffff8000;
+- if (masked_const != 0)
+- {
+- cost++;
+- masked_const = i & 0xf8000000;
+- if (masked_const != 0)
+- cost++;
+- }
+- *total = COSTS_N_INSNS (cost);
+- return false;
+- }
++ return false;
+
+- if (mode == SImode)
++ case FLOAT:
++ case UNSIGNED_FLOAT:
++ if (TARGET_HARD_FLOAT)
+ {
+- *total = COSTS_N_INSNS (3);
++ /* ??? Increase the cost to deal with transferring from CORE
++ -> FP registers? */
++ if (speed_p)
++ *cost += extra_cost->fp[mode == DFmode].fromint;
+ return false;
+ }
+-
+- /* Requires a lib call */
+- *total = COSTS_N_INSNS (20);
++ *cost = LIBCALL_COST (1);
+ return false;
+
++ case CALL:
++ return true;
++
++ case ASM_OPERANDS:
++ {
++ /* Just a guess. Guess number of instructions in the asm
++ plus one insn per input. Always a minimum of COSTS_N_INSNS (1)
++ though (see PR60663). */
++ int asm_length = MAX (1, asm_str_count (ASM_OPERANDS_TEMPLATE (x)));
++ int num_operands = ASM_OPERANDS_INPUT_LENGTH (x);
++
++ *cost = COSTS_N_INSNS (asm_length + num_operands);
++ return true;
++ }
+ default:
+- return arm_rtx_costs_1 (x, outer_code, total, speed);
++ if (mode != VOIDmode)
++ *cost = COSTS_N_INSNS (ARM_NUM_REGS (mode));
++ else
++ *cost = COSTS_N_INSNS (4); /* Who knows? */
++ return false;
+ }
+ }
+
++#undef HANDLE_NARROW_SHIFT_ARITH
+
+-/* RTX costs for 9e (and later) cores. */
++/* RTX costs entry point. */
+
+ static bool
+-arm_9e_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
+- int *total, bool speed)
++arm_rtx_costs (rtx x, machine_mode mode ATTRIBUTE_UNUSED, int outer_code,
++ int opno ATTRIBUTE_UNUSED, int *total, bool speed)
+ {
+- machine_mode mode = GET_MODE (x);
+-
+- if (TARGET_THUMB1)
+- {
+- switch (code)
+- {
+- case MULT:
+- /* Small multiply: 32 cycles for an integer multiply inst. */
+- if (arm_arch6m && arm_m_profile_small_mul)
+- *total = COSTS_N_INSNS (32);
+- else
+- *total = COSTS_N_INSNS (3);
+- return true;
++ bool result;
++ int code = GET_CODE (x);
++ gcc_assert (current_tune->insn_extra_cost);
+
+- default:
+- *total = thumb1_rtx_costs (x, code, outer_code);
+- return true;
+- }
+- }
++ result = arm_rtx_costs_internal (x, (enum rtx_code) code,
++ (enum rtx_code) outer_code,
++ current_tune->insn_extra_cost,
++ total, speed);
+
+- switch (code)
++ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+- case MULT:
+- /* There is no point basing this on the tuning, since it is always the
+- fast variant if it exists at all. */
+- if (mode == DImode
+- && (GET_CODE (XEXP (x, 0)) == GET_CODE (XEXP (x, 1)))
+- && (GET_CODE (XEXP (x, 0)) == ZERO_EXTEND
+- || GET_CODE (XEXP (x, 0)) == SIGN_EXTEND))
+- {
+- *total = COSTS_N_INSNS (2);
+- return false;
+- }
+-
+-
+- if (mode == DImode)
+- {
+- *total = COSTS_N_INSNS (5);
+- return false;
+- }
+-
+- if (mode == SImode)
+- {
+- *total = COSTS_N_INSNS (2);
+- return false;
+- }
+-
+- if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+- {
+- if (TARGET_HARD_FLOAT
+- && (mode == SFmode
+- || (mode == DFmode && !TARGET_VFP_SINGLE)))
+- {
+- *total = COSTS_N_INSNS (1);
+- return false;
+- }
+- }
+-
+- *total = COSTS_N_INSNS (20);
+- return false;
+-
+- default:
+- return arm_rtx_costs_1 (x, outer_code, total, speed);
++ print_rtl_single (dump_file, x);
++ fprintf (dump_file, "\n%s cost: %d (%s)\n", speed ? "Hot" : "Cold",
++ *total, result ? "final" : "partial");
+ }
++ return result;
+ }
++
+ /* All address computations that can be done are free, but rtx cost returns
+ the same for practically all of them. So we weight the different types
+ of address here in the order (most pref first):
+@@ -12269,7 +11375,7 @@ vfp3_const_double_index (rtx x)
+
+ /* We can permit four significant bits of mantissa only, plus a high bit
+ which is always 1. */
+- mask = ((unsigned HOST_WIDE_INT)1 << (point_pos - 5)) - 1;
++ mask = (HOST_WIDE_INT_1U << (point_pos - 5)) - 1;
+ if ((mantissa & mask) != 0)
+ return -1;
+
+@@ -12423,6 +11529,12 @@ neon_valid_immediate (rtx op, machine_mode mode, int inverse,
+ return 18;
+ }
+
++ /* The tricks done in the code below apply for little-endian vector layout.
++ For big-endian vectors only allow vectors of the form { a, a, a..., a }.
++ FIXME: Implement logic for big-endian vectors. */
++ if (BYTES_BIG_ENDIAN && vector && !const_vec_duplicate_p (op))
++ return -1;
++
+ /* Splat vector constant out into a byte vector. */
+ for (i = 0; i < n_elts; i++)
+ {
+@@ -13151,7 +12263,7 @@ coproc_secondary_reload_class (machine_mode mode, rtx x, bool wb)
+ {
+ if (mode == HFmode)
+ {
+- if (!TARGET_NEON_FP16)
++ if (!TARGET_NEON_FP16 && !TARGET_VFP_FP16INST)
+ return GENERAL_REGS;
+ if (s_register_operand (x, mode) || neon_vector_mem_operand (x, 2, true))
+ return NO_REGS;
+@@ -15988,14 +15100,17 @@ gen_operands_ldrd_strd (rtx *operands, bool load,
+ /* If the same input register is used in both stores
+ when storing different constants, try to find a free register.
+ For example, the code
+- mov r0, 0
+- str r0, [r2]
+- mov r0, 1
+- str r0, [r2, #4]
++ mov r0, 0
++ str r0, [r2]
++ mov r0, 1
++ str r0, [r2, #4]
+ can be transformed into
+- mov r1, 0
+- strd r1, r0, [r2]
+- in Thumb mode assuming that r1 is free. */
++ mov r1, 0
++ mov r0, 1
++ strd r1, r0, [r2]
++ in Thumb mode assuming that r1 is free.
++ For ARM mode do the same but only if the starting register
++ can be made to be even. */
+ if (const_store
+ && REGNO (operands[0]) == REGNO (operands[1])
+ && INTVAL (operands[4]) != INTVAL (operands[5]))
+@@ -16014,7 +15129,6 @@ gen_operands_ldrd_strd (rtx *operands, bool load,
+ }
+ else if (TARGET_ARM)
+ {
+- return false;
+ int regno = REGNO (operands[0]);
+ if (!peep2_reg_dead_p (4, operands[0]))
+ {
+@@ -16368,7 +15482,7 @@ get_jump_table_size (rtx_jump_table_data *insn)
+ {
+ case 1:
+ /* Round up size of TBB table to a halfword boundary. */
+- size = (size + 1) & ~(HOST_WIDE_INT)1;
++ size = (size + 1) & ~HOST_WIDE_INT_1;
+ break;
+ case 2:
+ /* No padding necessary for TBH. */
+@@ -16837,35 +15951,37 @@ dump_minipool (rtx_insn *scan)
+ fputc ('\n', dump_file);
+ }
+
++ rtx val = copy_rtx (mp->value);
++
+ switch (GET_MODE_SIZE (mp->mode))
+ {
+ #ifdef HAVE_consttable_1
+ case 1:
+- scan = emit_insn_after (gen_consttable_1 (mp->value), scan);
++ scan = emit_insn_after (gen_consttable_1 (val), scan);
+ break;
+
+ #endif
+ #ifdef HAVE_consttable_2
+ case 2:
+- scan = emit_insn_after (gen_consttable_2 (mp->value), scan);
++ scan = emit_insn_after (gen_consttable_2 (val), scan);
+ break;
+
+ #endif
+ #ifdef HAVE_consttable_4
+ case 4:
+- scan = emit_insn_after (gen_consttable_4 (mp->value), scan);
++ scan = emit_insn_after (gen_consttable_4 (val), scan);
+ break;
+
+ #endif
+ #ifdef HAVE_consttable_8
+ case 8:
+- scan = emit_insn_after (gen_consttable_8 (mp->value), scan);
++ scan = emit_insn_after (gen_consttable_8 (val), scan);
+ break;
+
+ #endif
+ #ifdef HAVE_consttable_16
+ case 16:
+- scan = emit_insn_after (gen_consttable_16 (mp->value), scan);
++ scan = emit_insn_after (gen_consttable_16 (val), scan);
+ break;
+
+ #endif
+@@ -17269,6 +16385,470 @@ note_invalid_constants (rtx_insn *insn, HOST_WIDE_INT address, int do_pushes)
+ return;
+ }
+
++/* This function computes the clear mask and PADDING_BITS_TO_CLEAR for structs
++ and unions in the context of ARMv8-M Security Extensions. It is used as a
++ helper function for both 'cmse_nonsecure_call' and 'cmse_nonsecure_entry'
++ functions. The PADDING_BITS_TO_CLEAR pointer can be the base to either one
++ or four masks, depending on whether it is being computed for a
++ 'cmse_nonsecure_entry' return value or a 'cmse_nonsecure_call' argument
++ respectively. The tree for the type of the argument or a field within an
++ argument is passed in ARG_TYPE, the current register this argument or field
++ starts in is kept in the pointer REGNO and updated accordingly, the bit this
++ argument or field starts at is passed in STARTING_BIT and the last used bit
++ is kept in LAST_USED_BIT which is also updated accordingly. */
++
++static unsigned HOST_WIDE_INT
++comp_not_to_clear_mask_str_un (tree arg_type, int * regno,
++ uint32_t * padding_bits_to_clear,
++ unsigned starting_bit, int * last_used_bit)
++
++{
++ unsigned HOST_WIDE_INT not_to_clear_reg_mask = 0;
++
++ if (TREE_CODE (arg_type) == RECORD_TYPE)
++ {
++ unsigned current_bit = starting_bit;
++ tree field;
++ long int offset, size;
++
++
++ field = TYPE_FIELDS (arg_type);
++ while (field)
++ {
++ /* The offset within a structure is always an offset from
++ the start of that structure. Make sure we take that into the
++ calculation of the register based offset that we use here. */
++ offset = starting_bit;
++ offset += TREE_INT_CST_ELT (DECL_FIELD_BIT_OFFSET (field), 0);
++ offset %= 32;
++
++ /* This is the actual size of the field, for bitfields this is the
++ bitfield width and not the container size. */
++ size = TREE_INT_CST_ELT (DECL_SIZE (field), 0);
++
++ if (*last_used_bit != offset)
++ {
++ if (offset < *last_used_bit)
++ {
++ /* This field's offset is before the 'last_used_bit', that
++ means this field goes on the next register. So we need to
++ pad the rest of the current register and increase the
++ register number. */
++ uint32_t mask;
++ mask = ((uint32_t)-1) - ((uint32_t) 1 << *last_used_bit);
++ mask++;
++
++ padding_bits_to_clear[*regno] |= mask;
++ not_to_clear_reg_mask |= HOST_WIDE_INT_1U << *regno;
++ (*regno)++;
++ }
++ else
++ {
++ /* Otherwise we pad the bits between the last field's end and
++ the start of the new field. */
++ uint32_t mask;
++
++ mask = ((uint32_t)-1) >> (32 - offset);
++ mask -= ((uint32_t) 1 << *last_used_bit) - 1;
++ padding_bits_to_clear[*regno] |= mask;
++ }
++ current_bit = offset;
++ }
++
++ /* Calculate further padding bits for inner structs/unions too. */
++ if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (field)))
++ {
++ *last_used_bit = current_bit;
++ not_to_clear_reg_mask
++ |= comp_not_to_clear_mask_str_un (TREE_TYPE (field), regno,
++ padding_bits_to_clear, offset,
++ last_used_bit);
++ }
++ else
++ {
++ /* Update 'current_bit' with this field's size. If the
++ 'current_bit' lies in a subsequent register, update 'regno' and
++ reset 'current_bit' to point to the current bit in that new
++ register. */
++ current_bit += size;
++ while (current_bit >= 32)
++ {
++ current_bit-=32;
++ not_to_clear_reg_mask |= HOST_WIDE_INT_1U << *regno;
++ (*regno)++;
++ }
++ *last_used_bit = current_bit;
++ }
++
++ field = TREE_CHAIN (field);
++ }
++ not_to_clear_reg_mask |= HOST_WIDE_INT_1U << *regno;
++ }
++ else if (TREE_CODE (arg_type) == UNION_TYPE)
++ {
++ tree field, field_t;
++ int i, regno_t, field_size;
++ int max_reg = -1;
++ int max_bit = -1;
++ uint32_t mask;
++ uint32_t padding_bits_to_clear_res[NUM_ARG_REGS]
++ = {-1, -1, -1, -1};
++
++ /* To compute the padding bits in a union we only consider bits as
++ padding bits if they are always either a padding bit or fall outside a
++ fields size for all fields in the union. */
++ field = TYPE_FIELDS (arg_type);
++ while (field)
++ {
++ uint32_t padding_bits_to_clear_t[NUM_ARG_REGS]
++ = {0U, 0U, 0U, 0U};
++ int last_used_bit_t = *last_used_bit;
++ regno_t = *regno;
++ field_t = TREE_TYPE (field);
++
++ /* If the field's type is either a record or a union make sure to
++ compute their padding bits too. */
++ if (RECORD_OR_UNION_TYPE_P (field_t))
++ not_to_clear_reg_mask
++ |= comp_not_to_clear_mask_str_un (field_t, &regno_t,
++ &padding_bits_to_clear_t[0],
++ starting_bit, &last_used_bit_t);
++ else
++ {
++ field_size = TREE_INT_CST_ELT (DECL_SIZE (field), 0);
++ regno_t = (field_size / 32) + *regno;
++ last_used_bit_t = (starting_bit + field_size) % 32;
++ }
++
++ for (i = *regno; i < regno_t; i++)
++ {
++ /* For all but the last register used by this field only keep the
++ padding bits that were padding bits in this field. */
++ padding_bits_to_clear_res[i] &= padding_bits_to_clear_t[i];
++ }
++
++ /* For the last register, keep all padding bits that were padding
++ bits in this field and any padding bits that are still valid
++ as padding bits but fall outside of this field's size. */
++ mask = (((uint32_t) -1) - ((uint32_t) 1 << last_used_bit_t)) + 1;
++ padding_bits_to_clear_res[regno_t]
++ &= padding_bits_to_clear_t[regno_t] | mask;
++
++ /* Update the maximum size of the fields in terms of registers used
++ ('max_reg') and the 'last_used_bit' in said register. */
++ if (max_reg < regno_t)
++ {
++ max_reg = regno_t;
++ max_bit = last_used_bit_t;
++ }
++ else if (max_reg == regno_t && max_bit < last_used_bit_t)
++ max_bit = last_used_bit_t;
++
++ field = TREE_CHAIN (field);
++ }
++
++ /* Update the current padding_bits_to_clear using the intersection of the
++ padding bits of all the fields. */
++ for (i=*regno; i < max_reg; i++)
++ padding_bits_to_clear[i] |= padding_bits_to_clear_res[i];
++
++ /* Do not keep trailing padding bits, we do not know yet whether this
++ is the end of the argument. */
++ mask = ((uint32_t) 1 << max_bit) - 1;
++ padding_bits_to_clear[max_reg]
++ |= padding_bits_to_clear_res[max_reg] & mask;
++
++ *regno = max_reg;
++ *last_used_bit = max_bit;
++ }
++ else
++ /* This function should only be used for structs and unions. */
++ gcc_unreachable ();
++
++ return not_to_clear_reg_mask;
++}
++
++/* In the context of ARMv8-M Security Extensions, this function is used for both
++ 'cmse_nonsecure_call' and 'cmse_nonsecure_entry' functions to compute what
++ registers are used when returning or passing arguments, which is then
++ returned as a mask. It will also compute a mask to indicate padding/unused
++ bits for each of these registers, and passes this through the
++ PADDING_BITS_TO_CLEAR pointer. The tree of the argument type is passed in
++ ARG_TYPE, the rtl representation of the argument is passed in ARG_RTX and
++ the starting register used to pass this argument or return value is passed
++ in REGNO. It makes use of 'comp_not_to_clear_mask_str_un' to compute these
++ for struct and union types. */
++
++static unsigned HOST_WIDE_INT
++compute_not_to_clear_mask (tree arg_type, rtx arg_rtx, int regno,
++ uint32_t * padding_bits_to_clear)
++
++{
++ int last_used_bit = 0;
++ unsigned HOST_WIDE_INT not_to_clear_mask;
++
++ if (RECORD_OR_UNION_TYPE_P (arg_type))
++ {
++ not_to_clear_mask
++ = comp_not_to_clear_mask_str_un (arg_type, &regno,
++ padding_bits_to_clear, 0,
++ &last_used_bit);
++
++
++ /* If the 'last_used_bit' is not zero, that means we are still using a
++ part of the last 'regno'. In such cases we must clear the trailing
++ bits. Otherwise we are not using regno and we should mark it as to
++ clear. */
++ if (last_used_bit != 0)
++ padding_bits_to_clear[regno]
++ |= ((uint32_t)-1) - ((uint32_t) 1 << last_used_bit) + 1;
++ else
++ not_to_clear_mask &= ~(HOST_WIDE_INT_1U << regno);
++ }
++ else
++ {
++ not_to_clear_mask = 0;
++ /* We are not dealing with structs nor unions. So these arguments may be
++ passed in floating point registers too. In some cases a BLKmode is
++ used when returning or passing arguments in multiple VFP registers. */
++ if (GET_MODE (arg_rtx) == BLKmode)
++ {
++ int i, arg_regs;
++ rtx reg;
++
++ /* This should really only occur when dealing with the hard-float
++ ABI. */
++ gcc_assert (TARGET_HARD_FLOAT_ABI);
++
++ for (i = 0; i < XVECLEN (arg_rtx, 0); i++)
++ {
++ reg = XEXP (XVECEXP (arg_rtx, 0, i), 0);
++ gcc_assert (REG_P (reg));
++
++ not_to_clear_mask |= HOST_WIDE_INT_1U << REGNO (reg);
++
++ /* If we are dealing with DF mode, make sure we don't
++ clear either of the registers it addresses. */
++ arg_regs = ARM_NUM_REGS (GET_MODE (reg));
++ if (arg_regs > 1)
++ {
++ unsigned HOST_WIDE_INT mask;
++ mask = HOST_WIDE_INT_1U << (REGNO (reg) + arg_regs);
++ mask -= HOST_WIDE_INT_1U << REGNO (reg);
++ not_to_clear_mask |= mask;
++ }
++ }
++ }
++ else
++ {
++ /* Otherwise we can rely on the MODE to determine how many registers
++ are being used by this argument. */
++ int arg_regs = ARM_NUM_REGS (GET_MODE (arg_rtx));
++ not_to_clear_mask |= HOST_WIDE_INT_1U << REGNO (arg_rtx);
++ if (arg_regs > 1)
++ {
++ unsigned HOST_WIDE_INT
++ mask = HOST_WIDE_INT_1U << (REGNO (arg_rtx) + arg_regs);
++ mask -= HOST_WIDE_INT_1U << REGNO (arg_rtx);
++ not_to_clear_mask |= mask;
++ }
++ }
++ }
++
++ return not_to_clear_mask;
++}
++
++/* Saves callee saved registers, clears callee saved registers and caller saved
++ registers not used to pass arguments before a cmse_nonsecure_call. And
++ restores the callee saved registers after. */
++
++static void
++cmse_nonsecure_call_clear_caller_saved (void)
++{
++ basic_block bb;
++
++ FOR_EACH_BB_FN (bb, cfun)
++ {
++ rtx_insn *insn;
++
++ FOR_BB_INSNS (bb, insn)
++ {
++ uint64_t to_clear_mask, float_mask;
++ rtx_insn *seq;
++ rtx pat, call, unspec, reg, cleared_reg, tmp;
++ unsigned int regno, maxregno;
++ rtx address;
++ CUMULATIVE_ARGS args_so_far_v;
++ cumulative_args_t args_so_far;
++ tree arg_type, fntype;
++ bool using_r4, first_param = true;
++ function_args_iterator args_iter;
++ uint32_t padding_bits_to_clear[4] = {0U, 0U, 0U, 0U};
++ uint32_t * padding_bits_to_clear_ptr = &padding_bits_to_clear[0];
++
++ if (!NONDEBUG_INSN_P (insn))
++ continue;
++
++ if (!CALL_P (insn))
++ continue;
++
++ pat = PATTERN (insn);
++ gcc_assert (GET_CODE (pat) == PARALLEL && XVECLEN (pat, 0) > 0);
++ call = XVECEXP (pat, 0, 0);
++
++ /* Get the real call RTX if the insn sets a value, ie. returns. */
++ if (GET_CODE (call) == SET)
++ call = SET_SRC (call);
++
++ /* Check if it is a cmse_nonsecure_call. */
++ unspec = XEXP (call, 0);
++ if (GET_CODE (unspec) != UNSPEC
++ || XINT (unspec, 1) != UNSPEC_NONSECURE_MEM)
++ continue;
++
++ /* Determine the caller-saved registers we need to clear. */
++ to_clear_mask = (1LL << (NUM_ARG_REGS)) - 1;
++ maxregno = NUM_ARG_REGS - 1;
++ /* Only look at the caller-saved floating point registers in case of
++ -mfloat-abi=hard. For -mfloat-abi=softfp we will be using the
++ lazy store and loads which clear both caller- and callee-saved
++ registers. */
++ if (TARGET_HARD_FLOAT_ABI)
++ {
++ float_mask = (1LL << (D7_VFP_REGNUM + 1)) - 1;
++ float_mask &= ~((1LL << FIRST_VFP_REGNUM) - 1);
++ to_clear_mask |= float_mask;
++ maxregno = D7_VFP_REGNUM;
++ }
++
++ /* Make sure the register used to hold the function address is not
++ cleared. */
++ address = RTVEC_ELT (XVEC (unspec, 0), 0);
++ gcc_assert (MEM_P (address));
++ gcc_assert (REG_P (XEXP (address, 0)));
++ to_clear_mask &= ~(1LL << REGNO (XEXP (address, 0)));
++
++ /* Set basic block of call insn so that df rescan is performed on
++ insns inserted here. */
++ set_block_for_insn (insn, bb);
++ df_set_flags (DF_DEFER_INSN_RESCAN);
++ start_sequence ();
++
++ /* Make sure the scheduler doesn't schedule other insns beyond
++ here. */
++ emit_insn (gen_blockage ());
++
++ /* Walk through all arguments and clear registers appropriately.
++ */
++ fntype = TREE_TYPE (MEM_EXPR (address));
++ arm_init_cumulative_args (&args_so_far_v, fntype, NULL_RTX,
++ NULL_TREE);
++ args_so_far = pack_cumulative_args (&args_so_far_v);
++ FOREACH_FUNCTION_ARGS (fntype, arg_type, args_iter)
++ {
++ rtx arg_rtx;
++ machine_mode arg_mode = TYPE_MODE (arg_type);
++
++ if (VOID_TYPE_P (arg_type))
++ continue;
++
++ if (!first_param)
++ arm_function_arg_advance (args_so_far, arg_mode, arg_type,
++ true);
++
++ arg_rtx = arm_function_arg (args_so_far, arg_mode, arg_type,
++ true);
++ gcc_assert (REG_P (arg_rtx));
++ to_clear_mask
++ &= ~compute_not_to_clear_mask (arg_type, arg_rtx,
++ REGNO (arg_rtx),
++ padding_bits_to_clear_ptr);
++
++ first_param = false;
++ }
++
++ /* Clear padding bits where needed. */
++ cleared_reg = XEXP (address, 0);
++ reg = gen_rtx_REG (SImode, IP_REGNUM);
++ using_r4 = false;
++ for (regno = R0_REGNUM; regno < NUM_ARG_REGS; regno++)
++ {
++ if (padding_bits_to_clear[regno] == 0)
++ continue;
++
++ /* If this is a Thumb-1 target copy the address of the function
++ we are calling from 'r4' into 'ip' such that we can use r4 to
++ clear the unused bits in the arguments. */
++ if (TARGET_THUMB1 && !using_r4)
++ {
++ using_r4 = true;
++ reg = cleared_reg;
++ emit_move_insn (gen_rtx_REG (SImode, IP_REGNUM),
++ reg);
++ }
++
++ tmp = GEN_INT ((((~padding_bits_to_clear[regno]) << 16u) >> 16u));
++ emit_move_insn (reg, tmp);
++ /* Also fill the top half of the negated
++ padding_bits_to_clear. */
++ if (((~padding_bits_to_clear[regno]) >> 16) > 0)
++ {
++ tmp = GEN_INT ((~padding_bits_to_clear[regno]) >> 16);
++ emit_insn (gen_rtx_SET (gen_rtx_ZERO_EXTRACT (SImode, reg,
++ GEN_INT (16),
++ GEN_INT (16)),
++ tmp));
++ }
++
++ emit_insn (gen_andsi3 (gen_rtx_REG (SImode, regno),
++ gen_rtx_REG (SImode, regno),
++ reg));
++
++ }
++ if (using_r4)
++ emit_move_insn (cleared_reg,
++ gen_rtx_REG (SImode, IP_REGNUM));
++
++ /* We use right shift and left shift to clear the LSB of the address
++ we jump to instead of using bic, to avoid having to use an extra
++ register on Thumb-1. */
++ tmp = gen_rtx_LSHIFTRT (SImode, cleared_reg, const1_rtx);
++ emit_insn (gen_rtx_SET (cleared_reg, tmp));
++ tmp = gen_rtx_ASHIFT (SImode, cleared_reg, const1_rtx);
++ emit_insn (gen_rtx_SET (cleared_reg, tmp));
++
++ /* Clearing all registers that leak before doing a non-secure
++ call. */
++ for (regno = R0_REGNUM; regno <= maxregno; regno++)
++ {
++ if (!(to_clear_mask & (1LL << regno)))
++ continue;
++
++ /* If regno is an even vfp register and its successor is also to
++ be cleared, use vmov. */
++ if (IS_VFP_REGNUM (regno))
++ {
++ if (TARGET_VFP_DOUBLE
++ && VFP_REGNO_OK_FOR_DOUBLE (regno)
++ && to_clear_mask & (1LL << (regno + 1)))
++ emit_move_insn (gen_rtx_REG (DFmode, regno++),
++ CONST0_RTX (DFmode));
++ else
++ emit_move_insn (gen_rtx_REG (SFmode, regno),
++ CONST0_RTX (SFmode));
++ }
++ else
++ emit_move_insn (gen_rtx_REG (SImode, regno), cleared_reg);
++ }
++
++ seq = get_insns ();
++ end_sequence ();
++ emit_insn_before (seq, insn);
++
++ }
++ }
++}
++
+ /* Rewrite move insn into subtract of 0 if the condition codes will
+ be useful in next conditional jump insn. */
+
+@@ -17569,6 +17149,8 @@ arm_reorg (void)
+ HOST_WIDE_INT address = 0;
+ Mfix * fix;
+
++ if (use_cmse)
++ cmse_nonsecure_call_clear_caller_saved ();
+ if (TARGET_THUMB1)
+ thumb1_reorg ();
+ else if (TARGET_THUMB2)
+@@ -17941,6 +17523,23 @@ vfp_emit_fstmd (int base_reg, int count)
+ return count * 8;
+ }
+
++/* Returns true if -mcmse has been passed and the function pointed to by 'addr'
++ has the cmse_nonsecure_call attribute and returns false otherwise. */
++
++bool
++detect_cmse_nonsecure_call (tree addr)
++{
++ if (!addr)
++ return FALSE;
++
++ tree fntype = TREE_TYPE (addr);
++ if (use_cmse && lookup_attribute ("cmse_nonsecure_call",
++ TYPE_ATTRIBUTES (fntype)))
++ return TRUE;
++ return FALSE;
++}
++
++
+ /* Emit a call instruction with pattern PAT. ADDR is the address of
+ the call target. */
+
+@@ -18600,6 +18199,8 @@ output_move_vfp (rtx *operands)
+ rtx reg, mem, addr, ops[2];
+ int load = REG_P (operands[0]);
+ int dp = GET_MODE_SIZE (GET_MODE (operands[0])) == 8;
++ int sp = (!TARGET_VFP_FP16INST
++ || GET_MODE_SIZE (GET_MODE (operands[0])) == 4);
+ int integer_p = GET_MODE_CLASS (GET_MODE (operands[0])) == MODE_INT;
+ const char *templ;
+ char buff[50];
+@@ -18612,8 +18213,10 @@ output_move_vfp (rtx *operands)
+
+ gcc_assert (REG_P (reg));
+ gcc_assert (IS_VFP_REGNUM (REGNO (reg)));
+- gcc_assert (mode == SFmode
++ gcc_assert ((mode == HFmode && TARGET_HARD_FLOAT)
++ || mode == SFmode
+ || mode == DFmode
++ || mode == HImode
+ || mode == SImode
+ || mode == DImode
+ || (TARGET_NEON && VALID_NEON_DREG_MODE (mode)));
+@@ -18644,7 +18247,7 @@ output_move_vfp (rtx *operands)
+
+ sprintf (buff, templ,
+ load ? "ld" : "st",
+- dp ? "64" : "32",
++ dp ? "64" : sp ? "32" : "16",
+ dp ? "P" : "",
+ integer_p ? "\t%@ int" : "");
+ output_asm_insn (buff, ops);
+@@ -19070,7 +18673,8 @@ shift_op (rtx op, HOST_WIDE_INT *amountp)
+ return NULL;
+ }
+
+- *amountp = int_log2 (*amountp);
++ *amountp = exact_log2 (*amountp);
++ gcc_assert (IN_RANGE (*amountp, 0, 31));
+ return ARM_LSL_NAME;
+
+ default:
+@@ -19102,22 +18706,6 @@ shift_op (rtx op, HOST_WIDE_INT *amountp)
+ return mnem;
+ }
+
+-/* Obtain the shift from the POWER of two. */
+-
+-static HOST_WIDE_INT
+-int_log2 (HOST_WIDE_INT power)
+-{
+- HOST_WIDE_INT shift = 0;
+-
+- while ((((HOST_WIDE_INT) 1 << shift) & power) == 0)
+- {
+- gcc_assert (shift <= 31);
+- shift++;
+- }
+-
+- return shift;
+-}
+-
+ /* Output a .ascii pseudo-op, keeping track of lengths. This is
+ because /bin/as is horribly restrictive. The judgement about
+ whether or not each character is 'printable' (and can be output as
+@@ -19474,7 +19062,7 @@ arm_get_vfp_saved_size (void)
+
+ saved = 0;
+ /* Space for saved VFP registers. */
+- if (TARGET_HARD_FLOAT && TARGET_VFP)
++ if (TARGET_HARD_FLOAT)
+ {
+ count = 0;
+ for (regno = FIRST_VFP_REGNUM;
+@@ -19563,6 +19151,7 @@ output_return_instruction (rtx operand, bool really_return, bool reverse,
+ (e.g. interworking) then we can load the return address
+ directly into the PC. Otherwise we must load it into LR. */
+ if (really_return
++ && !IS_CMSE_ENTRY (func_type)
+ && (IS_INTERRUPT (func_type) || !TARGET_INTERWORK))
+ return_reg = reg_names[PC_REGNUM];
+ else
+@@ -19703,18 +19292,93 @@ output_return_instruction (rtx operand, bool really_return, bool reverse,
+ break;
+
+ default:
++ if (IS_CMSE_ENTRY (func_type))
++ {
++ /* Check if we have to clear the 'GE bits' which is only used if
++ parallel add and subtraction instructions are available. */
++ if (TARGET_INT_SIMD)
++ snprintf (instr, sizeof (instr),
++ "msr%s\tAPSR_nzcvqg, %%|lr", conditional);
++ else
++ snprintf (instr, sizeof (instr),
++ "msr%s\tAPSR_nzcvq, %%|lr", conditional);
++
++ output_asm_insn (instr, & operand);
++ if (TARGET_HARD_FLOAT && !TARGET_THUMB1)
++ {
++ /* Clear the cumulative exception-status bits (0-4,7) and the
++ condition code bits (28-31) of the FPSCR. We need to
++ remember to clear the first scratch register used (IP) and
++ save and restore the second (r4). */
++ snprintf (instr, sizeof (instr), "push\t{%%|r4}");
++ output_asm_insn (instr, & operand);
++ snprintf (instr, sizeof (instr), "vmrs\t%%|ip, fpscr");
++ output_asm_insn (instr, & operand);
++ snprintf (instr, sizeof (instr), "movw\t%%|r4, #65376");
++ output_asm_insn (instr, & operand);
++ snprintf (instr, sizeof (instr), "movt\t%%|r4, #4095");
++ output_asm_insn (instr, & operand);
++ snprintf (instr, sizeof (instr), "and\t%%|ip, %%|r4");
++ output_asm_insn (instr, & operand);
++ snprintf (instr, sizeof (instr), "vmsr\tfpscr, %%|ip");
++ output_asm_insn (instr, & operand);
++ snprintf (instr, sizeof (instr), "pop\t{%%|r4}");
++ output_asm_insn (instr, & operand);
++ snprintf (instr, sizeof (instr), "mov\t%%|ip, %%|lr");
++ output_asm_insn (instr, & operand);
++ }
++ snprintf (instr, sizeof (instr), "bxns\t%%|lr");
++ }
+ /* Use bx if it's available. */
+- if (arm_arch5 || arm_arch4t)
++ else if (arm_arch5 || arm_arch4t)
+ sprintf (instr, "bx%s\t%%|lr", conditional);
+ else
+ sprintf (instr, "mov%s\t%%|pc, %%|lr", conditional);
+ break;
+ }
+
+- output_asm_insn (instr, & operand);
++ output_asm_insn (instr, & operand);
++ }
++
++ return "";
++}
++
++/* Output in FILE asm statements needed to declare the NAME of the function
++ defined by its DECL node. */
++
++void
++arm_asm_declare_function_name (FILE *file, const char *name, tree decl)
++{
++ size_t cmse_name_len;
++ char *cmse_name = 0;
++ char cmse_prefix[] = "__acle_se_";
++
++ /* When compiling with ARMv8-M Security Extensions enabled, we should print an
++ extra function label for each function with the 'cmse_nonsecure_entry'
++ attribute. This extra function label should be prepended with
++ '__acle_se_', telling the linker that it needs to create secure gateway
++ veneers for this function. */
++ if (use_cmse && lookup_attribute ("cmse_nonsecure_entry",
++ DECL_ATTRIBUTES (decl)))
++ {
++ cmse_name_len = sizeof (cmse_prefix) + strlen (name);
++ cmse_name = XALLOCAVEC (char, cmse_name_len);
++ snprintf (cmse_name, cmse_name_len, "%s%s", cmse_prefix, name);
++ targetm.asm_out.globalize_label (file, cmse_name);
++
++ ARM_DECLARE_FUNCTION_NAME (file, cmse_name, decl);
++ ASM_OUTPUT_TYPE_DIRECTIVE (file, cmse_name, "function");
+ }
+
+- return "";
++ ARM_DECLARE_FUNCTION_NAME (file, name, decl);
++ ASM_OUTPUT_TYPE_DIRECTIVE (file, name, "function");
++ ASM_DECLARE_RESULT (file, DECL_RESULT (decl));
++ ASM_OUTPUT_LABEL (file, name);
++
++ if (cmse_name)
++ ASM_OUTPUT_LABEL (file, cmse_name);
++
++ ARM_OUTPUT_FN_UNWIND (file, TRUE);
+ }
+
+ /* Write the function name into the code section, directly preceding
+@@ -19766,10 +19430,6 @@ arm_output_function_prologue (FILE *f, HOST_WIDE_INT frame_size)
+ {
+ unsigned long func_type;
+
+- /* ??? Do we want to print some of the below anyway? */
+- if (TARGET_THUMB1)
+- return;
+-
+ /* Sanity check. */
+ gcc_assert (!arm_ccfsm_state && !arm_target_insn);
+
+@@ -19804,6 +19464,8 @@ arm_output_function_prologue (FILE *f, HOST_WIDE_INT frame_size)
+ asm_fprintf (f, "\t%@ Nested: function declared inside another function.\n");
+ if (IS_STACKALIGN (func_type))
+ asm_fprintf (f, "\t%@ Stack Align: May be called with mis-aligned SP.\n");
++ if (IS_CMSE_ENTRY (func_type))
++ asm_fprintf (f, "\t%@ Non-secure entry function: called from non-secure code.\n");
+
+ asm_fprintf (f, "\t%@ args = %d, pretend = %d, frame = %wd\n",
+ crtl->args.size,
+@@ -20473,7 +20135,7 @@ arm_emit_vfp_multi_reg_pop (int first_reg, int num_regs, rtx base_reg)
+ REG_NOTES (par) = dwarf;
+
+ /* Make sure cfa doesn't leave with IP_REGNUM to allow unwinding fron FP. */
+- if (TARGET_VFP && REGNO (base_reg) == IP_REGNUM)
++ if (REGNO (base_reg) == IP_REGNUM)
+ {
+ RTX_FRAME_RELATED_P (par) = 1;
+ add_reg_note (par, REG_CFA_DEF_CFA, hard_frame_pointer_rtx);
+@@ -20934,7 +20596,7 @@ arm_get_frame_offsets (void)
+ func_type = arm_current_func_type ();
+ /* Space for saved VFP registers. */
+ if (! IS_VOLATILE (func_type)
+- && TARGET_HARD_FLOAT && TARGET_VFP)
++ && TARGET_HARD_FLOAT)
+ saved += arm_get_vfp_saved_size ();
+ }
+ else /* TARGET_THUMB1 */
+@@ -21155,7 +20817,7 @@ arm_save_coproc_regs(void)
+ saved_size += 8;
+ }
+
+- if (TARGET_HARD_FLOAT && TARGET_VFP)
++ if (TARGET_HARD_FLOAT)
+ {
+ start_reg = FIRST_VFP_REGNUM;
+
+@@ -22941,6 +22603,8 @@ maybe_get_arm_condition_code (rtx comparison)
+ {
+ case LTU: return ARM_CS;
+ case GEU: return ARM_CC;
++ case NE: return ARM_CS;
++ case EQ: return ARM_CC;
+ default: return ARM_NV;
+ }
+
+@@ -22966,6 +22630,14 @@ maybe_get_arm_condition_code (rtx comparison)
+ default: return ARM_NV;
+ }
+
++ case CC_Vmode:
++ switch (comp_code)
++ {
++ case NE: return ARM_VS;
++ case EQ: return ARM_VC;
++ default: return ARM_NV;
++ }
++
+ case CCmode:
+ switch (comp_code)
+ {
+@@ -23396,7 +23068,7 @@ arm_hard_regno_mode_ok (unsigned int regno, machine_mode mode)
+ {
+ if (GET_MODE_CLASS (mode) == MODE_CC)
+ return (regno == CC_REGNUM
+- || (TARGET_HARD_FLOAT && TARGET_VFP
++ || (TARGET_HARD_FLOAT
+ && regno == VFPCC_REGNUM));
+
+ if (regno == CC_REGNUM && GET_MODE_CLASS (mode) != MODE_CC)
+@@ -23410,8 +23082,7 @@ arm_hard_regno_mode_ok (unsigned int regno, machine_mode mode)
+ start of an even numbered register pair. */
+ return (ARM_NUM_REGS (mode) < 2) || (regno < LAST_LO_REGNUM);
+
+- if (TARGET_HARD_FLOAT && TARGET_VFP
+- && IS_VFP_REGNUM (regno))
++ if (TARGET_HARD_FLOAT && IS_VFP_REGNUM (regno))
+ {
+ if (mode == SFmode || mode == SImode)
+ return VFP_REGNO_OK_FOR_SINGLE (regno);
+@@ -23419,10 +23090,12 @@ arm_hard_regno_mode_ok (unsigned int regno, machine_mode mode)
+ if (mode == DFmode)
+ return VFP_REGNO_OK_FOR_DOUBLE (regno);
+
+- /* VFP registers can hold HFmode values, but there is no point in
+- putting them there unless we have hardware conversion insns. */
+ if (mode == HFmode)
+- return TARGET_FP16 && VFP_REGNO_OK_FOR_SINGLE (regno);
++ return VFP_REGNO_OK_FOR_SINGLE (regno);
++
++ /* VFP registers can hold HImode values. */
++ if (mode == HImode)
++ return VFP_REGNO_OK_FOR_SINGLE (regno);
+
+ if (TARGET_NEON)
+ return (VALID_NEON_DREG_MODE (mode) && VFP_REGNO_OK_FOR_DOUBLE (regno))
+@@ -23626,26 +23299,6 @@ arm_debugger_arg_offset (int value, rtx addr)
+ return value;
+ }
+
+-/* Implement TARGET_INVALID_PARAMETER_TYPE. */
+-
+-static const char *
+-arm_invalid_parameter_type (const_tree t)
+-{
+- if (SCALAR_FLOAT_TYPE_P (t) && TYPE_PRECISION (t) == 16)
+- return N_("function parameters cannot have __fp16 type");
+- return NULL;
+-}
+-
+-/* Implement TARGET_INVALID_PARAMETER_TYPE. */
+-
+-static const char *
+-arm_invalid_return_type (const_tree t)
+-{
+- if (SCALAR_FLOAT_TYPE_P (t) && TYPE_PRECISION (t) == 16)
+- return N_("functions cannot return __fp16 type");
+- return NULL;
+-}
+-
+ /* Implement TARGET_PROMOTED_TYPE. */
+
+ static tree
+@@ -23885,8 +23538,8 @@ thumb_pop (FILE *f, unsigned long mask)
+ if (mask & (1 << PC_REGNUM))
+ {
+ /* Catch popping the PC. */
+- if (TARGET_INTERWORK || TARGET_BACKTRACE
+- || crtl->calls_eh_return)
++ if (TARGET_INTERWORK || TARGET_BACKTRACE || crtl->calls_eh_return
++ || IS_CMSE_ENTRY (arm_current_func_type ()))
+ {
+ /* The PC is never poped directly, instead
+ it is popped into r3 and then BX is used. */
+@@ -23947,7 +23600,14 @@ thumb_exit (FILE *f, int reg_containing_return_addr)
+ if (crtl->calls_eh_return)
+ asm_fprintf (f, "\tadd\t%r, %r\n", SP_REGNUM, ARM_EH_STACKADJ_REGNUM);
+
+- asm_fprintf (f, "\tbx\t%r\n", reg_containing_return_addr);
++ if (IS_CMSE_ENTRY (arm_current_func_type ()))
++ {
++ asm_fprintf (f, "\tmsr\tAPSR_nzcvq, %r\n",
++ reg_containing_return_addr);
++ asm_fprintf (f, "\tbxns\t%r\n", reg_containing_return_addr);
++ }
++ else
++ asm_fprintf (f, "\tbx\t%r\n", reg_containing_return_addr);
+ return;
+ }
+ /* Otherwise if we are not supporting interworking and we have not created
+@@ -23956,7 +23616,8 @@ thumb_exit (FILE *f, int reg_containing_return_addr)
+ else if (!TARGET_INTERWORK
+ && !TARGET_BACKTRACE
+ && !is_called_in_ARM_mode (current_function_decl)
+- && !crtl->calls_eh_return)
++ && !crtl->calls_eh_return
++ && !IS_CMSE_ENTRY (arm_current_func_type ()))
+ {
+ asm_fprintf (f, "\tpop\t{%r}\n", PC_REGNUM);
+ return;
+@@ -24179,7 +23840,21 @@ thumb_exit (FILE *f, int reg_containing_return_addr)
+ asm_fprintf (f, "\tadd\t%r, %r\n", SP_REGNUM, ARM_EH_STACKADJ_REGNUM);
+
+ /* Return to caller. */
+- asm_fprintf (f, "\tbx\t%r\n", reg_containing_return_addr);
++ if (IS_CMSE_ENTRY (arm_current_func_type ()))
++ {
++ /* This is for the cases where LR is not being used to contain the return
++ address. It may therefore contain information that we might not want
++ to leak, hence it must be cleared. The value in R0 will never be a
++ secret at this point, so it is safe to use it, see the clearing code
++ in 'cmse_nonsecure_entry_clear_before_return'. */
++ if (reg_containing_return_addr != LR_REGNUM)
++ asm_fprintf (f, "\tmov\tlr, r0\n");
++
++ asm_fprintf (f, "\tmsr\tAPSR_nzcvq, %r\n", reg_containing_return_addr);
++ asm_fprintf (f, "\tbxns\t%r\n", reg_containing_return_addr);
++ }
++ else
++ asm_fprintf (f, "\tbx\t%r\n", reg_containing_return_addr);
+ }
+
+ /* Scan INSN just before assembler is output for it.
+@@ -25044,6 +24719,149 @@ thumb1_expand_prologue (void)
+ cfun->machine->lr_save_eliminated = 0;
+ }
+
++/* Clear caller saved registers not used to pass return values and leaked
++ condition flags before exiting a cmse_nonsecure_entry function. */
++
++void
++cmse_nonsecure_entry_clear_before_return (void)
++{
++ uint64_t to_clear_mask[2];
++ uint32_t padding_bits_to_clear = 0;
++ uint32_t * padding_bits_to_clear_ptr = &padding_bits_to_clear;
++ int regno, maxregno = IP_REGNUM;
++ tree result_type;
++ rtx result_rtl;
++
++ to_clear_mask[0] = (1ULL << (NUM_ARG_REGS)) - 1;
++ to_clear_mask[0] |= (1ULL << IP_REGNUM);
++
++ /* If we are not dealing with -mfloat-abi=soft we will need to clear VFP
++ registers. We also check that TARGET_HARD_FLOAT and !TARGET_THUMB1 hold
++ to make sure the instructions used to clear them are present. */
++ if (TARGET_HARD_FLOAT && !TARGET_THUMB1)
++ {
++ uint64_t float_mask = (1ULL << (D7_VFP_REGNUM + 1)) - 1;
++ maxregno = LAST_VFP_REGNUM;
++
++ float_mask &= ~((1ULL << FIRST_VFP_REGNUM) - 1);
++ to_clear_mask[0] |= float_mask;
++
++ float_mask = (1ULL << (maxregno - 63)) - 1;
++ to_clear_mask[1] = float_mask;
++
++ /* Make sure we don't clear the two scratch registers used to clear the
++ relevant FPSCR bits in output_return_instruction. */
++ emit_use (gen_rtx_REG (SImode, IP_REGNUM));
++ to_clear_mask[0] &= ~(1ULL << IP_REGNUM);
++ emit_use (gen_rtx_REG (SImode, 4));
++ to_clear_mask[0] &= ~(1ULL << 4);
++ }
++
++ /* If the user has defined registers to be caller saved, these are no longer
++ restored by the function before returning and must thus be cleared for
++ security purposes. */
++ for (regno = NUM_ARG_REGS; regno < LAST_VFP_REGNUM; regno++)
++ {
++ /* We do not touch registers that can be used to pass arguments as per
++ the AAPCS, since these should never be made callee-saved by user
++ options. */
++ if (IN_RANGE (regno, FIRST_VFP_REGNUM, D7_VFP_REGNUM))
++ continue;
++ if (IN_RANGE (regno, IP_REGNUM, PC_REGNUM))
++ continue;
++ if (call_used_regs[regno])
++ to_clear_mask[regno / 64] |= (1ULL << (regno % 64));
++ }
++
++ /* Make sure we do not clear the registers used to return the result in. */
++ result_type = TREE_TYPE (DECL_RESULT (current_function_decl));
++ if (!VOID_TYPE_P (result_type))
++ {
++ result_rtl = arm_function_value (result_type, current_function_decl, 0);
++
++ /* No need to check that we return in registers, because we don't
++ support returning on stack yet. */
++ to_clear_mask[0]
++ &= ~compute_not_to_clear_mask (result_type, result_rtl, 0,
++ padding_bits_to_clear_ptr);
++ }
++
++ if (padding_bits_to_clear != 0)
++ {
++ rtx reg_rtx;
++ /* Padding bits to clear is not 0 so we know we are dealing with
++ returning a composite type, which only uses r0. Let's make sure that
++ r1-r3 is cleared too, we will use r1 as a scratch register. */
++ gcc_assert ((to_clear_mask[0] & 0xe) == 0xe);
++
++ reg_rtx = gen_rtx_REG (SImode, R1_REGNUM);
++
++ /* Fill the lower half of the negated padding_bits_to_clear. */
++ emit_move_insn (reg_rtx,
++ GEN_INT ((((~padding_bits_to_clear) << 16u) >> 16u)));
++
++ /* Also fill the top half of the negated padding_bits_to_clear. */
++ if (((~padding_bits_to_clear) >> 16) > 0)
++ emit_insn (gen_rtx_SET (gen_rtx_ZERO_EXTRACT (SImode, reg_rtx,
++ GEN_INT (16),
++ GEN_INT (16)),
++ GEN_INT ((~padding_bits_to_clear) >> 16)));
++
++ emit_insn (gen_andsi3 (gen_rtx_REG (SImode, R0_REGNUM),
++ gen_rtx_REG (SImode, R0_REGNUM),
++ reg_rtx));
++ }
++
++ for (regno = R0_REGNUM; regno <= maxregno; regno++)
++ {
++ if (!(to_clear_mask[regno / 64] & (1ULL << (regno % 64))))
++ continue;
++
++ if (IS_VFP_REGNUM (regno))
++ {
++ /* If regno is an even vfp register and its successor is also to
++ be cleared, use vmov. */
++ if (TARGET_VFP_DOUBLE
++ && VFP_REGNO_OK_FOR_DOUBLE (regno)
++ && to_clear_mask[regno / 64] & (1ULL << ((regno % 64) + 1)))
++ {
++ emit_move_insn (gen_rtx_REG (DFmode, regno),
++ CONST1_RTX (DFmode));
++ emit_use (gen_rtx_REG (DFmode, regno));
++ regno++;
++ }
++ else
++ {
++ emit_move_insn (gen_rtx_REG (SFmode, regno),
++ CONST1_RTX (SFmode));
++ emit_use (gen_rtx_REG (SFmode, regno));
++ }
++ }
++ else
++ {
++ if (TARGET_THUMB1)
++ {
++ if (regno == R0_REGNUM)
++ emit_move_insn (gen_rtx_REG (SImode, regno),
++ const0_rtx);
++ else
++ /* R0 has either been cleared before, see code above, or it
++ holds a return value, either way it is not secret
++ information. */
++ emit_move_insn (gen_rtx_REG (SImode, regno),
++ gen_rtx_REG (SImode, R0_REGNUM));
++ emit_use (gen_rtx_REG (SImode, regno));
++ }
++ else
++ {
++ emit_move_insn (gen_rtx_REG (SImode, regno),
++ gen_rtx_REG (SImode, LR_REGNUM));
++ emit_use (gen_rtx_REG (SImode, regno));
++ }
++ }
++ }
++}
++
+ /* Generate pattern *pop_multiple_with_stack_update_and_return if single
+ POP instruction can be generated. LR should be replaced by PC. All
+ the checks required are already done by USE_RETURN_INSN (). Hence,
+@@ -25065,6 +24883,12 @@ thumb2_expand_return (bool simple_return)
+
+ if (!simple_return && saved_regs_mask)
+ {
++ /* TODO: Verify that this path is never taken for cmse_nonsecure_entry
++ functions or adapt code to handle according to ACLE. This path should
++ not be reachable for cmse_nonsecure_entry functions though we prefer
++ to assert it for now to ensure that future code changes do not silently
++ change this behavior. */
++ gcc_assert (!IS_CMSE_ENTRY (arm_current_func_type ()));
+ if (num_regs == 1)
+ {
+ rtx par = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (2));
+@@ -25087,6 +24911,8 @@ thumb2_expand_return (bool simple_return)
+ }
+ else
+ {
++ if (IS_CMSE_ENTRY (arm_current_func_type ()))
++ cmse_nonsecure_entry_clear_before_return ();
+ emit_jump_insn (simple_return_rtx);
+ }
+ }
+@@ -25145,6 +24971,10 @@ thumb1_expand_epilogue (void)
+
+ if (! df_regs_ever_live_p (LR_REGNUM))
+ emit_use (gen_rtx_REG (SImode, LR_REGNUM));
++
++ /* Clear all caller-saved regs that are not used to return. */
++ if (IS_CMSE_ENTRY (arm_current_func_type ()))
++ cmse_nonsecure_entry_clear_before_return ();
+ }
+
+ /* Epilogue code for APCS frame. */
+@@ -25179,7 +25009,7 @@ arm_expand_epilogue_apcs_frame (bool really_return)
+ floats_from_frame += 4;
+ }
+
+- if (TARGET_HARD_FLOAT && TARGET_VFP)
++ if (TARGET_HARD_FLOAT)
+ {
+ int start_reg;
+ rtx ip_rtx = gen_rtx_REG (SImode, IP_REGNUM);
+@@ -25425,7 +25255,7 @@ arm_expand_epilogue (bool really_return)
+ }
+ }
+
+- if (TARGET_HARD_FLOAT && TARGET_VFP)
++ if (TARGET_HARD_FLOAT)
+ {
+ /* Generate VFP register multi-pop. */
+ int end_reg = LAST_VFP_REGNUM + 1;
+@@ -25482,6 +25312,7 @@ arm_expand_epilogue (bool really_return)
+
+ if (ARM_FUNC_TYPE (func_type) != ARM_FT_INTERWORKED
+ && (TARGET_ARM || ARM_FUNC_TYPE (func_type) == ARM_FT_NORMAL)
++ && !IS_CMSE_ENTRY (func_type)
+ && !IS_STACKALIGN (func_type)
+ && really_return
+ && crtl->args.pretend_args_size == 0
+@@ -25578,6 +25409,14 @@ arm_expand_epilogue (bool really_return)
+ stack_pointer_rtx, stack_pointer_rtx);
+ }
+
++ /* Clear all caller-saved regs that are not used to return. */
++ if (IS_CMSE_ENTRY (arm_current_func_type ()))
++ {
++ /* CMSE_ENTRY always returns. */
++ gcc_assert (really_return);
++ cmse_nonsecure_entry_clear_before_return ();
++ }
++
+ if (!really_return)
+ return;
+
+@@ -25874,13 +25713,6 @@ thumb_reload_out_hi (rtx *operands)
+ emit_insn (gen_thumb_movhi_clobber (operands[0], operands[1], operands[2]));
+ }
+
+-/* Handle reading a half-word from memory during reload. */
+-void
+-thumb_reload_in_hi (rtx *operands ATTRIBUTE_UNUSED)
+-{
+- gcc_unreachable ();
+-}
+-
+ /* Return the length of a function name prefix
+ that starts with the character 'c'. */
+ static int
+@@ -25950,46 +25782,55 @@ arm_emit_eabi_attribute (const char *name, int num, int val)
+ void
+ arm_print_tune_info (void)
+ {
+- asm_fprintf (asm_out_file, "\t@.tune parameters\n");
+- asm_fprintf (asm_out_file, "\t\t@constant_limit:\t%d\n",
++ asm_fprintf (asm_out_file, "\t" ASM_COMMENT_START ".tune parameters\n");
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START "constant_limit:\t%d\n",
+ current_tune->constant_limit);
+- asm_fprintf (asm_out_file, "\t\t@max_insns_skipped:\t%d\n",
+- current_tune->max_insns_skipped);
+- asm_fprintf (asm_out_file, "\t\t@prefetch.num_slots:\t%d\n",
+- current_tune->prefetch.num_slots);
+- asm_fprintf (asm_out_file, "\t\t@prefetch.l1_cache_size:\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "max_insns_skipped:\t%d\n", current_tune->max_insns_skipped);
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "prefetch.num_slots:\t%d\n", current_tune->prefetch.num_slots);
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "prefetch.l1_cache_size:\t%d\n",
+ current_tune->prefetch.l1_cache_size);
+- asm_fprintf (asm_out_file, "\t\t@prefetch.l1_cache_line_size:\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "prefetch.l1_cache_line_size:\t%d\n",
+ current_tune->prefetch.l1_cache_line_size);
+- asm_fprintf (asm_out_file, "\t\t@prefer_constant_pool:\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "prefer_constant_pool:\t%d\n",
+ (int) current_tune->prefer_constant_pool);
+- asm_fprintf (asm_out_file, "\t\t@branch_cost:\t(s:speed, p:predictable)\n");
+- asm_fprintf (asm_out_file, "\t\t\t\ts&p\tcost\n");
+- asm_fprintf (asm_out_file, "\t\t\t\t00\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "branch_cost:\t(s:speed, p:predictable)\n");
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START "\t\ts&p\tcost\n");
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START "\t\t00\t%d\n",
+ current_tune->branch_cost (false, false));
+- asm_fprintf (asm_out_file, "\t\t\t\t01\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START "\t\t01\t%d\n",
+ current_tune->branch_cost (false, true));
+- asm_fprintf (asm_out_file, "\t\t\t\t10\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START "\t\t10\t%d\n",
+ current_tune->branch_cost (true, false));
+- asm_fprintf (asm_out_file, "\t\t\t\t11\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START "\t\t11\t%d\n",
+ current_tune->branch_cost (true, true));
+- asm_fprintf (asm_out_file, "\t\t@prefer_ldrd_strd:\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "prefer_ldrd_strd:\t%d\n",
+ (int) current_tune->prefer_ldrd_strd);
+- asm_fprintf (asm_out_file, "\t\t@logical_op_non_short_circuit:\t[%d,%d]\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "logical_op_non_short_circuit:\t[%d,%d]\n",
+ (int) current_tune->logical_op_non_short_circuit_thumb,
+ (int) current_tune->logical_op_non_short_circuit_arm);
+- asm_fprintf (asm_out_file, "\t\t@prefer_neon_for_64bits:\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "prefer_neon_for_64bits:\t%d\n",
+ (int) current_tune->prefer_neon_for_64bits);
+- asm_fprintf (asm_out_file,
+- "\t\t@disparage_flag_setting_t16_encodings:\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "disparage_flag_setting_t16_encodings:\t%d\n",
+ (int) current_tune->disparage_flag_setting_t16_encodings);
+- asm_fprintf (asm_out_file, "\t\t@string_ops_prefer_neon:\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "string_ops_prefer_neon:\t%d\n",
+ (int) current_tune->string_ops_prefer_neon);
+- asm_fprintf (asm_out_file, "\t\t@max_insns_inline_memset:\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START
++ "max_insns_inline_memset:\t%d\n",
+ current_tune->max_insns_inline_memset);
+- asm_fprintf (asm_out_file, "\t\t@fusible_ops:\t%u\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START "fusible_ops:\t%u\n",
+ current_tune->fusible_ops);
+- asm_fprintf (asm_out_file, "\t\t@sched_autopref:\t%d\n",
++ asm_fprintf (asm_out_file, "\t\t" ASM_COMMENT_START "sched_autopref:\t%d\n",
+ (int) current_tune->sched_autopref);
+ }
+
+@@ -26018,7 +25859,7 @@ arm_file_start (void)
+ const char* pos = strchr (arm_selected_arch->name, '+');
+ if (pos)
+ {
+- char buf[15];
++ char buf[32];
+ gcc_assert (strlen (arm_selected_arch->name)
+ <= sizeof (buf) / sizeof (*pos));
+ strncpy (buf, arm_selected_arch->name,
+@@ -26043,7 +25884,7 @@ arm_file_start (void)
+ if (print_tune_info)
+ arm_print_tune_info ();
+
+- if (! TARGET_SOFT_FLOAT && TARGET_VFP)
++ if (! TARGET_SOFT_FLOAT)
+ {
+ if (TARGET_HARD_FLOAT && TARGET_VFP_SINGLE)
+ arm_emit_eabi_attribute ("Tag_ABI_HardFP_use", 27, 1);
+@@ -26160,11 +26001,10 @@ arm_internal_label (FILE *stream, const char *prefix, unsigned long labelno)
+
+ /* Output code to add DELTA to the first argument, and then jump
+ to FUNCTION. Used for C++ multiple inheritance. */
++
+ static void
+-arm_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
+- HOST_WIDE_INT delta,
+- HOST_WIDE_INT vcall_offset ATTRIBUTE_UNUSED,
+- tree function)
++arm_thumb1_mi_thunk (FILE *file, tree, HOST_WIDE_INT delta,
++ HOST_WIDE_INT, tree function)
+ {
+ static int thunk_label = 0;
+ char label[256];
+@@ -26305,6 +26145,76 @@ arm_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
+ final_end_function ();
+ }
+
++/* MI thunk handling for TARGET_32BIT. */
++
++static void
++arm32_output_mi_thunk (FILE *file, tree, HOST_WIDE_INT delta,
++ HOST_WIDE_INT vcall_offset, tree function)
++{
++ /* On ARM, this_regno is R0 or R1 depending on
++ whether the function returns an aggregate or not.
++ */
++ int this_regno = (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)),
++ function)
++ ? R1_REGNUM : R0_REGNUM);
++
++ rtx temp = gen_rtx_REG (Pmode, IP_REGNUM);
++ rtx this_rtx = gen_rtx_REG (Pmode, this_regno);
++ reload_completed = 1;
++ emit_note (NOTE_INSN_PROLOGUE_END);
++
++ /* Add DELTA to THIS_RTX. */
++ if (delta != 0)
++ arm_split_constant (PLUS, Pmode, NULL_RTX,
++ delta, this_rtx, this_rtx, false);
++
++ /* Add *(*THIS_RTX + VCALL_OFFSET) to THIS_RTX. */
++ if (vcall_offset != 0)
++ {
++ /* Load *THIS_RTX. */
++ emit_move_insn (temp, gen_rtx_MEM (Pmode, this_rtx));
++ /* Compute *THIS_RTX + VCALL_OFFSET. */
++ arm_split_constant (PLUS, Pmode, NULL_RTX, vcall_offset, temp, temp,
++ false);
++ /* Compute *(*THIS_RTX + VCALL_OFFSET). */
++ emit_move_insn (temp, gen_rtx_MEM (Pmode, temp));
++ emit_insn (gen_add3_insn (this_rtx, this_rtx, temp));
++ }
++
++ /* Generate a tail call to the target function. */
++ if (!TREE_USED (function))
++ {
++ assemble_external (function);
++ TREE_USED (function) = 1;
++ }
++ rtx funexp = XEXP (DECL_RTL (function), 0);
++ funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
++ rtx_insn * insn = emit_call_insn (gen_sibcall (funexp, const0_rtx, NULL_RTX));
++ SIBLING_CALL_P (insn) = 1;
++
++ insn = get_insns ();
++ shorten_branches (insn);
++ final_start_function (insn, file, 1);
++ final (insn, file, 1);
++ final_end_function ();
++
++ /* Stop pretending this is a post-reload pass. */
++ reload_completed = 0;
++}
++
++/* Output code to add DELTA to the first argument, and then jump
++ to FUNCTION. Used for C++ multiple inheritance. */
++
++static void
++arm_output_mi_thunk (FILE *file, tree thunk, HOST_WIDE_INT delta,
++ HOST_WIDE_INT vcall_offset, tree function)
++{
++ if (TARGET_32BIT)
++ arm32_output_mi_thunk (file, thunk, delta, vcall_offset, function);
++ else
++ arm_thumb1_mi_thunk (file, thunk, delta, vcall_offset, function);
++}
++
+ int
+ arm_emit_vector_const (FILE *file, rtx x)
+ {
+@@ -27543,7 +27453,7 @@ arm_mangle_type (const_tree type)
+ static const int thumb_core_reg_alloc_order[] =
+ {
+ 3, 2, 1, 0, 4, 5, 6, 7,
+- 14, 12, 8, 9, 10, 11
++ 12, 14, 8, 9, 10, 11
+ };
+
+ /* Adjust register allocation order when compiling for Thumb. */
+@@ -27689,7 +27599,7 @@ arm_conditional_register_usage (void)
+ if (TARGET_THUMB1)
+ fixed_regs[LR_REGNUM] = call_used_regs[LR_REGNUM] = 1;
+
+- if (TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP)
++ if (TARGET_32BIT && TARGET_HARD_FLOAT)
+ {
+ /* VFPv3 registers are disabled when earlier VFP
+ versions are selected due to the definition of
+@@ -27760,7 +27670,7 @@ arm_preferred_rename_class (reg_class_t rclass)
+ return NO_REGS;
+ }
+
+-/* Compute the atrribute "length" of insn "*push_multi".
++/* Compute the attribute "length" of insn "*push_multi".
+ So this function MUST be kept in sync with that insn pattern. */
+ int
+ arm_attr_length_push_multi(rtx parallel_op, rtx first_op)
+@@ -27777,6 +27687,11 @@ arm_attr_length_push_multi(rtx parallel_op, rtx first_op)
+
+ /* Thumb2 mode. */
+ regno = REGNO (first_op);
++ /* For PUSH/STM under Thumb2 mode, we can use 16-bit encodings if the register
++ list is 8-bit. Normally this means all registers in the list must be
++ LO_REGS, that is (R0 -R7). If any HI_REGS used, then we must use 32-bit
++ encodings. There is one exception for PUSH that LR in HI_REGS can be used
++ with 16-bit encoding. */
+ hi_reg = (REGNO_REG_CLASS (regno) == HI_REGS) && (regno != LR_REGNUM);
+ for (i = 1; i < num_saves && !hi_reg; i++)
+ {
+@@ -27789,6 +27704,56 @@ arm_attr_length_push_multi(rtx parallel_op, rtx first_op)
+ return 4;
+ }
+
++/* Compute the attribute "length" of insn. Currently, this function is used
++ for "*load_multiple_with_writeback", "*pop_multiple_with_return" and
++ "*pop_multiple_with_writeback_and_return". OPERANDS is the toplevel PARALLEL
++ rtx, RETURN_PC is true if OPERANDS contains return insn. WRITE_BACK_P is
++ true if OPERANDS contains insn which explicit updates base register. */
++
++int
++arm_attr_length_pop_multi (rtx *operands, bool return_pc, bool write_back_p)
++{
++ /* ARM mode. */
++ if (TARGET_ARM)
++ return 4;
++ /* Thumb1 mode. */
++ if (TARGET_THUMB1)
++ return 2;
++
++ rtx parallel_op = operands[0];
++ /* Initialize to elements number of PARALLEL. */
++ unsigned indx = XVECLEN (parallel_op, 0) - 1;
++ /* Initialize the value to base register. */
++ unsigned regno = REGNO (operands[1]);
++ /* Skip return and write back pattern.
++ We only need register pop pattern for later analysis. */
++ unsigned first_indx = 0;
++ first_indx += return_pc ? 1 : 0;
++ first_indx += write_back_p ? 1 : 0;
++
++ /* A pop operation can be done through LDM or POP. If the base register is SP
++ and if it's with write back, then a LDM will be alias of POP. */
++ bool pop_p = (regno == SP_REGNUM && write_back_p);
++ bool ldm_p = !pop_p;
++
++ /* Check base register for LDM. */
++ if (ldm_p && REGNO_REG_CLASS (regno) == HI_REGS)
++ return 4;
++
++ /* Check each register in the list. */
++ for (; indx >= first_indx; indx--)
++ {
++ regno = REGNO (XEXP (XVECEXP (parallel_op, 0, indx), 0));
++ /* For POP, PC in HI_REGS can be used with 16-bit encoding. See similar
++ comment in arm_attr_length_push_multi. */
++ if (REGNO_REG_CLASS (regno) == HI_REGS
++ && (regno != PC_REGNUM || ldm_p))
++ return 4;
++ }
++
++ return 2;
++}
++
+ /* Compute the number of instructions emitted by output_move_double. */
+ int
+ arm_count_output_move_double_insns (rtx *operands)
+@@ -27820,7 +27785,11 @@ vfp3_const_double_for_fract_bits (rtx operand)
+ HOST_WIDE_INT value = real_to_integer (&r0);
+ value = value & 0xffffffff;
+ if ((value != 0) && ( (value & (value - 1)) == 0))
+- return int_log2 (value);
++ {
++ int ret = exact_log2 (value);
++ gcc_assert (IN_RANGE (ret, 0, 31));
++ return ret;
++ }
+ }
+ }
+ return 0;
+@@ -27960,9 +27929,9 @@ emit_unlikely_jump (rtx insn)
+ void
+ arm_expand_compare_and_swap (rtx operands[])
+ {
+- rtx bval, rval, mem, oldval, newval, is_weak, mod_s, mod_f, x;
++ rtx bval, bdst, rval, mem, oldval, newval, is_weak, mod_s, mod_f, x;
+ machine_mode mode;
+- rtx (*gen) (rtx, rtx, rtx, rtx, rtx, rtx, rtx);
++ rtx (*gen) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+
+ bval = operands[0];
+ rval = operands[1];
+@@ -28019,43 +27988,54 @@ arm_expand_compare_and_swap (rtx operands[])
+ gcc_unreachable ();
+ }
+
+- emit_insn (gen (rval, mem, oldval, newval, is_weak, mod_s, mod_f));
++ bdst = TARGET_THUMB1 ? bval : gen_rtx_REG (CCmode, CC_REGNUM);
++ emit_insn (gen (bdst, rval, mem, oldval, newval, is_weak, mod_s, mod_f));
+
+ if (mode == QImode || mode == HImode)
+ emit_move_insn (operands[1], gen_lowpart (mode, rval));
+
+ /* In all cases, we arrange for success to be signaled by Z set.
+ This arrangement allows for the boolean result to be used directly
+- in a subsequent branch, post optimization. */
+- x = gen_rtx_REG (CCmode, CC_REGNUM);
+- x = gen_rtx_EQ (SImode, x, const0_rtx);
+- emit_insn (gen_rtx_SET (bval, x));
++ in a subsequent branch, post optimization. For Thumb-1 targets, the
++ boolean negation of the result is also stored in bval because Thumb-1
++ backend lacks dependency tracking for CC flag due to flag-setting not
++ being represented at RTL level. */
++ if (TARGET_THUMB1)
++ emit_insn (gen_cstoresi_eq0_thumb1 (bval, bdst));
++ else
++ {
++ x = gen_rtx_EQ (SImode, bdst, const0_rtx);
++ emit_insn (gen_rtx_SET (bval, x));
++ }
+ }
+
+ /* Split a compare and swap pattern. It is IMPLEMENTATION DEFINED whether
+ another memory store between the load-exclusive and store-exclusive can
+ reset the monitor from Exclusive to Open state. This means we must wait
+ until after reload to split the pattern, lest we get a register spill in
+- the middle of the atomic sequence. */
++ the middle of the atomic sequence. Success of the compare and swap is
++ indicated by the Z flag set for 32bit targets and by neg_bval being zero
++ for Thumb-1 targets (ie. negation of the boolean value returned by
++ atomic_compare_and_swapmode standard pattern in operand 0). */
+
+ void
+ arm_split_compare_and_swap (rtx operands[])
+ {
+- rtx rval, mem, oldval, newval, scratch;
++ rtx rval, mem, oldval, newval, neg_bval;
+ machine_mode mode;
+ enum memmodel mod_s, mod_f;
+ bool is_weak;
+ rtx_code_label *label1, *label2;
+ rtx x, cond;
+
+- rval = operands[0];
+- mem = operands[1];
+- oldval = operands[2];
+- newval = operands[3];
+- is_weak = (operands[4] != const0_rtx);
+- mod_s = memmodel_from_int (INTVAL (operands[5]));
+- mod_f = memmodel_from_int (INTVAL (operands[6]));
+- scratch = operands[7];
++ rval = operands[1];
++ mem = operands[2];
++ oldval = operands[3];
++ newval = operands[4];
++ is_weak = (operands[5] != const0_rtx);
++ mod_s = memmodel_from_int (INTVAL (operands[6]));
++ mod_f = memmodel_from_int (INTVAL (operands[7]));
++ neg_bval = TARGET_THUMB1 ? operands[0] : operands[8];
+ mode = GET_MODE (mem);
+
+ bool is_armv8_sync = arm_arch8 && is_mm_sync (mod_s);
+@@ -28087,26 +28067,44 @@ arm_split_compare_and_swap (rtx operands[])
+
+ arm_emit_load_exclusive (mode, rval, mem, use_acquire);
+
+- cond = arm_gen_compare_reg (NE, rval, oldval, scratch);
+- x = gen_rtx_NE (VOIDmode, cond, const0_rtx);
+- x = gen_rtx_IF_THEN_ELSE (VOIDmode, x,
+- gen_rtx_LABEL_REF (Pmode, label2), pc_rtx);
+- emit_unlikely_jump (gen_rtx_SET (pc_rtx, x));
++ /* Z is set to 0 for 32bit targets (resp. rval set to 1) if oldval != rval,
++ as required to communicate with arm_expand_compare_and_swap. */
++ if (TARGET_32BIT)
++ {
++ cond = arm_gen_compare_reg (NE, rval, oldval, neg_bval);
++ x = gen_rtx_NE (VOIDmode, cond, const0_rtx);
++ x = gen_rtx_IF_THEN_ELSE (VOIDmode, x,
++ gen_rtx_LABEL_REF (Pmode, label2), pc_rtx);
++ emit_unlikely_jump (gen_rtx_SET (pc_rtx, x));
++ }
++ else
++ {
++ emit_move_insn (neg_bval, const1_rtx);
++ cond = gen_rtx_NE (VOIDmode, rval, oldval);
++ if (thumb1_cmpneg_operand (oldval, SImode))
++ emit_unlikely_jump (gen_cbranchsi4_scratch (neg_bval, rval, oldval,
++ label2, cond));
++ else
++ emit_unlikely_jump (gen_cbranchsi4_insn (cond, rval, oldval, label2));
++ }
+
+- arm_emit_store_exclusive (mode, scratch, mem, newval, use_release);
++ arm_emit_store_exclusive (mode, neg_bval, mem, newval, use_release);
+
+ /* Weak or strong, we want EQ to be true for success, so that we
+ match the flags that we got from the compare above. */
+- cond = gen_rtx_REG (CCmode, CC_REGNUM);
+- x = gen_rtx_COMPARE (CCmode, scratch, const0_rtx);
+- emit_insn (gen_rtx_SET (cond, x));
++ if (TARGET_32BIT)
++ {
++ cond = gen_rtx_REG (CCmode, CC_REGNUM);
++ x = gen_rtx_COMPARE (CCmode, neg_bval, const0_rtx);
++ emit_insn (gen_rtx_SET (cond, x));
++ }
+
+ if (!is_weak)
+ {
+- x = gen_rtx_NE (VOIDmode, cond, const0_rtx);
+- x = gen_rtx_IF_THEN_ELSE (VOIDmode, x,
+- gen_rtx_LABEL_REF (Pmode, label1), pc_rtx);
+- emit_unlikely_jump (gen_rtx_SET (pc_rtx, x));
++ /* Z is set to boolean value of !neg_bval, as required to communicate
++ with arm_expand_compare_and_swap. */
++ x = gen_rtx_NE (VOIDmode, neg_bval, const0_rtx);
++ emit_unlikely_jump (gen_cbranchsi4 (x, neg_bval, const0_rtx, label1));
+ }
+
+ if (!is_mm_relaxed (mod_f))
+@@ -28121,6 +28119,15 @@ arm_split_compare_and_swap (rtx operands[])
+ emit_label (label2);
+ }
+
++/* Split an atomic operation pattern. Operation is given by CODE and is one
++ of PLUS, MINUS, IOR, XOR, SET (for an exchange operation) or NOT (for a nand
++ operation). Operation is performed on the content at MEM and on VALUE
++ following the memory model MODEL_RTX. The content at MEM before and after
++ the operation is returned in OLD_OUT and NEW_OUT respectively while the
++ success of the operation is returned in COND. Using a scratch register or
++ an operand register for these determines what result is returned for that
++ pattern. */
++
+ void
+ arm_split_atomic_op (enum rtx_code code, rtx old_out, rtx new_out, rtx mem,
+ rtx value, rtx model_rtx, rtx cond)
+@@ -28129,6 +28136,7 @@ arm_split_atomic_op (enum rtx_code code, rtx old_out, rtx new_out, rtx mem,
+ machine_mode mode = GET_MODE (mem);
+ machine_mode wmode = (mode == DImode ? DImode : SImode);
+ rtx_code_label *label;
++ bool all_low_regs, bind_old_new;
+ rtx x;
+
+ bool is_armv8_sync = arm_arch8 && is_mm_sync (model);
+@@ -28163,6 +28171,28 @@ arm_split_atomic_op (enum rtx_code code, rtx old_out, rtx new_out, rtx mem,
+
+ arm_emit_load_exclusive (mode, old_out, mem, use_acquire);
+
++ /* Does the operation require destination and first operand to use the same
++ register? This is decided by register constraints of relevant insn
++ patterns in thumb1.md. */
++ gcc_assert (!new_out || REG_P (new_out));
++ all_low_regs = REG_P (value) && REGNO_REG_CLASS (REGNO (value)) == LO_REGS
++ && new_out && REGNO_REG_CLASS (REGNO (new_out)) == LO_REGS
++ && REGNO_REG_CLASS (REGNO (old_out)) == LO_REGS;
++ bind_old_new =
++ (TARGET_THUMB1
++ && code != SET
++ && code != MINUS
++ && (code != PLUS || (!all_low_regs && !satisfies_constraint_L (value))));
++
++ /* We want to return the old value while putting the result of the operation
++ in the same register as the old value so copy the old value over to the
++ destination register and use that register for the operation. */
++ if (old_out && bind_old_new)
++ {
++ emit_move_insn (new_out, old_out);
++ old_out = new_out;
++ }
++
+ switch (code)
+ {
+ case SET:
+@@ -28377,6 +28407,8 @@ arm_evpc_neon_vuzp (struct expand_vec_perm_d *d)
+ case V8QImode: gen = gen_neon_vuzpv8qi_internal; break;
+ case V8HImode: gen = gen_neon_vuzpv8hi_internal; break;
+ case V4HImode: gen = gen_neon_vuzpv4hi_internal; break;
++ case V8HFmode: gen = gen_neon_vuzpv8hf_internal; break;
++ case V4HFmode: gen = gen_neon_vuzpv4hf_internal; break;
+ case V4SImode: gen = gen_neon_vuzpv4si_internal; break;
+ case V2SImode: gen = gen_neon_vuzpv2si_internal; break;
+ case V2SFmode: gen = gen_neon_vuzpv2sf_internal; break;
+@@ -28450,6 +28482,8 @@ arm_evpc_neon_vzip (struct expand_vec_perm_d *d)
+ case V8QImode: gen = gen_neon_vzipv8qi_internal; break;
+ case V8HImode: gen = gen_neon_vzipv8hi_internal; break;
+ case V4HImode: gen = gen_neon_vzipv4hi_internal; break;
++ case V8HFmode: gen = gen_neon_vzipv8hf_internal; break;
++ case V4HFmode: gen = gen_neon_vzipv4hf_internal; break;
+ case V4SImode: gen = gen_neon_vzipv4si_internal; break;
+ case V2SImode: gen = gen_neon_vzipv2si_internal; break;
+ case V2SFmode: gen = gen_neon_vzipv2sf_internal; break;
+@@ -28502,6 +28536,8 @@ arm_evpc_neon_vrev (struct expand_vec_perm_d *d)
+ case V8QImode: gen = gen_neon_vrev32v8qi; break;
+ case V8HImode: gen = gen_neon_vrev64v8hi; break;
+ case V4HImode: gen = gen_neon_vrev64v4hi; break;
++ case V8HFmode: gen = gen_neon_vrev64v8hf; break;
++ case V4HFmode: gen = gen_neon_vrev64v4hf; break;
+ default:
+ return false;
+ }
+@@ -28585,6 +28621,8 @@ arm_evpc_neon_vtrn (struct expand_vec_perm_d *d)
+ case V8QImode: gen = gen_neon_vtrnv8qi_internal; break;
+ case V8HImode: gen = gen_neon_vtrnv8hi_internal; break;
+ case V4HImode: gen = gen_neon_vtrnv4hi_internal; break;
++ case V8HFmode: gen = gen_neon_vtrnv8hf_internal; break;
++ case V4HFmode: gen = gen_neon_vtrnv4hf_internal; break;
+ case V4SImode: gen = gen_neon_vtrnv4si_internal; break;
+ case V2SImode: gen = gen_neon_vtrnv2si_internal; break;
+ case V2SFmode: gen = gen_neon_vtrnv2sf_internal; break;
+@@ -28660,6 +28698,8 @@ arm_evpc_neon_vext (struct expand_vec_perm_d *d)
+ case V8HImode: gen = gen_neon_vextv8hi; break;
+ case V2SImode: gen = gen_neon_vextv2si; break;
+ case V4SImode: gen = gen_neon_vextv4si; break;
++ case V4HFmode: gen = gen_neon_vextv4hf; break;
++ case V8HFmode: gen = gen_neon_vextv8hf; break;
+ case V2SFmode: gen = gen_neon_vextv2sf; break;
+ case V4SFmode: gen = gen_neon_vextv4sf; break;
+ case V2DImode: gen = gen_neon_vextv2di; break;
+@@ -29185,7 +29225,7 @@ arm_validize_comparison (rtx *comparison, rtx * op1, rtx * op2)
+ {
+ enum rtx_code code = GET_CODE (*comparison);
+ int code_int;
+- machine_mode mode = (GET_MODE (*op1) == VOIDmode)
++ machine_mode mode = (GET_MODE (*op1) == VOIDmode)
+ ? GET_MODE (*op2) : GET_MODE (*op1);
+
+ gcc_assert (GET_MODE (*op1) != VOIDmode || GET_MODE (*op2) != VOIDmode);
+@@ -29213,11 +29253,19 @@ arm_validize_comparison (rtx *comparison, rtx * op1, rtx * op2)
+ *op2 = force_reg (mode, *op2);
+ return true;
+
++ case HFmode:
++ if (!TARGET_VFP_FP16INST)
++ break;
++ /* FP16 comparisons are done in SF mode. */
++ mode = SFmode;
++ *op1 = convert_to_mode (mode, *op1, 1);
++ *op2 = convert_to_mode (mode, *op2, 1);
++ /* Fall through. */
+ case SFmode:
+ case DFmode:
+- if (!arm_float_compare_operand (*op1, mode))
++ if (!vfp_compare_operand (*op1, mode))
+ *op1 = force_reg (mode, *op1);
+- if (!arm_float_compare_operand (*op2, mode))
++ if (!vfp_compare_operand (*op2, mode))
+ *op2 = force_reg (mode, *op2);
+ return true;
+ default:
+@@ -29759,11 +29807,57 @@ arm_macro_fusion_p (void)
+ return current_tune->fusible_ops != tune_params::FUSE_NOTHING;
+ }
+
++/* Return true if the two back-to-back sets PREV_SET, CURR_SET are suitable
++ for MOVW / MOVT macro fusion. */
++
++static bool
++arm_sets_movw_movt_fusible_p (rtx prev_set, rtx curr_set)
++{
++ /* We are trying to fuse
++ movw imm / movt imm
++ instructions as a group that gets scheduled together. */
++
++ rtx set_dest = SET_DEST (curr_set);
++
++ if (GET_MODE (set_dest) != SImode)
++ return false;
++
++ /* We are trying to match:
++ prev (movw) == (set (reg r0) (const_int imm16))
++ curr (movt) == (set (zero_extract (reg r0)
++ (const_int 16)
++ (const_int 16))
++ (const_int imm16_1))
++ or
++ prev (movw) == (set (reg r1)
++ (high (symbol_ref ("SYM"))))
++ curr (movt) == (set (reg r0)
++ (lo_sum (reg r1)
++ (symbol_ref ("SYM")))) */
++
++ if (GET_CODE (set_dest) == ZERO_EXTRACT)
++ {
++ if (CONST_INT_P (SET_SRC (curr_set))
++ && CONST_INT_P (SET_SRC (prev_set))
++ && REG_P (XEXP (set_dest, 0))
++ && REG_P (SET_DEST (prev_set))
++ && REGNO (XEXP (set_dest, 0)) == REGNO (SET_DEST (prev_set)))
++ return true;
++
++ }
++ else if (GET_CODE (SET_SRC (curr_set)) == LO_SUM
++ && REG_P (SET_DEST (curr_set))
++ && REG_P (SET_DEST (prev_set))
++ && GET_CODE (SET_SRC (prev_set)) == HIGH
++ && REGNO (SET_DEST (curr_set)) == REGNO (SET_DEST (prev_set)))
++ return true;
++
++ return false;
++}
+
+ static bool
+ aarch_macro_fusion_pair_p (rtx_insn* prev, rtx_insn* curr)
+ {
+- rtx set_dest;
+ rtx prev_set = single_set (prev);
+ rtx curr_set = single_set (curr);
+
+@@ -29781,54 +29875,26 @@ aarch_macro_fusion_pair_p (rtx_insn* prev, rtx_insn* curr)
+ && aarch_crypto_can_dual_issue (prev, curr))
+ return true;
+
+- if (current_tune->fusible_ops & tune_params::FUSE_MOVW_MOVT)
+- {
+- /* We are trying to fuse
+- movw imm / movt imm
+- instructions as a group that gets scheduled together. */
+-
+- set_dest = SET_DEST (curr_set);
+-
+- if (GET_MODE (set_dest) != SImode)
+- return false;
++ if (current_tune->fusible_ops & tune_params::FUSE_MOVW_MOVT
++ && arm_sets_movw_movt_fusible_p (prev_set, curr_set))
++ return true;
+
+- /* We are trying to match:
+- prev (movw) == (set (reg r0) (const_int imm16))
+- curr (movt) == (set (zero_extract (reg r0)
+- (const_int 16)
+- (const_int 16))
+- (const_int imm16_1))
+- or
+- prev (movw) == (set (reg r1)
+- (high (symbol_ref ("SYM"))))
+- curr (movt) == (set (reg r0)
+- (lo_sum (reg r1)
+- (symbol_ref ("SYM")))) */
+- if (GET_CODE (set_dest) == ZERO_EXTRACT)
+- {
+- if (CONST_INT_P (SET_SRC (curr_set))
+- && CONST_INT_P (SET_SRC (prev_set))
+- && REG_P (XEXP (set_dest, 0))
+- && REG_P (SET_DEST (prev_set))
+- && REGNO (XEXP (set_dest, 0)) == REGNO (SET_DEST (prev_set)))
+- return true;
+- }
+- else if (GET_CODE (SET_SRC (curr_set)) == LO_SUM
+- && REG_P (SET_DEST (curr_set))
+- && REG_P (SET_DEST (prev_set))
+- && GET_CODE (SET_SRC (prev_set)) == HIGH
+- && REGNO (SET_DEST (curr_set)) == REGNO (SET_DEST (prev_set)))
+- return true;
+- }
+ return false;
+ }
+
++/* Return true iff the instruction fusion described by OP is enabled. */
++bool
++arm_fusion_enabled_p (tune_params::fuse_ops op)
++{
++ return current_tune->fusible_ops & op;
++}
++
+ /* Implement the TARGET_ASAN_SHADOW_OFFSET hook. */
+
+ static unsigned HOST_WIDE_INT
+ arm_asan_shadow_offset (void)
+ {
+- return (unsigned HOST_WIDE_INT) 1 << 29;
++ return HOST_WIDE_INT_1U << 29;
+ }
+
+
+@@ -29853,9 +29919,9 @@ arm_const_not_ok_for_debug_p (rtx p)
+ && GET_CODE (XEXP (p, 0)) == SYMBOL_REF
+ && (decl_op0 = SYMBOL_REF_DECL (XEXP (p, 0))))
+ {
+- if ((TREE_CODE (decl_op1) == VAR_DECL
++ if ((VAR_P (decl_op1)
+ || TREE_CODE (decl_op1) == CONST_DECL)
+- && (TREE_CODE (decl_op0) == VAR_DECL
++ && (VAR_P (decl_op0)
+ || TREE_CODE (decl_op0) == CONST_DECL))
+ return (get_variable_section (decl_op1, false)
+ != get_variable_section (decl_op0, false));
+@@ -29988,9 +30054,8 @@ arm_can_inline_p (tree caller, tree callee)
+ if ((caller_fpu->features & callee_fpu->features) != callee_fpu->features)
+ return false;
+
+- /* Need same model and regs. */
+- if (callee_fpu->model != caller_fpu->model
+- || callee_fpu->regs != callee_fpu->regs)
++ /* Need same FPU regs. */
++ if (callee_fpu->regs != callee_fpu->regs)
+ return false;
+
+ /* OK to inline between different modes.
+@@ -30333,4 +30398,113 @@ arm_sched_fusion_priority (rtx_insn *insn, int max_pri,
+ return;
+ }
+
++
++/* Construct and return a PARALLEL RTX vector with elements numbering the
++ lanes of either the high (HIGH == TRUE) or low (HIGH == FALSE) half of
++ the vector - from the perspective of the architecture. This does not
++ line up with GCC's perspective on lane numbers, so we end up with
++ different masks depending on our target endian-ness. The diagram
++ below may help. We must draw the distinction when building masks
++ which select one half of the vector. An instruction selecting
++ architectural low-lanes for a big-endian target, must be described using
++ a mask selecting GCC high-lanes.
++
++ Big-Endian Little-Endian
++
++GCC 0 1 2 3 3 2 1 0
++ | x | x | x | x | | x | x | x | x |
++Architecture 3 2 1 0 3 2 1 0
++
++Low Mask: { 2, 3 } { 0, 1 }
++High Mask: { 0, 1 } { 2, 3 }
++*/
++
++rtx
++arm_simd_vect_par_cnst_half (machine_mode mode, bool high)
++{
++ int nunits = GET_MODE_NUNITS (mode);
++ rtvec v = rtvec_alloc (nunits / 2);
++ int high_base = nunits / 2;
++ int low_base = 0;
++ int base;
++ rtx t1;
++ int i;
++
++ if (BYTES_BIG_ENDIAN)
++ base = high ? low_base : high_base;
++ else
++ base = high ? high_base : low_base;
++
++ for (i = 0; i < nunits / 2; i++)
++ RTVEC_ELT (v, i) = GEN_INT (base + i);
++
++ t1 = gen_rtx_PARALLEL (mode, v);
++ return t1;
++}
++
++/* Check OP for validity as a PARALLEL RTX vector with elements
++ numbering the lanes of either the high (HIGH == TRUE) or low lanes,
++ from the perspective of the architecture. See the diagram above
++ arm_simd_vect_par_cnst_half_p for more details. */
++
++bool
++arm_simd_check_vect_par_cnst_half_p (rtx op, machine_mode mode,
++ bool high)
++{
++ rtx ideal = arm_simd_vect_par_cnst_half (mode, high);
++ HOST_WIDE_INT count_op = XVECLEN (op, 0);
++ HOST_WIDE_INT count_ideal = XVECLEN (ideal, 0);
++ int i = 0;
++
++ if (!VECTOR_MODE_P (mode))
++ return false;
++
++ if (count_op != count_ideal)
++ return false;
++
++ for (i = 0; i < count_ideal; i++)
++ {
++ rtx elt_op = XVECEXP (op, 0, i);
++ rtx elt_ideal = XVECEXP (ideal, 0, i);
++
++ if (!CONST_INT_P (elt_op)
++ || INTVAL (elt_ideal) != INTVAL (elt_op))
++ return false;
++ }
++ return true;
++}
++
++/* Can output mi_thunk for all cases except for non-zero vcall_offset
++ in Thumb1. */
++static bool
++arm_can_output_mi_thunk (const_tree, HOST_WIDE_INT, HOST_WIDE_INT vcall_offset,
++ const_tree)
++{
++ /* For now, we punt and not handle this for TARGET_THUMB1. */
++ if (vcall_offset && TARGET_THUMB1)
++ return false;
++
++ /* Otherwise ok. */
++ return true;
++}
++
++/* Generate RTL for a conditional branch with rtx comparison CODE in
++ mode CC_MODE. The destination of the unlikely conditional branch
++ is LABEL_REF. */
++
++void
++arm_gen_unlikely_cbranch (enum rtx_code code, machine_mode cc_mode,
++ rtx label_ref)
++{
++ rtx x;
++ x = gen_rtx_fmt_ee (code, VOIDmode,
++ gen_rtx_REG (cc_mode, CC_REGNUM),
++ const0_rtx);
++
++ x = gen_rtx_IF_THEN_ELSE (VOIDmode, x,
++ gen_rtx_LABEL_REF (VOIDmode, label_ref),
++ pc_rtx);
++ emit_unlikely_jump (gen_rtx_SET (pc_rtx, x));
++}
++
+ #include "gt-arm.h"
+--- a/src/gcc/config/arm/arm.h
++++ b/src/gcc/config/arm/arm.h
+@@ -80,11 +80,6 @@ extern arm_cc arm_current_cc;
+ extern int arm_target_label;
+ extern int arm_ccfsm_state;
+ extern GTY(()) rtx arm_target_insn;
+-/* The label of the current constant pool. */
+-extern rtx pool_vector_label;
+-/* Set to 1 when a return insn is output, this means that the epilogue
+- is not needed. */
+-extern int return_used_this_function;
+ /* Callback to output language specific object attributes. */
+ extern void (*arm_lang_output_object_attributes_hook)(void);
+
+@@ -139,7 +134,6 @@ extern void (*arm_lang_output_object_attributes_hook)(void);
+ #define TARGET_HARD_FLOAT (arm_float_abi != ARM_FLOAT_ABI_SOFT)
+ /* Use hardware floating point calling convention. */
+ #define TARGET_HARD_FLOAT_ABI (arm_float_abi == ARM_FLOAT_ABI_HARD)
+-#define TARGET_VFP (TARGET_FPU_MODEL == ARM_FP_MODEL_VFP)
+ #define TARGET_IWMMXT (arm_arch_iwmmxt)
+ #define TARGET_IWMMXT2 (arm_arch_iwmmxt2)
+ #define TARGET_REALLY_IWMMXT (TARGET_IWMMXT && TARGET_32BIT)
+@@ -177,50 +171,57 @@ extern void (*arm_lang_output_object_attributes_hook)(void);
+ to be more careful with TARGET_NEON as noted below. */
+
+ /* FPU is has the full VFPv3/NEON register file of 32 D registers. */
+-#define TARGET_VFPD32 (TARGET_VFP && TARGET_FPU_REGS == VFP_REG_D32)
++#define TARGET_VFPD32 (TARGET_FPU_REGS == VFP_REG_D32)
+
+ /* FPU supports VFPv3 instructions. */
+-#define TARGET_VFP3 (TARGET_VFP && TARGET_FPU_REV >= 3)
++#define TARGET_VFP3 (TARGET_FPU_REV >= 3)
+
+ /* FPU supports FPv5 instructions. */
+-#define TARGET_VFP5 (TARGET_VFP && TARGET_FPU_REV >= 5)
++#define TARGET_VFP5 (TARGET_FPU_REV >= 5)
+
+ /* FPU only supports VFP single-precision instructions. */
+-#define TARGET_VFP_SINGLE (TARGET_VFP && TARGET_FPU_REGS == VFP_REG_SINGLE)
++#define TARGET_VFP_SINGLE (TARGET_FPU_REGS == VFP_REG_SINGLE)
+
+ /* FPU supports VFP double-precision instructions. */
+-#define TARGET_VFP_DOUBLE (TARGET_VFP && TARGET_FPU_REGS != VFP_REG_SINGLE)
++#define TARGET_VFP_DOUBLE (TARGET_FPU_REGS != VFP_REG_SINGLE)
+
+ /* FPU supports half-precision floating-point with NEON element load/store. */
+-#define TARGET_NEON_FP16 \
+- (TARGET_VFP \
+- && ARM_FPU_FSET_HAS (TARGET_FPU_FEATURES, FPU_FL_NEON | FPU_FL_FP16))
++#define TARGET_NEON_FP16 \
++ (ARM_FPU_FSET_HAS (TARGET_FPU_FEATURES, FPU_FL_NEON) \
++ && ARM_FPU_FSET_HAS (TARGET_FPU_FEATURES, FPU_FL_FP16))
+
+ /* FPU supports VFP half-precision floating-point. */
+ #define TARGET_FP16 \
+- (TARGET_VFP && ARM_FPU_FSET_HAS (TARGET_FPU_FEATURES, FPU_FL_FP16))
++ (ARM_FPU_FSET_HAS (TARGET_FPU_FEATURES, FPU_FL_FP16))
+
+ /* FPU supports fused-multiply-add operations. */
+-#define TARGET_FMA (TARGET_VFP && TARGET_FPU_REV >= 4)
++#define TARGET_FMA (TARGET_FPU_REV >= 4)
+
+ /* FPU is ARMv8 compatible. */
+-#define TARGET_FPU_ARMV8 (TARGET_VFP && TARGET_FPU_REV >= 8)
++#define TARGET_FPU_ARMV8 (TARGET_FPU_REV >= 8)
+
+ /* FPU supports Crypto extensions. */
+ #define TARGET_CRYPTO \
+- (TARGET_VFP && ARM_FPU_FSET_HAS (TARGET_FPU_FEATURES, FPU_FL_CRYPTO))
++ (ARM_FPU_FSET_HAS (TARGET_FPU_FEATURES, FPU_FL_CRYPTO))
+
+ /* FPU supports Neon instructions. The setting of this macro gets
+ revealed via __ARM_NEON__ so we add extra guards upon TARGET_32BIT
+ and TARGET_HARD_FLOAT to ensure that NEON instructions are
+ available. */
+ #define TARGET_NEON \
+- (TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP \
++ (TARGET_32BIT && TARGET_HARD_FLOAT \
+ && ARM_FPU_FSET_HAS (TARGET_FPU_FEATURES, FPU_FL_NEON))
+
+ /* FPU supports ARMv8.1 Adv.SIMD extensions. */
+ #define TARGET_NEON_RDMA (TARGET_NEON && arm_arch8_1)
+
++/* FPU supports the floating point FP16 instructions for ARMv8.2 and later. */
++#define TARGET_VFP_FP16INST \
++ (TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 && arm_fp16_inst)
++
++/* FPU supports the AdvSIMD FP16 instructions for ARMv8.2 and later. */
++#define TARGET_NEON_FP16INST (TARGET_VFP_FP16INST && TARGET_NEON_RDMA)
++
+ /* Q-bit is present. */
+ #define TARGET_ARM_QBIT \
+ (TARGET_32BIT && arm_arch5e && (arm_arch_notm || arm_arch7))
+@@ -236,7 +237,7 @@ extern void (*arm_lang_output_object_attributes_hook)(void);
+
+ /* Should MOVW/MOVT be used in preference to a constant pool. */
+ #define TARGET_USE_MOVT \
+- (arm_arch_thumb2 \
++ (TARGET_HAVE_MOVT \
+ && (arm_disable_literal_pool \
+ || (!optimize_size && !current_tune->prefer_constant_pool)))
+
+@@ -251,14 +252,18 @@ extern void (*arm_lang_output_object_attributes_hook)(void);
+ #define TARGET_HAVE_MEMORY_BARRIER (TARGET_HAVE_DMB || TARGET_HAVE_DMB_MCR)
+
+ /* Nonzero if this chip supports ldrex and strex */
+-#define TARGET_HAVE_LDREX ((arm_arch6 && TARGET_ARM) || arm_arch7)
++#define TARGET_HAVE_LDREX ((arm_arch6 && TARGET_ARM) \
++ || arm_arch7 \
++ || (arm_arch8 && !arm_arch_notm))
+
+ /* Nonzero if this chip supports LPAE. */
+ #define TARGET_HAVE_LPAE \
+ (arm_arch7 && ARM_FSET_HAS_CPU1 (insn_flags, FL_FOR_ARCH7VE))
+
+ /* Nonzero if this chip supports ldrex{bh} and strex{bh}. */
+-#define TARGET_HAVE_LDREXBH ((arm_arch6k && TARGET_ARM) || arm_arch7)
++#define TARGET_HAVE_LDREXBH ((arm_arch6k && TARGET_ARM) \
++ || arm_arch7 \
++ || (arm_arch8 && !arm_arch_notm))
+
+ /* Nonzero if this chip supports ldrexd and strexd. */
+ #define TARGET_HAVE_LDREXD (((arm_arch6k && TARGET_ARM) \
+@@ -267,9 +272,20 @@ extern void (*arm_lang_output_object_attributes_hook)(void);
+ /* Nonzero if this chip supports load-acquire and store-release. */
+ #define TARGET_HAVE_LDACQ (TARGET_ARM_ARCH >= 8)
+
++/* Nonzero if this chip supports LDAEXD and STLEXD. */
++#define TARGET_HAVE_LDACQEXD (TARGET_ARM_ARCH >= 8 \
++ && TARGET_32BIT \
++ && arm_arch_notm)
++
++/* Nonzero if this chip provides the MOVW and MOVT instructions. */
++#define TARGET_HAVE_MOVT (arm_arch_thumb2 || arm_arch8)
++
++/* Nonzero if this chip provides the CBZ and CBNZ instructions. */
++#define TARGET_HAVE_CBZ (arm_arch_thumb2 || arm_arch8)
++
+ /* Nonzero if integer division instructions supported. */
+ #define TARGET_IDIV ((TARGET_ARM && arm_arch_arm_hwdiv) \
+- || (TARGET_THUMB2 && arm_arch_thumb_hwdiv))
++ || (TARGET_THUMB && arm_arch_thumb_hwdiv))
+
+ /* Nonzero if disallow volatile memory access in IT block. */
+ #define TARGET_NO_VOLATILE_CE (arm_arch_no_volatile_ce)
+@@ -349,7 +365,6 @@ enum vfp_reg_type
+ extern const struct arm_fpu_desc
+ {
+ const char *name;
+- enum arm_fp_model model;
+ int rev;
+ enum vfp_reg_type regs;
+ arm_fpu_feature_set features;
+@@ -358,7 +373,6 @@ extern const struct arm_fpu_desc
+ /* Accessors. */
+
+ #define TARGET_FPU_NAME (all_fpus[arm_fpu_index].name)
+-#define TARGET_FPU_MODEL (all_fpus[arm_fpu_index].model)
+ #define TARGET_FPU_REV (all_fpus[arm_fpu_index].rev)
+ #define TARGET_FPU_REGS (all_fpus[arm_fpu_index].regs)
+ #define TARGET_FPU_FEATURES (all_fpus[arm_fpu_index].features)
+@@ -402,7 +416,9 @@ enum base_architecture
+ BASE_ARCH_7R = 7,
+ BASE_ARCH_7M = 7,
+ BASE_ARCH_7EM = 7,
+- BASE_ARCH_8A = 8
++ BASE_ARCH_8A = 8,
++ BASE_ARCH_8M_BASE = 8,
++ BASE_ARCH_8M_MAIN = 8
+ };
+
+ /* The major revision number of the ARM Architecture implemented by the target. */
+@@ -447,6 +463,13 @@ extern int arm_arch8;
+ /* Nonzero if this chip supports the ARM Architecture 8.1 extensions. */
+ extern int arm_arch8_1;
+
++/* Nonzero if this chip supports the ARM Architecture 8.2 extensions. */
++extern int arm_arch8_2;
++
++/* Nonzero if this chip supports the FP16 instructions extension of ARM
++ Architecture 8.2. */
++extern int arm_fp16_inst;
++
+ /* Nonzero if this chip can benefit from load scheduling. */
+ extern int arm_ld_sched;
+
+@@ -478,6 +501,9 @@ extern int arm_tune_cortex_a9;
+ interworking clean. */
+ extern int arm_cpp_interwork;
+
++/* Nonzero if chip supports Thumb 1. */
++extern int arm_arch_thumb1;
++
+ /* Nonzero if chip supports Thumb 2. */
+ extern int arm_arch_thumb2;
+
+@@ -502,6 +528,9 @@ extern bool arm_disable_literal_pool;
+ /* Nonzero if chip supports the ARMv8 CRC instructions. */
+ extern int arm_arch_crc;
+
++/* Nonzero if chip supports the ARMv8-M Security Extensions. */
++extern int arm_arch_cmse;
++
+ #ifndef TARGET_DEFAULT
+ #define TARGET_DEFAULT (MASK_APCS_FRAME)
+ #endif
+@@ -1191,7 +1220,7 @@ enum reg_class
+ the data layout happens to be consistent for big-endian, so we explicitly allow
+ that case. */
+ #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
+- (TARGET_VFP && TARGET_BIG_END \
++ (TARGET_BIG_END \
+ && !(GET_MODE_SIZE (FROM) == 16 && GET_MODE_SIZE (TO) == 8) \
+ && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD \
+ || GET_MODE_SIZE (TO) > UNITS_PER_WORD) \
+@@ -1242,8 +1271,7 @@ enum reg_class
+ NO_REGS is returned. */
+ #define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, X) \
+ /* Restrict which direct reloads are allowed for VFP/iWMMXt regs. */ \
+- ((TARGET_VFP && TARGET_HARD_FLOAT \
+- && IS_VFP_CLASS (CLASS)) \
++ ((TARGET_HARD_FLOAT && IS_VFP_CLASS (CLASS)) \
+ ? coproc_secondary_reload_class (MODE, X, FALSE) \
+ : (TARGET_IWMMXT && (CLASS) == IWMMXT_REGS) \
+ ? coproc_secondary_reload_class (MODE, X, TRUE) \
+@@ -1255,8 +1283,7 @@ enum reg_class
+ /* If we need to load shorts byte-at-a-time, then we need a scratch. */
+ #define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
+ /* Restrict which direct reloads are allowed for VFP/iWMMXt regs. */ \
+- ((TARGET_VFP && TARGET_HARD_FLOAT \
+- && IS_VFP_CLASS (CLASS)) \
++ ((TARGET_HARD_FLOAT && IS_VFP_CLASS (CLASS)) \
+ ? coproc_secondary_reload_class (MODE, X, FALSE) : \
+ (TARGET_IWMMXT && (CLASS) == IWMMXT_REGS) ? \
+ coproc_secondary_reload_class (MODE, X, TRUE) : \
+@@ -1363,6 +1390,7 @@ enum reg_class
+ #define ARM_FT_VOLATILE (1 << 4) /* Does not return. */
+ #define ARM_FT_NESTED (1 << 5) /* Embedded inside another func. */
+ #define ARM_FT_STACKALIGN (1 << 6) /* Called with misaligned stack. */
++#define ARM_FT_CMSE_ENTRY (1 << 7) /* ARMv8-M non-secure entry function. */
+
+ /* Some macros to test these flags. */
+ #define ARM_FUNC_TYPE(t) (t & ARM_FT_TYPE_MASK)
+@@ -1371,6 +1399,7 @@ enum reg_class
+ #define IS_NAKED(t) (t & ARM_FT_NAKED)
+ #define IS_NESTED(t) (t & ARM_FT_NESTED)
+ #define IS_STACKALIGN(t) (t & ARM_FT_STACKALIGN)
++#define IS_CMSE_ENTRY(t) (t & ARM_FT_CMSE_ENTRY)
+
+
+ /* Structure used to hold the function stack frame layout. Offsets are
+@@ -1516,7 +1545,7 @@ typedef struct
+ On the ARM, r0-r3 are used to pass args. */
+ #define FUNCTION_ARG_REGNO_P(REGNO) \
+ (IN_RANGE ((REGNO), 0, 3) \
+- || (TARGET_AAPCS_BASED && TARGET_VFP && TARGET_HARD_FLOAT \
++ || (TARGET_AAPCS_BASED && TARGET_HARD_FLOAT \
+ && IN_RANGE ((REGNO), FIRST_VFP_REGNUM, FIRST_VFP_REGNUM + 15)) \
+ || (TARGET_IWMMXT_ABI \
+ && IN_RANGE ((REGNO), FIRST_IWMMXT_REGNUM, FIRST_IWMMXT_REGNUM + 9)))
+@@ -2187,13 +2216,9 @@ extern int making_const_table;
+ #define TARGET_ARM_ARCH \
+ (arm_base_arch) \
+
+-#define TARGET_ARM_V6M (!arm_arch_notm && !arm_arch_thumb2)
+-#define TARGET_ARM_V7M (!arm_arch_notm && arm_arch_thumb2)
+-
+ /* The highest Thumb instruction set version supported by the chip. */
+-#define TARGET_ARM_ARCH_ISA_THUMB \
+- (arm_arch_thumb2 ? 2 \
+- : ((TARGET_ARM_ARCH >= 5 || arm_arch4t) ? 1 : 0))
++#define TARGET_ARM_ARCH_ISA_THUMB \
++ (arm_arch_thumb2 ? 2 : (arm_arch_thumb1 ? 1 : 0))
+
+ /* Expands to an upper-case char of the target's architectural
+ profile. */
+@@ -2245,13 +2270,18 @@ extern const char *arm_rewrite_mcpu (int argc, const char **argv);
+ " :%{march=*:-march=%*}}" \
+ BIG_LITTLE_SPEC
+
++extern const char *arm_target_thumb_only (int argc, const char **argv);
++#define TARGET_MODE_SPEC_FUNCTIONS \
++ { "target_mode_check", arm_target_thumb_only },
++
+ /* -mcpu=native handling only makes sense with compiler running on
+ an ARM chip. */
+ #if defined(__arm__)
+ extern const char *host_detect_local_cpu (int argc, const char **argv);
+ # define EXTRA_SPEC_FUNCTIONS \
+ { "local_cpu_detect", host_detect_local_cpu }, \
+- BIG_LITTLE_CPU_SPEC_FUNCTIONS
++ BIG_LITTLE_CPU_SPEC_FUNCTIONS \
++ TARGET_MODE_SPEC_FUNCTIONS
+
+ # define MCPU_MTUNE_NATIVE_SPECS \
+ " %{march=native:%<march=native %:local_cpu_detect(arch)}" \
+@@ -2259,10 +2289,21 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
+ " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
+ #else
+ # define MCPU_MTUNE_NATIVE_SPECS ""
+-# define EXTRA_SPEC_FUNCTIONS BIG_LITTLE_CPU_SPEC_FUNCTIONS
++# define EXTRA_SPEC_FUNCTIONS \
++ BIG_LITTLE_CPU_SPEC_FUNCTIONS \
++ TARGET_MODE_SPEC_FUNCTIONS
+ #endif
+
+-#define DRIVER_SELF_SPECS MCPU_MTUNE_NATIVE_SPECS
++/* Automatically add -mthumb for Thumb-only targets if mode isn't specified
++ via the configuration option --with-mode or via the command line. The
++ function target_mode_check is called to do the check with either:
++ - an array of -march values if any is given;
++ - an array of -mcpu values if any is given;
++ - an empty array. */
++#define TARGET_MODE_SPECS \
++ " %{!marm:%{!mthumb:%:target_mode_check(%{march=*:%*;mcpu=*:%*;:})}}"
++
++#define DRIVER_SELF_SPECS MCPU_MTUNE_NATIVE_SPECS TARGET_MODE_SPECS
+ #define TARGET_SUPPORTS_WIDE_INT 1
+
+ /* For switching between functions with different target attributes. */
+--- a/src/gcc/config/arm/arm.md
++++ b/src/gcc/config/arm/arm.md
+@@ -118,10 +118,10 @@
+ ; This can be "a" for ARM, "t" for either of the Thumbs, "32" for
+ ; TARGET_32BIT, "t1" or "t2" to specify a specific Thumb mode. "v6"
+ ; for ARM or Thumb-2 with arm_arch6, and nov6 for ARM without
+-; arm_arch6. "v6t2" for Thumb-2 with arm_arch6. This attribute is
+-; used to compute attribute "enabled", use type "any" to enable an
+-; alternative in all cases.
+-(define_attr "arch" "any,a,t,32,t1,t2,v6,nov6,v6t2,neon_for_64bits,avoid_neon_for_64bits,iwmmxt,iwmmxt2,armv6_or_vfpv3"
++; arm_arch6. "v6t2" for Thumb-2 with arm_arch6 and "v8mb" for ARMv8-M
++; Baseline. This attribute is used to compute attribute "enabled",
++; use type "any" to enable an alternative in all cases.
++(define_attr "arch" "any,a,t,32,t1,t2,v6,nov6,v6t2,v8mb,neon_for_64bits,avoid_neon_for_64bits,iwmmxt,iwmmxt2,armv6_or_vfpv3,neon"
+ (const_string "any"))
+
+ (define_attr "arch_enabled" "no,yes"
+@@ -160,6 +160,10 @@
+ (match_test "TARGET_32BIT && arm_arch6 && arm_arch_thumb2"))
+ (const_string "yes")
+
++ (and (eq_attr "arch" "v8mb")
++ (match_test "TARGET_THUMB1 && arm_arch8"))
++ (const_string "yes")
++
+ (and (eq_attr "arch" "avoid_neon_for_64bits")
+ (match_test "TARGET_NEON")
+ (not (match_test "TARGET_PREFER_NEON_64BITS")))
+@@ -177,6 +181,10 @@
+ (and (eq_attr "arch" "armv6_or_vfpv3")
+ (match_test "arm_arch6 || TARGET_VFP3"))
+ (const_string "yes")
++
++ (and (eq_attr "arch" "neon")
++ (match_test "TARGET_NEON"))
++ (const_string "yes")
+ ]
+
+ (const_string "no")))
+@@ -539,6 +547,32 @@
+ (set_attr "type" "multiple")]
+ )
+
++(define_expand "addv<mode>4"
++ [(match_operand:SIDI 0 "register_operand")
++ (match_operand:SIDI 1 "register_operand")
++ (match_operand:SIDI 2 "register_operand")
++ (match_operand 3 "")]
++ "TARGET_32BIT"
++{
++ emit_insn (gen_add<mode>3_compareV (operands[0], operands[1], operands[2]));
++ arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
++
++ DONE;
++})
++
++(define_expand "uaddv<mode>4"
++ [(match_operand:SIDI 0 "register_operand")
++ (match_operand:SIDI 1 "register_operand")
++ (match_operand:SIDI 2 "register_operand")
++ (match_operand 3 "")]
++ "TARGET_32BIT"
++{
++ emit_insn (gen_add<mode>3_compareC (operands[0], operands[1], operands[2]));
++ arm_gen_unlikely_cbranch (NE, CC_Cmode, operands[3]);
++
++ DONE;
++})
++
+ (define_expand "addsi3"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+ (plus:SI (match_operand:SI 1 "s_register_operand" "")
+@@ -617,6 +651,165 @@
+ ]
+ )
+
++(define_insn_and_split "adddi3_compareV"
++ [(set (reg:CC_V CC_REGNUM)
++ (ne:CC_V
++ (plus:TI
++ (sign_extend:TI (match_operand:DI 1 "register_operand" "r"))
++ (sign_extend:TI (match_operand:DI 2 "register_operand" "r")))
++ (sign_extend:TI (plus:DI (match_dup 1) (match_dup 2)))))
++ (set (match_operand:DI 0 "register_operand" "=&r")
++ (plus:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_32BIT"
++ "#"
++ "&& reload_completed"
++ [(parallel [(set (reg:CC_C CC_REGNUM)
++ (compare:CC_C (plus:SI (match_dup 1) (match_dup 2))
++ (match_dup 1)))
++ (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))])
++ (parallel [(set (reg:CC_V CC_REGNUM)
++ (ne:CC_V
++ (plus:DI (plus:DI
++ (sign_extend:DI (match_dup 4))
++ (sign_extend:DI (match_dup 5)))
++ (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0)))
++ (plus:DI (sign_extend:DI
++ (plus:SI (match_dup 4) (match_dup 5)))
++ (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0)))))
++ (set (match_dup 3) (plus:SI (plus:SI
++ (match_dup 4) (match_dup 5))
++ (ltu:SI (reg:CC_C CC_REGNUM)
++ (const_int 0))))])]
++ "
++ {
++ operands[3] = gen_highpart (SImode, operands[0]);
++ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[4] = gen_highpart (SImode, operands[1]);
++ operands[1] = gen_lowpart (SImode, operands[1]);
++ operands[5] = gen_highpart (SImode, operands[2]);
++ operands[2] = gen_lowpart (SImode, operands[2]);
++ }"
++ [(set_attr "conds" "set")
++ (set_attr "length" "8")
++ (set_attr "type" "multiple")]
++)
++
++(define_insn "addsi3_compareV"
++ [(set (reg:CC_V CC_REGNUM)
++ (ne:CC_V
++ (plus:DI
++ (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
++ (sign_extend:DI (match_operand:SI 2 "register_operand" "r")))
++ (sign_extend:DI (plus:SI (match_dup 1) (match_dup 2)))))
++ (set (match_operand:SI 0 "register_operand" "=r")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_32BIT"
++ "adds%?\\t%0, %1, %2"
++ [(set_attr "conds" "set")
++ (set_attr "type" "alus_sreg")]
++)
++
++(define_insn "*addsi3_compareV_upper"
++ [(set (reg:CC_V CC_REGNUM)
++ (ne:CC_V
++ (plus:DI
++ (plus:DI
++ (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
++ (sign_extend:DI (match_operand:SI 2 "register_operand" "r")))
++ (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0)))
++ (plus:DI (sign_extend:DI
++ (plus:SI (match_dup 1) (match_dup 2)))
++ (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0)))))
++ (set (match_operand:SI 0 "register_operand" "=r")
++ (plus:SI
++ (plus:SI (match_dup 1) (match_dup 2))
++ (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))]
++ "TARGET_32BIT"
++ "adcs%?\\t%0, %1, %2"
++ [(set_attr "conds" "set")
++ (set_attr "type" "adcs_reg")]
++)
++
++(define_insn_and_split "adddi3_compareC"
++ [(set (reg:CC_C CC_REGNUM)
++ (ne:CC_C
++ (plus:TI
++ (zero_extend:TI (match_operand:DI 1 "register_operand" "r"))
++ (zero_extend:TI (match_operand:DI 2 "register_operand" "r")))
++ (zero_extend:TI (plus:DI (match_dup 1) (match_dup 2)))))
++ (set (match_operand:DI 0 "register_operand" "=&r")
++ (plus:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_32BIT"
++ "#"
++ "&& reload_completed"
++ [(parallel [(set (reg:CC_C CC_REGNUM)
++ (compare:CC_C (plus:SI (match_dup 1) (match_dup 2))
++ (match_dup 1)))
++ (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))])
++ (parallel [(set (reg:CC_C CC_REGNUM)
++ (ne:CC_C
++ (plus:DI (plus:DI
++ (zero_extend:DI (match_dup 4))
++ (zero_extend:DI (match_dup 5)))
++ (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0)))
++ (plus:DI (zero_extend:DI
++ (plus:SI (match_dup 4) (match_dup 5)))
++ (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0)))))
++ (set (match_dup 3) (plus:SI
++ (plus:SI (match_dup 4) (match_dup 5))
++ (ltu:SI (reg:CC_C CC_REGNUM)
++ (const_int 0))))])]
++ "
++ {
++ operands[3] = gen_highpart (SImode, operands[0]);
++ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[4] = gen_highpart (SImode, operands[1]);
++ operands[5] = gen_highpart (SImode, operands[2]);
++ operands[1] = gen_lowpart (SImode, operands[1]);
++ operands[2] = gen_lowpart (SImode, operands[2]);
++ }"
++ [(set_attr "conds" "set")
++ (set_attr "length" "8")
++ (set_attr "type" "multiple")]
++)
++
++(define_insn "*addsi3_compareC_upper"
++ [(set (reg:CC_C CC_REGNUM)
++ (ne:CC_C
++ (plus:DI
++ (plus:DI
++ (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
++ (zero_extend:DI (match_operand:SI 2 "register_operand" "r")))
++ (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0)))
++ (plus:DI (zero_extend:DI
++ (plus:SI (match_dup 1) (match_dup 2)))
++ (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0)))))
++ (set (match_operand:SI 0 "register_operand" "=r")
++ (plus:SI
++ (plus:SI (match_dup 1) (match_dup 2))
++ (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))]
++ "TARGET_32BIT"
++ "adcs%?\\t%0, %1, %2"
++ [(set_attr "conds" "set")
++ (set_attr "type" "adcs_reg")]
++)
++
++(define_insn "addsi3_compareC"
++ [(set (reg:CC_C CC_REGNUM)
++ (ne:CC_C
++ (plus:DI
++ (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
++ (zero_extend:DI (match_operand:SI 2 "register_operand" "r")))
++ (zero_extend:DI
++ (plus:SI (match_dup 1) (match_dup 2)))))
++ (set (match_operand:SI 0 "register_operand" "=r")
++ (plus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_32BIT"
++ "adds%?\\t%0, %1, %2"
++ [(set_attr "conds" "set")
++ (set_attr "type" "alus_sreg")]
++)
++
+ (define_insn "addsi3_compare0"
+ [(set (reg:CC_NOOV CC_REGNUM)
+ (compare:CC_NOOV
+@@ -866,20 +1059,90 @@
+ (set_attr "type" "adcs_reg")]
+ )
+
++(define_expand "subv<mode>4"
++ [(match_operand:SIDI 0 "register_operand")
++ (match_operand:SIDI 1 "register_operand")
++ (match_operand:SIDI 2 "register_operand")
++ (match_operand 3 "")]
++ "TARGET_32BIT"
++{
++ emit_insn (gen_sub<mode>3_compare1 (operands[0], operands[1], operands[2]));
++ arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
++
++ DONE;
++})
++
++(define_expand "usubv<mode>4"
++ [(match_operand:SIDI 0 "register_operand")
++ (match_operand:SIDI 1 "register_operand")
++ (match_operand:SIDI 2 "register_operand")
++ (match_operand 3 "")]
++ "TARGET_32BIT"
++{
++ emit_insn (gen_sub<mode>3_compare1 (operands[0], operands[1], operands[2]));
++ arm_gen_unlikely_cbranch (LTU, CCmode, operands[3]);
++
++ DONE;
++})
++
++(define_insn_and_split "subdi3_compare1"
++ [(set (reg:CC CC_REGNUM)
++ (compare:CC
++ (match_operand:DI 1 "register_operand" "r")
++ (match_operand:DI 2 "register_operand" "r")))
++ (set (match_operand:DI 0 "register_operand" "=&r")
++ (minus:DI (match_dup 1) (match_dup 2)))]
++ "TARGET_32BIT"
++ "#"
++ "&& reload_completed"
++ [(parallel [(set (reg:CC CC_REGNUM)
++ (compare:CC (match_dup 1) (match_dup 2)))
++ (set (match_dup 0) (minus:SI (match_dup 1) (match_dup 2)))])
++ (parallel [(set (reg:CC CC_REGNUM)
++ (compare:CC (match_dup 4) (match_dup 5)))
++ (set (match_dup 3) (minus:SI (minus:SI (match_dup 4) (match_dup 5))
++ (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))])]
++ {
++ operands[3] = gen_highpart (SImode, operands[0]);
++ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[4] = gen_highpart (SImode, operands[1]);
++ operands[1] = gen_lowpart (SImode, operands[1]);
++ operands[5] = gen_highpart (SImode, operands[2]);
++ operands[2] = gen_lowpart (SImode, operands[2]);
++ }
++ [(set_attr "conds" "set")
++ (set_attr "length" "8")
++ (set_attr "type" "multiple")]
++)
++
++(define_insn "subsi3_compare1"
++ [(set (reg:CC CC_REGNUM)
++ (compare:CC
++ (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "register_operand" "r")))
++ (set (match_operand:SI 0 "register_operand" "=r")
++ (minus:SI (match_dup 1) (match_dup 2)))]
++ "TARGET_32BIT"
++ "subs%?\\t%0, %1, %2"
++ [(set_attr "conds" "set")
++ (set_attr "type" "alus_sreg")]
++)
++
+ (define_insn "*subsi3_carryin"
+- [(set (match_operand:SI 0 "s_register_operand" "=r,r")
+- (minus:SI (minus:SI (match_operand:SI 1 "reg_or_int_operand" "r,I")
+- (match_operand:SI 2 "s_register_operand" "r,r"))
+- (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))]
++ [(set (match_operand:SI 0 "s_register_operand" "=r,r,r")
++ (minus:SI (minus:SI (match_operand:SI 1 "reg_or_int_operand" "r,I,Pz")
++ (match_operand:SI 2 "s_register_operand" "r,r,r"))
++ (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))]
+ "TARGET_32BIT"
+ "@
+ sbc%?\\t%0, %1, %2
+- rsc%?\\t%0, %2, %1"
++ rsc%?\\t%0, %2, %1
++ sbc%?\\t%0, %2, %2, lsl #1"
+ [(set_attr "conds" "use")
+- (set_attr "arch" "*,a")
++ (set_attr "arch" "*,a,t2")
+ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+- (set_attr "type" "adc_reg,adc_imm")]
++ (set_attr "type" "adc_reg,adc_imm,alu_shift_imm")]
+ )
+
+ (define_insn "*subsi3_carryin_const"
+@@ -1895,7 +2158,7 @@
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (div:SF (match_operand:SF 1 "s_register_operand" "")
+ (match_operand:SF 2 "s_register_operand" "")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "")
+
+ (define_expand "divdf3"
+@@ -2137,13 +2400,13 @@
+
+ for (i = 9; i <= 31; i++)
+ {
+- if ((((HOST_WIDE_INT) 1) << i) - 1 == INTVAL (operands[2]))
++ if ((HOST_WIDE_INT_1 << i) - 1 == INTVAL (operands[2]))
+ {
+ emit_insn (gen_extzv (operands[0], operands[1], GEN_INT (i),
+ const0_rtx));
+ DONE;
+ }
+- else if ((((HOST_WIDE_INT) 1) << i) - 1
++ else if ((HOST_WIDE_INT_1 << i) - 1
+ == ~INTVAL (operands[2]))
+ {
+ rtx shift = GEN_INT (i);
+@@ -2442,7 +2705,7 @@
+ {
+ int start_bit = INTVAL (operands[2]);
+ int width = INTVAL (operands[1]);
+- HOST_WIDE_INT mask = (((HOST_WIDE_INT)1) << width) - 1;
++ HOST_WIDE_INT mask = (HOST_WIDE_INT_1 << width) - 1;
+ rtx target, subtarget;
+
+ if (arm_arch_thumb2)
+@@ -3050,7 +3313,14 @@
+ (xor:DI (match_operand:DI 1 "s_register_operand" "")
+ (match_operand:DI 2 "arm_xordi_operand" "")))]
+ "TARGET_32BIT"
+- ""
++ {
++ /* The iWMMXt pattern for xordi3 accepts only register operands but we want
++ to reuse this expander for all TARGET_32BIT targets so just force the
++ constants into a register. Unlike for the anddi3 and iordi3 there are
++ no NEON instructions that take an immediate. */
++ if (TARGET_IWMMXT && !REG_P (operands[2]))
++ operands[2] = force_reg (DImode, operands[2]);
++ }
+ )
+
+ (define_insn_and_split "*xordi3_insn"
+@@ -3744,8 +4014,7 @@
+ {
+ rtx scratch1, scratch2;
+
+- if (CONST_INT_P (operands[2])
+- && (HOST_WIDE_INT) INTVAL (operands[2]) == 1)
++ if (operands[2] == CONST1_RTX (SImode))
+ {
+ emit_insn (gen_arm_ashldi3_1bit (operands[0], operands[1]));
+ DONE;
+@@ -3790,7 +4059,7 @@
+ "TARGET_EITHER"
+ "
+ if (CONST_INT_P (operands[2])
+- && ((unsigned HOST_WIDE_INT) INTVAL (operands[2])) > 31)
++ && (UINTVAL (operands[2])) > 31)
+ {
+ emit_insn (gen_movsi (operands[0], const0_rtx));
+ DONE;
+@@ -3818,8 +4087,7 @@
+ {
+ rtx scratch1, scratch2;
+
+- if (CONST_INT_P (operands[2])
+- && (HOST_WIDE_INT) INTVAL (operands[2]) == 1)
++ if (operands[2] == CONST1_RTX (SImode))
+ {
+ emit_insn (gen_arm_ashrdi3_1bit (operands[0], operands[1]));
+ DONE;
+@@ -3864,7 +4132,7 @@
+ "TARGET_EITHER"
+ "
+ if (CONST_INT_P (operands[2])
+- && ((unsigned HOST_WIDE_INT) INTVAL (operands[2])) > 31)
++ && UINTVAL (operands[2]) > 31)
+ operands[2] = GEN_INT (31);
+ "
+ )
+@@ -3889,8 +4157,7 @@
+ {
+ rtx scratch1, scratch2;
+
+- if (CONST_INT_P (operands[2])
+- && (HOST_WIDE_INT) INTVAL (operands[2]) == 1)
++ if (operands[2] == CONST1_RTX (SImode))
+ {
+ emit_insn (gen_arm_lshrdi3_1bit (operands[0], operands[1]));
+ DONE;
+@@ -3935,7 +4202,7 @@
+ "TARGET_EITHER"
+ "
+ if (CONST_INT_P (operands[2])
+- && ((unsigned HOST_WIDE_INT) INTVAL (operands[2])) > 31)
++ && (UINTVAL (operands[2])) > 31)
+ {
+ emit_insn (gen_movsi (operands[0], const0_rtx));
+ DONE;
+@@ -3969,7 +4236,7 @@
+ if (TARGET_32BIT)
+ {
+ if (CONST_INT_P (operands[2])
+- && ((unsigned HOST_WIDE_INT) INTVAL (operands[2])) > 31)
++ && UINTVAL (operands[2]) > 31)
+ operands[2] = GEN_INT (INTVAL (operands[2]) % 32);
+ }
+ else /* TARGET_THUMB1 */
+@@ -4300,9 +4567,11 @@
+ (define_insn "*extv_reg"
+ [(set (match_operand:SI 0 "s_register_operand" "=r")
+ (sign_extract:SI (match_operand:SI 1 "s_register_operand" "r")
+- (match_operand:SI 2 "const_int_M_operand" "M")
+- (match_operand:SI 3 "const_int_M_operand" "M")))]
+- "arm_arch_thumb2"
++ (match_operand:SI 2 "const_int_operand" "n")
++ (match_operand:SI 3 "const_int_operand" "n")))]
++ "arm_arch_thumb2
++ && IN_RANGE (INTVAL (operands[3]), 0, 31)
++ && IN_RANGE (INTVAL (operands[2]), 1, 32 - INTVAL (operands[3]))"
+ "sbfx%?\t%0, %1, %3, %2"
+ [(set_attr "length" "4")
+ (set_attr "predicable" "yes")
+@@ -4313,9 +4582,11 @@
+ (define_insn "extzv_t2"
+ [(set (match_operand:SI 0 "s_register_operand" "=r")
+ (zero_extract:SI (match_operand:SI 1 "s_register_operand" "r")
+- (match_operand:SI 2 "const_int_M_operand" "M")
+- (match_operand:SI 3 "const_int_M_operand" "M")))]
+- "arm_arch_thumb2"
++ (match_operand:SI 2 "const_int_operand" "n")
++ (match_operand:SI 3 "const_int_operand" "n")))]
++ "arm_arch_thumb2
++ && IN_RANGE (INTVAL (operands[3]), 0, 31)
++ && IN_RANGE (INTVAL (operands[2]), 1, 32 - INTVAL (operands[3]))"
+ "ubfx%?\t%0, %1, %3, %2"
+ [(set_attr "length" "4")
+ (set_attr "predicable" "yes")
+@@ -4326,23 +4597,29 @@
+
+ ;; Division instructions
+ (define_insn "divsi3"
+- [(set (match_operand:SI 0 "s_register_operand" "=r")
+- (div:SI (match_operand:SI 1 "s_register_operand" "r")
+- (match_operand:SI 2 "s_register_operand" "r")))]
++ [(set (match_operand:SI 0 "s_register_operand" "=r,r")
++ (div:SI (match_operand:SI 1 "s_register_operand" "r,r")
++ (match_operand:SI 2 "s_register_operand" "r,r")))]
+ "TARGET_IDIV"
+- "sdiv%?\t%0, %1, %2"
+- [(set_attr "predicable" "yes")
++ "@
++ sdiv%?\t%0, %1, %2
++ sdiv\t%0, %1, %2"
++ [(set_attr "arch" "32,v8mb")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+ (set_attr "type" "sdiv")]
+ )
+
+ (define_insn "udivsi3"
+- [(set (match_operand:SI 0 "s_register_operand" "=r")
+- (udiv:SI (match_operand:SI 1 "s_register_operand" "r")
+- (match_operand:SI 2 "s_register_operand" "r")))]
++ [(set (match_operand:SI 0 "s_register_operand" "=r,r")
++ (udiv:SI (match_operand:SI 1 "s_register_operand" "r,r")
++ (match_operand:SI 2 "s_register_operand" "r,r")))]
+ "TARGET_IDIV"
+- "udiv%?\t%0, %1, %2"
+- [(set_attr "predicable" "yes")
++ "@
++ udiv%?\t%0, %1, %2
++ udiv\t%0, %1, %2"
++ [(set_attr "arch" "32,v8mb")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+ (set_attr "type" "udiv")]
+ )
+@@ -4350,6 +4627,63 @@
+
+ ;; Unary arithmetic insns
+
++(define_expand "negvsi3"
++ [(match_operand:SI 0 "register_operand")
++ (match_operand:SI 1 "register_operand")
++ (match_operand 2 "")]
++ "TARGET_32BIT"
++{
++ emit_insn (gen_subsi3_compare (operands[0], const0_rtx, operands[1]));
++ arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[2]);
++
++ DONE;
++})
++
++(define_expand "negvdi3"
++ [(match_operand:DI 0 "register_operand")
++ (match_operand:DI 1 "register_operand")
++ (match_operand 2 "")]
++ "TARGET_ARM"
++{
++ emit_insn (gen_negdi2_compare (operands[0], operands[1]));
++ arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[2]);
++
++ DONE;
++})
++
++
++(define_insn_and_split "negdi2_compare"
++ [(set (reg:CC CC_REGNUM)
++ (compare:CC
++ (const_int 0)
++ (match_operand:DI 1 "register_operand" "0,r")))
++ (set (match_operand:DI 0 "register_operand" "=r,&r")
++ (minus:DI (const_int 0) (match_dup 1)))]
++ "TARGET_ARM"
++ "#"
++ "&& reload_completed"
++ [(parallel [(set (reg:CC CC_REGNUM)
++ (compare:CC (const_int 0) (match_dup 1)))
++ (set (match_dup 0) (minus:SI (const_int 0)
++ (match_dup 1)))])
++ (parallel [(set (reg:CC CC_REGNUM)
++ (compare:CC (const_int 0) (match_dup 3)))
++ (set (match_dup 2)
++ (minus:SI
++ (minus:SI (const_int 0) (match_dup 3))
++ (ltu:SI (reg:CC_C CC_REGNUM)
++ (const_int 0))))])]
++ {
++ operands[2] = gen_highpart (SImode, operands[0]);
++ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[3] = gen_highpart (SImode, operands[1]);
++ operands[1] = gen_lowpart (SImode, operands[1]);
++ }
++ [(set_attr "conds" "set")
++ (set_attr "length" "8")
++ (set_attr "type" "multiple")]
++)
++
+ (define_expand "negdi2"
+ [(parallel
+ [(set (match_operand:DI 0 "s_register_operand" "")
+@@ -4367,12 +4701,13 @@
+
+ ;; The constraints here are to prevent a *partial* overlap (where %Q0 == %R1).
+ ;; The first alternative allows the common case of a *full* overlap.
+-(define_insn_and_split "*arm_negdi2"
++(define_insn_and_split "*negdi2_insn"
+ [(set (match_operand:DI 0 "s_register_operand" "=r,&r")
+ (neg:DI (match_operand:DI 1 "s_register_operand" "0,r")))
+ (clobber (reg:CC CC_REGNUM))]
+- "TARGET_ARM"
+- "#" ; "rsbs\\t%Q0, %Q1, #0\;rsc\\t%R0, %R1, #0"
++ "TARGET_32BIT"
++ "#" ; rsbs %Q0, %Q1, #0; rsc %R0, %R1, #0 (ARM)
++ ; negs %Q0, %Q1 ; sbc %R0, %R1, %R1, lsl #1 (Thumb-2)
+ "&& reload_completed"
+ [(parallel [(set (reg:CC CC_REGNUM)
+ (compare:CC (const_int 0) (match_dup 1)))
+@@ -4390,6 +4725,20 @@
+ (set_attr "type" "multiple")]
+ )
+
++(define_insn "*negsi2_carryin_compare"
++ [(set (reg:CC CC_REGNUM)
++ (compare:CC (const_int 0)
++ (match_operand:SI 1 "s_register_operand" "r")))
++ (set (match_operand:SI 0 "s_register_operand" "=r")
++ (minus:SI (minus:SI (const_int 0)
++ (match_dup 1))
++ (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))]
++ "TARGET_ARM"
++ "rscs\\t%0, %1, #0"
++ [(set_attr "conds" "set")
++ (set_attr "type" "alus_imm")]
++)
++
+ (define_expand "negsi2"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+ (neg:SI (match_operand:SI 1 "s_register_operand" "")))]
+@@ -4412,7 +4761,7 @@
+ (define_expand "negsf2"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (neg:SF (match_operand:SF 1 "s_register_operand" "")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ ""
+ )
+
+@@ -4685,7 +5034,7 @@
+ (define_expand "sqrtsf2"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (sqrt:SF (match_operand:SF 1 "s_register_operand" "")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "")
+
+ (define_expand "sqrtdf2"
+@@ -4854,7 +5203,7 @@
+ ""
+ )
+
+-/* DFmode -> HFmode conversions have to go through SFmode. */
++;; DFmode to HFmode conversions have to go through SFmode.
+ (define_expand "truncdfhf2"
+ [(set (match_operand:HF 0 "general_operand" "")
+ (float_truncate:HF
+@@ -5117,7 +5466,7 @@
+ (match_operator 5 "subreg_lowpart_operator"
+ [(match_operand:SI 4 "s_register_operand" "")]))))]
+ "TARGET_32BIT
+- && ((unsigned HOST_WIDE_INT) INTVAL (operands[3])
++ && (UINTVAL (operands[3])
+ == (GET_MODE_MASK (GET_MODE (operands[5]))
+ & (GET_MODE_MASK (GET_MODE (operands[5]))
+ << (INTVAL (operands[2])))))"
+@@ -5361,7 +5710,7 @@
+ ""
+ )
+
+-/* HFmode -> DFmode conversions have to go through SFmode. */
++;; HFmode -> DFmode conversions have to go through SFmode.
+ (define_expand "extendhfdf2"
+ [(set (match_operand:DF 0 "general_operand" "")
+ (float_extend:DF (match_operand:HF 1 "general_operand" "")))]
+@@ -5490,7 +5839,7 @@
+ [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, r, q, m")
+ (match_operand:DI 1 "di_operand" "rDa,Db,Dc,mi,q"))]
+ "TARGET_32BIT
+- && !(TARGET_HARD_FLOAT && TARGET_VFP)
++ && !(TARGET_HARD_FLOAT)
+ && !TARGET_IWMMXT
+ && ( register_operand (operands[0], DImode)
+ || register_operand (operands[1], DImode))"
+@@ -5699,12 +6048,15 @@
+ ;; LO_SUM adds in the high bits. Fortunately these are opaque operations
+ ;; so this does not matter.
+ (define_insn "*arm_movt"
+- [(set (match_operand:SI 0 "nonimmediate_operand" "=r")
+- (lo_sum:SI (match_operand:SI 1 "nonimmediate_operand" "0")
+- (match_operand:SI 2 "general_operand" "i")))]
+- "arm_arch_thumb2 && arm_valid_symbolic_address_p (operands[2])"
+- "movt%?\t%0, #:upper16:%c2"
+- [(set_attr "predicable" "yes")
++ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r")
++ (lo_sum:SI (match_operand:SI 1 "nonimmediate_operand" "0,0")
++ (match_operand:SI 2 "general_operand" "i,i")))]
++ "TARGET_HAVE_MOVT && arm_valid_symbolic_address_p (operands[2])"
++ "@
++ movt%?\t%0, #:upper16:%c2
++ movt\t%0, #:upper16:%c2"
++ [(set_attr "arch" "32,v8mb")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+ (set_attr "length" "4")
+ (set_attr "type" "alu_sreg")]
+@@ -5713,8 +6065,7 @@
+ (define_insn "*arm_movsi_insn"
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m")
+ (match_operand:SI 1 "general_operand" "rk, I,K,j,mi,rk"))]
+- "TARGET_ARM && ! TARGET_IWMMXT
+- && !(TARGET_HARD_FLOAT && TARGET_VFP)
++ "TARGET_ARM && !TARGET_IWMMXT && !TARGET_HARD_FLOAT
+ && ( register_operand (operands[0], SImode)
+ || register_operand (operands[1], SImode))"
+ "@
+@@ -5726,6 +6077,7 @@
+ str%?\\t%1, %0"
+ [(set_attr "type" "mov_reg,mov_imm,mvn_imm,mov_imm,load1,store1")
+ (set_attr "predicable" "yes")
++ (set_attr "arch" "*,*,*,v6t2,*,*")
+ (set_attr "pool_range" "*,*,*,*,4096,*")
+ (set_attr "neg_pool_range" "*,*,*,*,4084,*")]
+ )
+@@ -5762,7 +6114,8 @@
+ [(set (match_operand:SI 0 "arm_general_register_operand" "")
+ (const:SI (plus:SI (match_operand:SI 1 "general_operand" "")
+ (match_operand:SI 2 "const_int_operand" ""))))]
+- "TARGET_THUMB2
++ "TARGET_THUMB
++ && TARGET_HAVE_MOVT
+ && arm_disable_literal_pool
+ && reload_completed
+ && GET_CODE (operands[1]) == SYMBOL_REF"
+@@ -5793,8 +6146,7 @@
+ (define_split
+ [(set (match_operand:SI 0 "arm_general_register_operand" "")
+ (match_operand:SI 1 "general_operand" ""))]
+- "TARGET_32BIT
+- && TARGET_USE_MOVT && GET_CODE (operands[1]) == SYMBOL_REF
++ "TARGET_USE_MOVT && GET_CODE (operands[1]) == SYMBOL_REF
+ && !flag_pic && !target_word_relocations
+ && !arm_tls_referenced_p (operands[1])"
+ [(clobber (const_int 0))]
+@@ -6362,7 +6714,7 @@
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,m,r")
+ (match_operand:HI 1 "general_operand" "rIk,K,n,r,mi"))]
+ "TARGET_ARM
+- && arm_arch4
++ && arm_arch4 && !TARGET_HARD_FLOAT
+ && (register_operand (operands[0], HImode)
+ || register_operand (operands[1], HImode))"
+ "@
+@@ -6388,7 +6740,7 @@
+ (define_insn "*movhi_bytes"
+ [(set (match_operand:HI 0 "s_register_operand" "=r,r,r")
+ (match_operand:HI 1 "arm_rhs_operand" "I,rk,K"))]
+- "TARGET_ARM"
++ "TARGET_ARM && !TARGET_HARD_FLOAT"
+ "@
+ mov%?\\t%0, %1\\t%@ movhi
+ mov%?\\t%0, %1\\t%@ movhi
+@@ -6396,7 +6748,7 @@
+ [(set_attr "predicable" "yes")
+ (set_attr "type" "mov_imm,mov_reg,mvn_imm")]
+ )
+-
++
+ ;; We use a DImode scratch because we may occasionally need an additional
+ ;; temporary if the address isn't offsettable -- push_reload doesn't seem
+ ;; to take any notice of the "o" constraints on reload_memory_operand operand.
+@@ -6518,7 +6870,7 @@
+ strb%?\\t%1, %0"
+ [(set_attr "type" "mov_reg,mov_reg,mov_imm,mov_imm,mvn_imm,load1,store1,load1,store1")
+ (set_attr "predicable" "yes")
+- (set_attr "predicable_short_it" "yes,yes,yes,no,no,no,no,no,no")
++ (set_attr "predicable_short_it" "yes,yes,no,yes,no,no,no,no,no")
+ (set_attr "arch" "t2,any,any,t2,any,t2,t2,any,any")
+ (set_attr "length" "2,4,4,2,4,2,2,4,4")]
+ )
+@@ -6548,7 +6900,7 @@
+ (define_insn "*arm32_movhf"
+ [(set (match_operand:HF 0 "nonimmediate_operand" "=r,m,r,r")
+ (match_operand:HF 1 "general_operand" " m,r,r,F"))]
+- "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_FP16)
++ "TARGET_32BIT && !TARGET_HARD_FLOAT
+ && ( s_register_operand (operands[0], HFmode)
+ || s_register_operand (operands[1], HFmode))"
+ "*
+@@ -6892,7 +7244,7 @@
+ [(set (pc) (if_then_else
+ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:SF 1 "s_register_operand" "")
+- (match_operand:SF 2 "arm_float_compare_operand" "")])
++ (match_operand:SF 2 "vfp_compare_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+ (pc)))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT"
+@@ -6904,7 +7256,7 @@
+ [(set (pc) (if_then_else
+ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:DF 1 "s_register_operand" "")
+- (match_operand:DF 2 "arm_float_compare_operand" "")])
++ (match_operand:DF 2 "vfp_compare_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+ (pc)))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+@@ -7366,11 +7718,29 @@
+ DONE;
+ }")
+
++(define_expand "cstorehf4"
++ [(set (match_operand:SI 0 "s_register_operand")
++ (match_operator:SI 1 "expandable_comparison_operator"
++ [(match_operand:HF 2 "s_register_operand")
++ (match_operand:HF 3 "vfp_compare_operand")]))]
++ "TARGET_VFP_FP16INST"
++ {
++ if (!arm_validize_comparison (&operands[1],
++ &operands[2],
++ &operands[3]))
++ FAIL;
++
++ emit_insn (gen_cstore_cc (operands[0], operands[1],
++ operands[2], operands[3]));
++ DONE;
++ }
++)
++
+ (define_expand "cstoresf4"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:SF 2 "s_register_operand" "")
+- (match_operand:SF 3 "arm_float_compare_operand" "")]))]
++ (match_operand:SF 3 "vfp_compare_operand" "")]))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "emit_insn (gen_cstore_cc (operands[0], operands[1],
+ operands[2], operands[3])); DONE;"
+@@ -7380,7 +7750,7 @@
+ [(set (match_operand:SI 0 "s_register_operand" "")
+ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:DF 2 "s_register_operand" "")
+- (match_operand:DF 3 "arm_float_compare_operand" "")]))]
++ (match_operand:DF 3 "vfp_compare_operand" "")]))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+ "emit_insn (gen_cstore_cc (operands[0], operands[1],
+ operands[2], operands[3])); DONE;"
+@@ -7418,9 +7788,31 @@
+ rtx ccreg;
+
+ if (!arm_validize_comparison (&operands[1], &XEXP (operands[1], 0),
+- &XEXP (operands[1], 1)))
++ &XEXP (operands[1], 1)))
+ FAIL;
+-
++
++ code = GET_CODE (operands[1]);
++ ccreg = arm_gen_compare_reg (code, XEXP (operands[1], 0),
++ XEXP (operands[1], 1), NULL_RTX);
++ operands[1] = gen_rtx_fmt_ee (code, VOIDmode, ccreg, const0_rtx);
++ }"
++)
++
++(define_expand "movhfcc"
++ [(set (match_operand:HF 0 "s_register_operand")
++ (if_then_else:HF (match_operand 1 "arm_cond_move_operator")
++ (match_operand:HF 2 "s_register_operand")
++ (match_operand:HF 3 "s_register_operand")))]
++ "TARGET_VFP_FP16INST"
++ "
++ {
++ enum rtx_code code = GET_CODE (operands[1]);
++ rtx ccreg;
++
++ if (!arm_validize_comparison (&operands[1], &XEXP (operands[1], 0),
++ &XEXP (operands[1], 1)))
++ FAIL;
++
+ code = GET_CODE (operands[1]);
+ ccreg = arm_gen_compare_reg (code, XEXP (operands[1], 0),
+ XEXP (operands[1], 1), NULL_RTX);
+@@ -7439,7 +7831,7 @@
+ enum rtx_code code = GET_CODE (operands[1]);
+ rtx ccreg;
+
+- if (!arm_validize_comparison (&operands[1], &XEXP (operands[1], 0),
++ if (!arm_validize_comparison (&operands[1], &XEXP (operands[1], 0),
+ &XEXP (operands[1], 1)))
+ FAIL;
+
+@@ -7504,6 +7896,37 @@
+ (set_attr "type" "fcsel")]
+ )
+
++(define_insn "*cmovhf"
++ [(set (match_operand:HF 0 "s_register_operand" "=t")
++ (if_then_else:HF (match_operator 1 "arm_vsel_comparison_operator"
++ [(match_operand 2 "cc_register" "") (const_int 0)])
++ (match_operand:HF 3 "s_register_operand" "t")
++ (match_operand:HF 4 "s_register_operand" "t")))]
++ "TARGET_VFP_FP16INST"
++ "*
++ {
++ enum arm_cond_code code = maybe_get_arm_condition_code (operands[1]);
++ switch (code)
++ {
++ case ARM_GE:
++ case ARM_GT:
++ case ARM_EQ:
++ case ARM_VS:
++ return \"vsel%d1.f16\\t%0, %3, %4\";
++ case ARM_LT:
++ case ARM_LE:
++ case ARM_NE:
++ case ARM_VC:
++ return \"vsel%D1.f16\\t%0, %4, %3\";
++ default:
++ gcc_unreachable ();
++ }
++ return \"\";
++ }"
++ [(set_attr "conds" "use")
++ (set_attr "type" "fcsel")]
++)
++
+ (define_insn_and_split "*movsicc_insn"
+ [(set (match_operand:SI 0 "s_register_operand" "=r,r,r,r,r,r,r,r")
+ (if_then_else:SI
+@@ -7627,6 +8050,7 @@
+ "
+ {
+ rtx callee, pat;
++ tree addr = MEM_EXPR (operands[0]);
+
+ /* In an untyped call, we can get NULL for operand 2. */
+ if (operands[2] == NULL_RTX)
+@@ -7641,8 +8065,17 @@
+ : !REG_P (callee))
+ XEXP (operands[0], 0) = force_reg (Pmode, callee);
+
+- pat = gen_call_internal (operands[0], operands[1], operands[2]);
+- arm_emit_call_insn (pat, XEXP (operands[0], 0), false);
++ if (detect_cmse_nonsecure_call (addr))
++ {
++ pat = gen_nonsecure_call_internal (operands[0], operands[1],
++ operands[2]);
++ emit_call_insn (pat);
++ }
++ else
++ {
++ pat = gen_call_internal (operands[0], operands[1], operands[2]);
++ arm_emit_call_insn (pat, XEXP (operands[0], 0), false);
++ }
+ DONE;
+ }"
+ )
+@@ -7653,6 +8086,24 @@
+ (use (match_operand 2 "" ""))
+ (clobber (reg:SI LR_REGNUM))])])
+
++(define_expand "nonsecure_call_internal"
++ [(parallel [(call (unspec:SI [(match_operand 0 "memory_operand" "")]
++ UNSPEC_NONSECURE_MEM)
++ (match_operand 1 "general_operand" ""))
++ (use (match_operand 2 "" ""))
++ (clobber (reg:SI LR_REGNUM))
++ (clobber (reg:SI 4))])]
++ "use_cmse"
++ "
++ {
++ rtx tmp;
++ tmp = copy_to_suggested_reg (XEXP (operands[0], 0),
++ gen_rtx_REG (SImode, 4),
++ SImode);
++
++ operands[0] = replace_equiv_address (operands[0], tmp);
++ }")
++
+ (define_insn "*call_reg_armv5"
+ [(call (mem:SI (match_operand:SI 0 "s_register_operand" "r"))
+ (match_operand 1 "" ""))
+@@ -7688,6 +8139,7 @@
+ "
+ {
+ rtx pat, callee;
++ tree addr = MEM_EXPR (operands[1]);
+
+ /* In an untyped call, we can get NULL for operand 2. */
+ if (operands[3] == 0)
+@@ -7702,9 +8154,18 @@
+ : !REG_P (callee))
+ XEXP (operands[1], 0) = force_reg (Pmode, callee);
+
+- pat = gen_call_value_internal (operands[0], operands[1],
+- operands[2], operands[3]);
+- arm_emit_call_insn (pat, XEXP (operands[1], 0), false);
++ if (detect_cmse_nonsecure_call (addr))
++ {
++ pat = gen_nonsecure_call_value_internal (operands[0], operands[1],
++ operands[2], operands[3]);
++ emit_call_insn (pat);
++ }
++ else
++ {
++ pat = gen_call_value_internal (operands[0], operands[1],
++ operands[2], operands[3]);
++ arm_emit_call_insn (pat, XEXP (operands[1], 0), false);
++ }
+ DONE;
+ }"
+ )
+@@ -7716,6 +8177,25 @@
+ (use (match_operand 3 "" ""))
+ (clobber (reg:SI LR_REGNUM))])])
+
++(define_expand "nonsecure_call_value_internal"
++ [(parallel [(set (match_operand 0 "" "")
++ (call (unspec:SI [(match_operand 1 "memory_operand" "")]
++ UNSPEC_NONSECURE_MEM)
++ (match_operand 2 "general_operand" "")))
++ (use (match_operand 3 "" ""))
++ (clobber (reg:SI LR_REGNUM))
++ (clobber (reg:SI 4))])]
++ "use_cmse"
++ "
++ {
++ rtx tmp;
++ tmp = copy_to_suggested_reg (XEXP (operands[1], 0),
++ gen_rtx_REG (SImode, 4),
++ SImode);
++
++ operands[1] = replace_equiv_address (operands[1], tmp);
++ }")
++
+ (define_insn "*call_value_reg_armv5"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:SI 1 "s_register_operand" "r"))
+@@ -8153,8 +8633,8 @@
+ )
+
+ (define_insn "probe_stack"
+- [(set (match_operand 0 "memory_operand" "=m")
+- (unspec [(const_int 0)] UNSPEC_PROBE_STACK))]
++ [(set (match_operand:SI 0 "memory_operand" "=m")
++ (unspec:SI [(const_int 0)] UNSPEC_PROBE_STACK))]
+ "TARGET_32BIT"
+ "str%?\\tr0, %0"
+ [(set_attr "type" "store1")
+@@ -10221,8 +10701,8 @@
+ (match_operand 1 "const_int_operand" "")))
+ (clobber (match_scratch:SI 2 ""))]
+ "TARGET_ARM
+- && (((unsigned HOST_WIDE_INT) INTVAL (operands[1]))
+- == (((unsigned HOST_WIDE_INT) INTVAL (operands[1])) >> 24) << 24)"
++ && ((UINTVAL (operands[1]))
++ == ((UINTVAL (operands[1])) >> 24) << 24)"
+ [(set (match_dup 2) (zero_extend:SI (match_dup 0)))
+ (set (reg:CC CC_REGNUM) (compare:CC (match_dup 2) (match_dup 1)))]
+ "
+@@ -10562,7 +11042,11 @@
+ }
+ "
+ [(set_attr "type" "load4")
+- (set_attr "predicable" "yes")]
++ (set_attr "predicable" "yes")
++ (set (attr "length")
++ (symbol_ref "arm_attr_length_pop_multi (operands,
++ /*return_pc=*/false,
++ /*write_back_p=*/true)"))]
+ )
+
+ ;; Pop with return (as used in epilogue RTL)
+@@ -10591,7 +11075,10 @@
+ }
+ "
+ [(set_attr "type" "load4")
+- (set_attr "predicable" "yes")]
++ (set_attr "predicable" "yes")
++ (set (attr "length")
++ (symbol_ref "arm_attr_length_pop_multi (operands, /*return_pc=*/true,
++ /*write_back_p=*/true)"))]
+ )
+
+ (define_insn "*pop_multiple_with_return"
+@@ -10611,7 +11098,10 @@
+ }
+ "
+ [(set_attr "type" "load4")
+- (set_attr "predicable" "yes")]
++ (set_attr "predicable" "yes")
++ (set (attr "length")
++ (symbol_ref "arm_attr_length_pop_multi (operands, /*return_pc=*/true,
++ /*write_back_p=*/false)"))]
+ )
+
+ ;; Load into PC and return
+@@ -10632,7 +11122,7 @@
+ (match_operand:SI 2 "const_int_I_operand" "I")))
+ (set (match_operand:DF 3 "vfp_hard_register_operand" "")
+ (mem:DF (match_dup 1)))])]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "*
+ {
+ int num_regs = XVECLEN (operands[0], 0);
+@@ -10822,19 +11312,22 @@
+ (set_attr "predicable_short_it" "no")
+ (set_attr "type" "clz")])
+
+-(define_expand "ctzsi2"
+- [(set (match_operand:SI 0 "s_register_operand" "")
+- (ctz:SI (match_operand:SI 1 "s_register_operand" "")))]
++;; Keep this as a CTZ expression until after reload and then split
++;; into RBIT + CLZ. Since RBIT is represented as an UNSPEC it is unlikely
++;; to fold with any other expression.
++
++(define_insn_and_split "ctzsi2"
++ [(set (match_operand:SI 0 "s_register_operand" "=r")
++ (ctz:SI (match_operand:SI 1 "s_register_operand" "r")))]
+ "TARGET_32BIT && arm_arch_thumb2"
++ "#"
++ "&& reload_completed"
++ [(const_int 0)]
+ "
+- {
+- rtx tmp = gen_reg_rtx (SImode);
+- emit_insn (gen_rbitsi2 (tmp, operands[1]));
+- emit_insn (gen_clzsi2 (operands[0], tmp));
+- }
+- DONE;
+- "
+-)
++ emit_insn (gen_rbitsi2 (operands[0], operands[1]));
++ emit_insn (gen_clzsi2 (operands[0], operands[0]));
++ DONE;
++")
+
+ ;; V5E instructions.
+
+@@ -10958,13 +11451,16 @@
+ ;; We only care about the lower 16 bits of the constant
+ ;; being inserted into the upper 16 bits of the register.
+ (define_insn "*arm_movtas_ze"
+- [(set (zero_extract:SI (match_operand:SI 0 "s_register_operand" "+r")
++ [(set (zero_extract:SI (match_operand:SI 0 "s_register_operand" "+r,r")
+ (const_int 16)
+ (const_int 16))
+ (match_operand:SI 1 "const_int_operand" ""))]
+- "arm_arch_thumb2"
+- "movt%?\t%0, %L1"
+- [(set_attr "predicable" "yes")
++ "TARGET_HAVE_MOVT"
++ "@
++ movt%?\t%0, %L1
++ movt\t%0, %L1"
++ [(set_attr "arch" "32,v8mb")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+ (set_attr "length" "4")
+ (set_attr "type" "alu_sreg")]
+--- a/src/gcc/config/arm/arm.opt
++++ b/src/gcc/config/arm/arm.opt
+@@ -61,10 +61,6 @@ Generate a call to abort if a noreturn function returns.
+ mapcs
+ Target RejectNegative Mask(APCS_FRAME) Undocumented
+
+-mapcs-float
+-Target Report Mask(APCS_FLOAT)
+-Pass FP arguments in FP registers.
+-
+ mapcs-frame
+ Target Report Mask(APCS_FRAME)
+ Generate APCS conformant stack frames.
+@@ -109,6 +105,10 @@ mfloat-abi=
+ Target RejectNegative Joined Enum(float_abi_type) Var(arm_float_abi) Init(TARGET_DEFAULT_FLOAT_ABI)
+ Specify if floating point hardware should be used.
+
++mcmse
++Target RejectNegative Var(use_cmse)
++Specify that the compiler should target secure code as per ARMv8-M Security Extensions.
++
+ Enum
+ Name(float_abi_type) Type(enum float_abi_type)
+ Known floating-point ABIs (for use with the -mfloat-abi= option):
+@@ -253,14 +253,6 @@ mrestrict-it
+ Target Report Var(arm_restrict_it) Init(2) Save
+ Generate IT blocks appropriate for ARMv8.
+
+-mold-rtx-costs
+-Target Report Mask(OLD_RTX_COSTS)
+-Use the old RTX costing tables (transitional).
+-
+-mnew-generic-costs
+-Target Report Mask(NEW_GENERIC_COSTS)
+-Use the new generic RTX cost tables if new core-specific cost table not available (transitional).
+-
+ mfix-cortex-m3-ldrd
+ Target Report Var(fix_cm3_ldrd) Init(2)
+ Avoid overlapping destination and address registers on LDRD instructions
+--- /dev/null
++++ b/src/gcc/config/arm/arm_cmse.h
+@@ -0,0 +1,199 @@
++/* ARMv8-M Secure Extensions intrinsics include file.
++
++ Copyright (C) 2015-2016 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published
++ by the Free Software Foundation; either version 3, or (at your
++ option) any later version.
++
++ GCC is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
++ License for more details.
++
++ Under Section 7 of GPL version 3, you are granted additional
++ permissions described in the GCC Runtime Library Exception, version
++ 3.1, as published by the Free Software Foundation.
++
++ You should have received a copy of the GNU General Public License and
++ a copy of the GCC Runtime Library Exception along with this program;
++ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++
++#ifndef _GCC_ARM_CMSE_H
++#define _GCC_ARM_CMSE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++#if __ARM_FEATURE_CMSE & 1
++
++#include <stddef.h>
++#include <stdint.h>
++
++#ifdef __ARM_BIG_ENDIAN
++
++typedef union {
++ struct cmse_address_info {
++#if __ARM_FEATURE_CMSE & 2
++ unsigned idau_region:8;
++ unsigned idau_region_valid:1;
++ unsigned secure:1;
++ unsigned nonsecure_readwrite_ok:1;
++ unsigned nonsecure_read_ok:1;
++#else
++ unsigned :12;
++#endif
++ unsigned readwrite_ok:1;
++ unsigned read_ok:1;
++#if __ARM_FEATURE_CMSE & 2
++ unsigned sau_region_valid:1;
++#else
++ unsigned :1;
++#endif
++ unsigned mpu_region_valid:1;
++#if __ARM_FEATURE_CMSE & 2
++ unsigned sau_region:8;
++#else
++ unsigned :8;
++#endif
++ unsigned mpu_region:8;
++ } flags;
++ unsigned value;
++} cmse_address_info_t;
++
++#else
++
++typedef union {
++ struct cmse_address_info {
++ unsigned mpu_region:8;
++#if __ARM_FEATURE_CMSE & 2
++ unsigned sau_region:8;
++#else
++ unsigned :8;
++#endif
++ unsigned mpu_region_valid:1;
++#if __ARM_FEATURE_CMSE & 2
++ unsigned sau_region_valid:1;
++#else
++ unsigned :1;
++#endif
++ unsigned read_ok:1;
++ unsigned readwrite_ok:1;
++#if __ARM_FEATURE_CMSE & 2
++ unsigned nonsecure_read_ok:1;
++ unsigned nonsecure_readwrite_ok:1;
++ unsigned secure:1;
++ unsigned idau_region_valid:1;
++ unsigned idau_region:8;
++#else
++ unsigned :12;
++#endif
++ } flags;
++ unsigned value;
++} cmse_address_info_t;
++
++#endif /* __ARM_BIG_ENDIAN */
++
++#define cmse_TT_fptr(p) (__cmse_TT_fptr ((__cmse_fptr)(p)))
++
++typedef void (*__cmse_fptr)(void);
++
++#define __CMSE_TT_ASM(flags) \
++{ \
++ cmse_address_info_t __result; \
++ __asm__ ("tt" # flags " %0,%1" \
++ : "=r"(__result) \
++ : "r"(__p) \
++ : "memory"); \
++ return __result; \
++}
++
++__extension__ static __inline __attribute__ ((__always_inline__))
++cmse_address_info_t
++__cmse_TT_fptr (__cmse_fptr __p)
++__CMSE_TT_ASM ()
++
++__extension__ static __inline __attribute__ ((__always_inline__))
++cmse_address_info_t
++cmse_TT (void *__p)
++__CMSE_TT_ASM ()
++
++#define cmse_TTT_fptr(p) (__cmse_TTT_fptr ((__cmse_fptr)(p)))
++
++__extension__ static __inline __attribute__ ((__always_inline__))
++cmse_address_info_t
++__cmse_TTT_fptr (__cmse_fptr __p)
++__CMSE_TT_ASM (t)
++
++__extension__ static __inline __attribute__ ((__always_inline__))
++cmse_address_info_t
++cmse_TTT (void *__p)
++__CMSE_TT_ASM (t)
++
++#if __ARM_FEATURE_CMSE & 2
++
++#define cmse_TTA_fptr(p) (__cmse_TTA_fptr ((__cmse_fptr)(p)))
++
++__extension__ static __inline __attribute__ ((__always_inline__))
++cmse_address_info_t
++__cmse_TTA_fptr (__cmse_fptr __p)
++__CMSE_TT_ASM (a)
++
++__extension__ static __inline __attribute__ ((__always_inline__))
++cmse_address_info_t
++cmse_TTA (void *__p)
++__CMSE_TT_ASM (a)
++
++#define cmse_TTAT_fptr(p) (__cmse_TTAT_fptr ((__cmse_fptr)(p)))
++
++__extension__ static __inline cmse_address_info_t
++__attribute__ ((__always_inline__))
++__cmse_TTAT_fptr (__cmse_fptr __p)
++__CMSE_TT_ASM (at)
++
++__extension__ static __inline cmse_address_info_t
++__attribute__ ((__always_inline__))
++cmse_TTAT (void *__p)
++__CMSE_TT_ASM (at)
++
++/* FIXME: diagnose use outside cmse_nonsecure_entry functions. */
++__extension__ static __inline int __attribute__ ((__always_inline__))
++cmse_nonsecure_caller (void)
++{
++ return __builtin_arm_cmse_nonsecure_caller ();
++}
++
++#define CMSE_AU_NONSECURE 2
++#define CMSE_MPU_NONSECURE 16
++#define CMSE_NONSECURE 18
++
++#define cmse_nsfptr_create(p) ((typeof ((p))) ((intptr_t) (p) & ~1))
++
++#define cmse_is_nsfptr(p) (!((intptr_t) (p) & 1))
++
++#endif /* __ARM_FEATURE_CMSE & 2 */
++
++#define CMSE_MPU_UNPRIV 4
++#define CMSE_MPU_READWRITE 1
++#define CMSE_MPU_READ 8
++
++__extension__ void *
++cmse_check_address_range (void *, size_t, int);
++
++#define cmse_check_pointed_object(p, f) \
++ ((typeof ((p))) cmse_check_address_range ((p), sizeof (*(p)), (f)))
++
++#endif /* __ARM_FEATURE_CMSE & 1 */
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* _GCC_ARM_CMSE_H */
+--- /dev/null
++++ b/src/gcc/config/arm/arm_fp16.h
+@@ -0,0 +1,255 @@
++/* ARM FP16 intrinsics include file.
++
++ Copyright (C) 2016 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published
++ by the Free Software Foundation; either version 3, or (at your
++ option) any later version.
++
++ GCC is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
++ License for more details.
++
++ Under Section 7 of GPL version 3, you are granted additional
++ permissions described in the GCC Runtime Library Exception, version
++ 3.1, as published by the Free Software Foundation.
++
++ You should have received a copy of the GNU General Public License and
++ a copy of the GCC Runtime Library Exception along with this program;
++ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _GCC_ARM_FP16_H
++#define _GCC_ARM_FP16_H 1
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++#include <stdint.h>
++
++/* Intrinsics for FP16 instructions. */
++#pragma GCC push_options
++#pragma GCC target ("fpu=fp-armv8")
++
++#if defined (__ARM_FEATURE_FP16_SCALAR_ARITHMETIC)
++
++typedef __fp16 float16_t;
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vabsh_f16 (float16_t __a)
++{
++ return __builtin_neon_vabshf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vaddh_f16 (float16_t __a, float16_t __b)
++{
++ return __a + __b;
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvtah_s32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvtahssi (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvtah_u32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvtahusi (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_f16_s32 (int32_t __a)
++{
++ return __builtin_neon_vcvthshf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_f16_u32 (uint32_t __a)
++{
++ return __builtin_neon_vcvthuhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_n_f16_s32 (int32_t __a, const int __b)
++{
++ return __builtin_neon_vcvths_nhf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vcvth_n_f16_u32 (uint32_t __a, const int __b)
++{
++ return __builtin_neon_vcvthu_nhf ((int32_t)__a, __b);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvth_n_s32_f16 (float16_t __a, const int __b)
++{
++ return __builtin_neon_vcvths_nsi (__a, __b);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvth_n_u32_f16 (float16_t __a, const int __b)
++{
++ return (uint32_t)__builtin_neon_vcvthu_nsi (__a, __b);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvth_s32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvthssi (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvth_u32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvthusi (__a);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvtmh_s32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvtmhssi (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvtmh_u32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvtmhusi (__a);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvtnh_s32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvtnhssi (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvtnh_u32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvtnhusi (__a);
++}
++
++__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++vcvtph_s32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvtphssi (__a);
++}
++
++__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++vcvtph_u32_f16 (float16_t __a)
++{
++ return __builtin_neon_vcvtphusi (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vdivh_f16 (float16_t __a, float16_t __b)
++{
++ return __a / __b;
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vfmah_f16 (float16_t __a, float16_t __b, float16_t __c)
++{
++ return __builtin_neon_vfmahf (__a, __b, __c);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vfmsh_f16 (float16_t __a, float16_t __b, float16_t __c)
++{
++ return __builtin_neon_vfmshf (__a, __b, __c);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vmaxnmh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_neon_vmaxnmhf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vminnmh_f16 (float16_t __a, float16_t __b)
++{
++ return __builtin_neon_vminnmhf (__a, __b);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vmulh_f16 (float16_t __a, float16_t __b)
++{
++ return __a * __b;
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vnegh_f16 (float16_t __a)
++{
++ return - __a;
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndah_f16 (float16_t __a)
++{
++ return __builtin_neon_vrndahf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndh_f16 (float16_t __a)
++{
++ return __builtin_neon_vrndhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndih_f16 (float16_t __a)
++{
++ return __builtin_neon_vrndihf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndmh_f16 (float16_t __a)
++{
++ return __builtin_neon_vrndmhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndnh_f16 (float16_t __a)
++{
++ return __builtin_neon_vrndnhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndph_f16 (float16_t __a)
++{
++ return __builtin_neon_vrndphf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vrndxh_f16 (float16_t __a)
++{
++ return __builtin_neon_vrndxhf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vsqrth_f16 (float16_t __a)
++{
++ return __builtin_neon_vsqrthf (__a);
++}
++
++__extension__ static __inline float16_t __attribute__ ((__always_inline__))
++vsubh_f16 (float16_t __a, float16_t __b)
++{
++ return __a - __b;
++}
++
++#endif /* __ARM_FEATURE_FP16_SCALAR_ARITHMETIC */
++#pragma GCC pop_options
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
+--- a/src/gcc/config/arm/arm_neon.h
++++ b/src/gcc/config/arm/arm_neon.h
+@@ -38,6 +38,7 @@
+ extern "C" {
+ #endif
+
++#include <arm_fp16.h>
+ #include <stdint.h>
+
+ typedef __simd64_int8_t int8x8_t;
+@@ -509,528 +510,614 @@ typedef struct poly64x2x4_t
+ #pragma GCC pop_options
+
+ /* vadd */
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_f32 (float32x2_t __a, float32x2_t __b)
+ {
+-#ifdef __FAST_MATH
++#ifdef __FAST_MATH__
+ return __a + __b;
+ #else
+ return (float32x2_t) __builtin_neon_vaddv2sf (__a, __b);
+ #endif
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vadd_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+-#ifdef __FAST_MATH
++#ifdef __FAST_MATH__
+ return __a + __b;
+ #else
+ return (float32x4_t) __builtin_neon_vaddv4sf (__a, __b);
+ #endif
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a + __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vaddlsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vaddlsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vaddlsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vaddluv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vaddluv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddl_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vaddluv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_s8 (int16x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vaddwsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_s16 (int32x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vaddwsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_s32 (int64x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vaddwsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_u8 (uint16x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vaddwuv8qi ((int16x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_u16 (uint32x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vaddwuv4hi ((int32x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddw_u32 (uint64x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vaddwuv2si ((int64x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vhaddsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vhaddsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vhaddsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vhadduv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vhadduv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vhadduv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vhaddsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vhaddsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vhaddsv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vhadduv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vhadduv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vhadduv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vrhaddsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vrhaddsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vrhaddsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vrhadduv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vrhadduv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vrhadduv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vrhaddsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vrhaddsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vrhaddsv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vrhadduv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vrhadduv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrhaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vrhadduv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vqaddsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vqaddsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vqaddsv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return (int64x1_t)__builtin_neon_vqaddsdi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqadduv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqadduv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqadduv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqadd_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return (uint64x1_t)__builtin_neon_vqaddudi ((int64x1_t) __a, (int64x1_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vqaddsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vqaddsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqaddsv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vqaddsv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vqadduv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vqadduv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vqadduv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqaddq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vqadduv2di ((int64x2_t) __a, (int64x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vaddhnv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vaddhnv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vaddhnv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vaddhnv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vaddhnv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaddhn_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vaddhnv2di ((int64x2_t) __a, (int64x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vraddhnv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vraddhnv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vraddhnv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vraddhnv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vraddhnv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vraddhn_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vraddhnv2di ((int64x2_t) __a, (int64x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_f32 (float32x2_t __a, float32x2_t __b)
+ {
+-#ifdef __FAST_MATH
++#ifdef __FAST_MATH__
+ return __a * __b;
+ #else
+ return (float32x2_t) __builtin_neon_vmulfv2sf (__a, __b);
+@@ -1038,493 +1125,574 @@ vmul_f32 (float32x2_t __a, float32x2_t __b)
+
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+-#ifdef __FAST_MATH
++#ifdef __FAST_MATH__
+ return __a * __b;
+ #else
+ return (float32x4_t) __builtin_neon_vmulfv4sf (__a, __b);
+ #endif
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a * __b;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ return (poly8x8_t)__builtin_neon_vmulpv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+ return (poly8x16_t)__builtin_neon_vmulpv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulh_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vqdmulhv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulh_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vqdmulhv2si (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulhq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vqdmulhv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulhq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqdmulhv4si (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulh_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vqrdmulhv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulh_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vqrdmulhv2si (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulhq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vqrdmulhv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulhq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqrdmulhv4si (__a, __b);
+ }
+
+ #ifdef __ARM_FEATURE_QRDMX
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlah_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int16x4_t)__builtin_neon_vqrdmlahv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlah_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int32x2_t)__builtin_neon_vqrdmlahv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlahq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vqrdmlahv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlahq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vqrdmlahv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlsh_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int16x4_t)__builtin_neon_vqrdmlshv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlsh_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int32x2_t)__builtin_neon_vqrdmlshv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlshq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vqrdmlshv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlshq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vqrdmlshv4si (__a, __b, __c);
+ }
+ #endif
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vmullsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vmullsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vmullsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vmulluv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vmulluv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vmulluv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ return (poly16x8_t)__builtin_neon_vmullpv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmull_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqdmullv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmull_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vqdmullv2si (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_s8 (int8x8_t __a, int8x8_t __b, int8x8_t __c)
+ {
+ return (int8x8_t)__builtin_neon_vmlav8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int16x4_t)__builtin_neon_vmlav4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int32x2_t)__builtin_neon_vmlav2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
+ {
+ return (float32x2_t)__builtin_neon_vmlav2sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
+ {
+ return (uint8x8_t)__builtin_neon_vmlav8qi ((int8x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c)
+ {
+ return (uint16x4_t)__builtin_neon_vmlav4hi ((int16x4_t) __a, (int16x4_t) __b, (int16x4_t) __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c)
+ {
+ return (uint32x2_t)__builtin_neon_vmlav2si ((int32x2_t) __a, (int32x2_t) __b, (int32x2_t) __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_s8 (int8x16_t __a, int8x16_t __b, int8x16_t __c)
+ {
+ return (int8x16_t)__builtin_neon_vmlav16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vmlav8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vmlav4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
+ {
+ return (float32x4_t)__builtin_neon_vmlav4sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
+ {
+ return (uint8x16_t)__builtin_neon_vmlav16qi ((int8x16_t) __a, (int8x16_t) __b, (int8x16_t) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ {
+ return (uint16x8_t)__builtin_neon_vmlav8hi ((int16x8_t) __a, (int16x8_t) __b, (int16x8_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmlav4si ((int32x4_t) __a, (int32x4_t) __b, (int32x4_t) __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_s8 (int16x8_t __a, int8x8_t __b, int8x8_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vmlalsv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vmlalsv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vmlalsv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_u8 (uint16x8_t __a, uint8x8_t __b, uint8x8_t __c)
+ {
+ return (uint16x8_t)__builtin_neon_vmlaluv8qi ((int16x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_u16 (uint32x4_t __a, uint16x4_t __b, uint16x4_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmlaluv4hi ((int32x4_t) __a, (int16x4_t) __b, (int16x4_t) __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_u32 (uint64x2_t __a, uint32x2_t __b, uint32x2_t __c)
+ {
+ return (uint64x2_t)__builtin_neon_vmlaluv2si ((int64x2_t) __a, (int32x2_t) __b, (int32x2_t) __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlal_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vqdmlalv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlal_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vqdmlalv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_s8 (int8x8_t __a, int8x8_t __b, int8x8_t __c)
+ {
+ return (int8x8_t)__builtin_neon_vmlsv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int16x4_t)__builtin_neon_vmlsv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int32x2_t)__builtin_neon_vmlsv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
+ {
+ return (float32x2_t)__builtin_neon_vmlsv2sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
+ {
+ return (uint8x8_t)__builtin_neon_vmlsv8qi ((int8x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c)
+ {
+ return (uint16x4_t)__builtin_neon_vmlsv4hi ((int16x4_t) __a, (int16x4_t) __b, (int16x4_t) __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c)
+ {
+ return (uint32x2_t)__builtin_neon_vmlsv2si ((int32x2_t) __a, (int32x2_t) __b, (int32x2_t) __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_s8 (int8x16_t __a, int8x16_t __b, int8x16_t __c)
+ {
+ return (int8x16_t)__builtin_neon_vmlsv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vmlsv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vmlsv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
+ {
+ return (float32x4_t)__builtin_neon_vmlsv4sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
+ {
+ return (uint8x16_t)__builtin_neon_vmlsv16qi ((int8x16_t) __a, (int8x16_t) __b, (int8x16_t) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ {
+ return (uint16x8_t)__builtin_neon_vmlsv8hi ((int16x8_t) __a, (int16x8_t) __b, (int16x8_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmlsv4si ((int32x4_t) __a, (int32x4_t) __b, (int32x4_t) __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_s8 (int16x8_t __a, int8x8_t __b, int8x8_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vmlslsv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vmlslsv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vmlslsv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_u8 (uint16x8_t __a, uint8x8_t __b, uint8x8_t __c)
+ {
+ return (uint16x8_t)__builtin_neon_vmlsluv8qi ((int16x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_u16 (uint32x4_t __a, uint16x4_t __b, uint16x4_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmlsluv4hi ((int32x4_t) __a, (int16x4_t) __b, (int16x4_t) __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_u32 (uint64x2_t __a, uint32x2_t __b, uint32x2_t __c)
+ {
+ return (uint64x2_t)__builtin_neon_vmlsluv2si ((int64x2_t) __a, (int32x2_t) __b, (int32x2_t) __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlsl_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vqdmlslv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlsl_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vqdmlslv2si (__a, __b, __c);
+@@ -1532,25 +1700,29 @@ vqdmlsl_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=neon-vfpv4")
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vfma_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
+ {
+ return (float32x2_t)__builtin_neon_vfmav2sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vfmaq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
+ {
+ return (float32x4_t)__builtin_neon_vfmav4sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vfms_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
+ {
+ return (float32x2_t)__builtin_neon_vfmsv2sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vfmsq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
+ {
+ return (float32x4_t)__builtin_neon_vfmsv4sf (__a, __b, __c);
+@@ -1558,7 +1730,8 @@ vfmsq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
+ #pragma GCC pop_options
+
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndn_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vrintnv2sf (__a);
+@@ -1566,7 +1739,8 @@ vrndn_f32 (float32x2_t __a)
+
+ #endif
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndnq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vrintnv4sf (__a);
+@@ -1574,7 +1748,8 @@ vrndnq_f32 (float32x4_t __a)
+
+ #endif
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrnda_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vrintav2sf (__a);
+@@ -1582,7 +1757,8 @@ vrnda_f32 (float32x2_t __a)
+
+ #endif
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndaq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vrintav4sf (__a);
+@@ -1590,7 +1766,8 @@ vrndaq_f32 (float32x4_t __a)
+
+ #endif
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndp_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vrintpv2sf (__a);
+@@ -1598,7 +1775,8 @@ vrndp_f32 (float32x2_t __a)
+
+ #endif
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndpq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vrintpv4sf (__a);
+@@ -1606,7 +1784,8 @@ vrndpq_f32 (float32x4_t __a)
+
+ #endif
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndm_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vrintmv2sf (__a);
+@@ -1614,7 +1793,8 @@ vrndm_f32 (float32x2_t __a)
+
+ #endif
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndmq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vrintmv4sf (__a);
+@@ -1623,7 +1803,8 @@ vrndmq_f32 (float32x4_t __a)
+ #endif
+
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndx_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vrintxv2sf (__a);
+@@ -1632,7 +1813,8 @@ vrndx_f32 (float32x2_t __a)
+ #endif
+
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndxq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vrintxv4sf (__a);
+@@ -1641,7 +1823,8 @@ vrndxq_f32 (float32x4_t __a)
+ #endif
+
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrnd_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vrintzv2sf (__a);
+@@ -1649,7 +1832,8 @@ vrnd_f32 (float32x2_t __a)
+
+ #endif
+ #if __ARM_ARCH >= 8
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrndq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vrintzv4sf (__a);
+@@ -1657,2907 +1841,3436 @@ vrndq_f32 (float32x4_t __a)
+
+ #endif
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_f32 (float32x2_t __a, float32x2_t __b)
+ {
+-#ifdef __FAST_MATH
++#ifdef __FAST_MATH__
+ return __a - __b;
+ #else
+ return (float32x2_t) __builtin_neon_vsubv2sf (__a, __b);
+ #endif
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsub_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+-#ifdef __FAST_MATH
++#ifdef __FAST_MATH__
+ return __a - __b;
+ #else
+ return (float32x4_t) __builtin_neon_vsubv4sf (__a, __b);
+ #endif
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a - __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vsublsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vsublsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vsublsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vsubluv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vsubluv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubl_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vsubluv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_s8 (int16x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vsubwsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_s16 (int32x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vsubwsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_s32 (int64x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vsubwsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_u8 (uint16x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vsubwuv8qi ((int16x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_u16 (uint32x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vsubwuv4hi ((int32x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubw_u32 (uint64x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vsubwuv2si ((int64x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vhsubsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vhsubsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vhsubsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vhsubuv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vhsubuv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsub_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vhsubuv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vhsubsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vhsubsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vhsubsv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vhsubuv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vhsubuv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vhsubq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vhsubuv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vqsubsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vqsubsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vqsubsv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return (int64x1_t)__builtin_neon_vqsubsdi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqsubuv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqsubuv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqsubuv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsub_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return (uint64x1_t)__builtin_neon_vqsubudi ((int64x1_t) __a, (int64x1_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vqsubsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vqsubsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqsubsv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vqsubsv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vqsubuv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vqsubuv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vqsubuv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqsubq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vqsubuv2di ((int64x2_t) __a, (int64x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vsubhnv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vsubhnv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vsubhnv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vsubhnv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vsubhnv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsubhn_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vsubhnv2di ((int64x2_t) __a, (int64x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vrsubhnv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vrsubhnv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vrsubhnv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vrsubhnv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vrsubhnv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsubhn_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vrsubhnv2di ((int64x2_t) __a, (int64x2_t) __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceq_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vceqv8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceq_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vceqv4hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceq_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vceqv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceq_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vceqv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceq_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vceqv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceq_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vceqv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceq_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vceqv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceq_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vceqv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceqq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vceqv16qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceqq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vceqv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceqq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vceqv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceqq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vceqv4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceqq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vceqv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceqq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vceqv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceqq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vceqv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceqq_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vceqv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcge_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vcgev8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcge_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vcgev4hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcge_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgev2si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcge_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgev2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcge_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vcgeuv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcge_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vcgeuv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcge_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgeuv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgeq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vcgev16qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgeq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vcgev8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgeq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgev4si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgeq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgev4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vcgeuv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vcgeuv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgeuv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcle_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vcgev8qi (__b, __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcle_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vcgev4hi (__b, __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcle_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgev2si (__b, __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcle_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgev2sf (__b, __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcle_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vcgeuv8qi ((int8x8_t) __b, (int8x8_t) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcle_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vcgeuv4hi ((int16x4_t) __b, (int16x4_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcle_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgeuv2si ((int32x2_t) __b, (int32x2_t) __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcleq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vcgev16qi (__b, __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcleq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vcgev8hi (__b, __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcleq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgev4si (__b, __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcleq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgev4sf (__b, __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vcgeuv16qi ((int8x16_t) __b, (int8x16_t) __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vcgeuv8hi ((int16x8_t) __b, (int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgeuv4si ((int32x4_t) __b, (int32x4_t) __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgt_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vcgtv8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgt_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vcgtv4hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgt_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgtv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgt_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgtv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vcgtuv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vcgtuv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgtuv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgtq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vcgtv16qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgtq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vcgtv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgtq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgtv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgtq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgtv4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vcgtuv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vcgtuv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgtuv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclt_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vcgtv8qi (__b, __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclt_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vcgtv4hi (__b, __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclt_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgtv2si (__b, __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclt_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgtv2sf (__b, __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclt_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vcgtuv8qi ((int8x8_t) __b, (int8x8_t) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclt_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vcgtuv4hi ((int16x4_t) __b, (int16x4_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclt_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcgtuv2si ((int32x2_t) __b, (int32x2_t) __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcltq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vcgtv16qi (__b, __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcltq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vcgtv8hi (__b, __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcltq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgtv4si (__b, __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcltq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgtv4sf (__b, __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vcgtuv16qi ((int8x16_t) __b, (int8x16_t) __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vcgtuv8hi ((int16x8_t) __b, (int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcgtuv4si ((int32x4_t) __b, (int32x4_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcage_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcagev2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcageq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcagev4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcale_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcagev2sf (__b, __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcaleq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcagev4sf (__b, __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcagt_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcagtv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcagtq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcagtv4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcalt_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcagtv2sf (__b, __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcaltq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcagtv4sf (__b, __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtst_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vtstv8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtst_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vtstv4hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtst_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vtstv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtst_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vtstv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtst_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vtstv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtst_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vtstv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtst_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vtstv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtst_p16 (poly16x4_t __a, poly16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vtstv4hi ((int16x4_t) __a, (int16x4_t) __b);
++}
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtstq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vtstv16qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtstq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vtstv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtstq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vtstv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtstq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vtstv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtstq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vtstv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtstq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vtstv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtstq_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vtstv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtstq_p16 (poly16x8_t __a, poly16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vtstv8hi ((int16x8_t) __a, (int16x8_t) __b);
++}
++
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vabdsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vabdsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vabdsv2si (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x2_t)__builtin_neon_vabdfv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vabduv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vabduv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vabduv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vabdsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vabdsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vabdsv4si (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (float32x4_t)__builtin_neon_vabdfv4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vabduv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vabduv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vabduv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vabdlsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vabdlsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vabdlsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vabdluv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vabdluv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabdl_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vabdluv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_s8 (int8x8_t __a, int8x8_t __b, int8x8_t __c)
+ {
+ return (int8x8_t)__builtin_neon_vabasv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int16x4_t)__builtin_neon_vabasv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int32x2_t)__builtin_neon_vabasv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
+ {
+ return (uint8x8_t)__builtin_neon_vabauv8qi ((int8x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c)
+ {
+ return (uint16x4_t)__builtin_neon_vabauv4hi ((int16x4_t) __a, (int16x4_t) __b, (int16x4_t) __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaba_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c)
+ {
+ return (uint32x2_t)__builtin_neon_vabauv2si ((int32x2_t) __a, (int32x2_t) __b, (int32x2_t) __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_s8 (int8x16_t __a, int8x16_t __b, int8x16_t __c)
+ {
+ return (int8x16_t)__builtin_neon_vabasv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vabasv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vabasv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
+ {
+ return (uint8x16_t)__builtin_neon_vabauv16qi ((int8x16_t) __a, (int8x16_t) __b, (int8x16_t) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ {
+ return (uint16x8_t)__builtin_neon_vabauv8hi ((int16x8_t) __a, (int16x8_t) __b, (int16x8_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabaq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vabauv4si ((int32x4_t) __a, (int32x4_t) __b, (int32x4_t) __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_s8 (int16x8_t __a, int8x8_t __b, int8x8_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vabalsv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vabalsv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vabalsv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_u8 (uint16x8_t __a, uint8x8_t __b, uint8x8_t __c)
+ {
+ return (uint16x8_t)__builtin_neon_vabaluv8qi ((int16x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_u16 (uint32x4_t __a, uint16x4_t __b, uint16x4_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vabaluv4hi ((int32x4_t) __a, (int16x4_t) __b, (int16x4_t) __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabal_u32 (uint64x2_t __a, uint32x2_t __b, uint32x2_t __c)
+ {
+ return (uint64x2_t)__builtin_neon_vabaluv2si ((int64x2_t) __a, (int32x2_t) __b, (int32x2_t) __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmax_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vmaxsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmax_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vmaxsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmax_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vmaxsv2si (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmax_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x2_t)__builtin_neon_vmaxfv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmax_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vmaxuv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmax_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vmaxuv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmax_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vmaxuv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmaxq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vmaxsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmaxq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vmaxsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmaxq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vmaxsv4si (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmaxq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (float32x4_t)__builtin_neon_vmaxfv4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++#pragma GCC push_options
++#pragma GCC target ("fpu=neon-fp-armv8")
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnm_f32 (float32x2_t a, float32x2_t b)
++{
++ return (float32x2_t)__builtin_neon_vmaxnmv2sf (a, b);
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmq_f32 (float32x4_t a, float32x4_t b)
++{
++ return (float32x4_t)__builtin_neon_vmaxnmv4sf (a, b);
++}
++
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnm_f32 (float32x2_t a, float32x2_t b)
++{
++ return (float32x2_t)__builtin_neon_vminnmv2sf (a, b);
++}
++
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmq_f32 (float32x4_t a, float32x4_t b)
++{
++ return (float32x4_t)__builtin_neon_vminnmv4sf (a, b);
++}
++#pragma GCC pop_options
++
++
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmaxq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vmaxuv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmaxq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vmaxuv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmaxq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vmaxuv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmin_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vminsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmin_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vminsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmin_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vminsv2si (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmin_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x2_t)__builtin_neon_vminfv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmin_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vminuv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmin_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vminuv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmin_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vminuv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vminq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vminsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vminq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vminsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vminq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vminsv4si (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vminq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (float32x4_t)__builtin_neon_vminfv4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vminq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vminuv16qi ((int8x16_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vminq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vminuv8hi ((int16x8_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vminq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vminuv4si ((int32x4_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadd_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vpaddv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadd_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vpaddv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadd_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vpaddv2si (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadd_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x2_t)__builtin_neon_vpaddv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadd_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vpaddv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadd_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vpaddv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadd_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vpaddv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddl_s8 (int8x8_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vpaddlsv8qi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddl_s16 (int16x4_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vpaddlsv4hi (__a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddl_s32 (int32x2_t __a)
+ {
+ return (int64x1_t)__builtin_neon_vpaddlsv2si (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddl_u8 (uint8x8_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vpaddluv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddl_u16 (uint16x4_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vpaddluv4hi ((int16x4_t) __a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddl_u32 (uint32x2_t __a)
+ {
+ return (uint64x1_t)__builtin_neon_vpaddluv2si ((int32x2_t) __a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddlq_s8 (int8x16_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vpaddlsv16qi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddlq_s16 (int16x8_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vpaddlsv8hi (__a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddlq_s32 (int32x4_t __a)
+ {
+ return (int64x2_t)__builtin_neon_vpaddlsv4si (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddlq_u8 (uint8x16_t __a)
+ {
+ return (uint16x8_t)__builtin_neon_vpaddluv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddlq_u16 (uint16x8_t __a)
+ {
+ return (uint32x4_t)__builtin_neon_vpaddluv8hi ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpaddlq_u32 (uint32x4_t __a)
+ {
+ return (uint64x2_t)__builtin_neon_vpaddluv4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadal_s8 (int16x4_t __a, int8x8_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vpadalsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadal_s16 (int32x2_t __a, int16x4_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vpadalsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadal_s32 (int64x1_t __a, int32x2_t __b)
+ {
+ return (int64x1_t)__builtin_neon_vpadalsv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadal_u8 (uint16x4_t __a, uint8x8_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vpadaluv8qi ((int16x4_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadal_u16 (uint32x2_t __a, uint16x4_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vpadaluv4hi ((int32x2_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadal_u32 (uint64x1_t __a, uint32x2_t __b)
+ {
+ return (uint64x1_t)__builtin_neon_vpadaluv2si ((int64x1_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadalq_s8 (int16x8_t __a, int8x16_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vpadalsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadalq_s16 (int32x4_t __a, int16x8_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vpadalsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadalq_s32 (int64x2_t __a, int32x4_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vpadalsv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadalq_u8 (uint16x8_t __a, uint8x16_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vpadaluv16qi ((int16x8_t) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadalq_u16 (uint32x4_t __a, uint16x8_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vpadaluv8hi ((int32x4_t) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpadalq_u32 (uint64x2_t __a, uint32x4_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vpadaluv4si ((int64x2_t) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmax_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vpmaxsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmax_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vpmaxsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmax_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vpmaxsv2si (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmax_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x2_t)__builtin_neon_vpmaxfv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmax_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vpmaxuv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmax_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vpmaxuv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmax_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vpmaxuv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmin_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vpminsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmin_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vpminsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmin_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vpminsv2si (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmin_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x2_t)__builtin_neon_vpminfv2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmin_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vpminuv8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmin_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vpminuv4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vpmin_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vpminuv2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrecps_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x2_t)__builtin_neon_vrecpsv2sf (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrecpsq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (float32x4_t)__builtin_neon_vrecpsv4sf (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsqrts_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x2_t)__builtin_neon_vrsqrtsv2sf (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsqrtsq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ return (float32x4_t)__builtin_neon_vrsqrtsv4sf (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vshlsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vshlsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vshlsv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return (int64x1_t)__builtin_neon_vshlsdi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_u8 (uint8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vshluv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_u16 (uint16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vshluv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_u32 (uint32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vshluv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_u64 (uint64x1_t __a, int64x1_t __b)
+ {
+ return (uint64x1_t)__builtin_neon_vshludi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vshlsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vshlsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vshlsv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vshlsv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_u8 (uint8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vshluv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_u16 (uint16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vshluv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_u32 (uint32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vshluv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_u64 (uint64x2_t __a, int64x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vshluv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vrshlsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vrshlsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vrshlsv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshl_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return (int64x1_t)__builtin_neon_vrshlsdi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshl_u8 (uint8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vrshluv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshl_u16 (uint16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vrshluv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshl_u32 (uint32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vrshluv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshl_u64 (uint64x1_t __a, int64x1_t __b)
+ {
+ return (uint64x1_t)__builtin_neon_vrshludi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshlq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vrshlsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshlq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vrshlsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshlq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vrshlsv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshlq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vrshlsv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshlq_u8 (uint8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vrshluv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshlq_u16 (uint16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vrshluv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshlq_u32 (uint32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vrshluv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshlq_u64 (uint64x2_t __a, int64x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vrshluv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vqshlsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vqshlsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vqshlsv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return (int64x1_t)__builtin_neon_vqshlsdi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_u8 (uint8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqshluv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_u16 (uint16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqshluv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_u32 (uint32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqshluv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_u64 (uint64x1_t __a, int64x1_t __b)
+ {
+ return (uint64x1_t)__builtin_neon_vqshludi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vqshlsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vqshlsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqshlsv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vqshlsv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_u8 (uint8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vqshluv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_u16 (uint16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vqshluv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_u32 (uint32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vqshluv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_u64 (uint64x2_t __a, int64x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vqshluv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshl_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vqrshlsv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshl_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vqrshlsv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshl_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vqrshlsv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshl_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return (int64x1_t)__builtin_neon_vqrshlsdi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshl_u8 (uint8x8_t __a, int8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqrshluv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshl_u16 (uint16x4_t __a, int16x4_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqrshluv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshl_u32 (uint32x2_t __a, int32x2_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqrshluv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshl_u64 (uint64x1_t __a, int64x1_t __b)
+ {
+ return (uint64x1_t)__builtin_neon_vqrshludi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshlq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vqrshlsv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshlq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vqrshlsv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshlq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqrshlsv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshlq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vqrshlsv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshlq_u8 (uint8x16_t __a, int8x16_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vqrshluv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshlq_u16 (uint16x8_t __a, int16x8_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vqrshluv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshlq_u32 (uint32x4_t __a, int32x4_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vqrshluv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshlq_u64 (uint64x2_t __a, int64x2_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vqrshluv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshr_n_s8 (int8x8_t __a, const int __b)
+ {
+ return (int8x8_t)__builtin_neon_vshrs_nv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshr_n_s16 (int16x4_t __a, const int __b)
+ {
+ return (int16x4_t)__builtin_neon_vshrs_nv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshr_n_s32 (int32x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vshrs_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshr_n_s64 (int64x1_t __a, const int __b)
+ {
+ return (int64x1_t)__builtin_neon_vshrs_ndi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshr_n_u8 (uint8x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vshru_nv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshr_n_u16 (uint16x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vshru_nv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshr_n_u32 (uint32x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vshru_nv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshr_n_u64 (uint64x1_t __a, const int __b)
+ {
+ return (uint64x1_t)__builtin_neon_vshru_ndi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrq_n_s8 (int8x16_t __a, const int __b)
+ {
+ return (int8x16_t)__builtin_neon_vshrs_nv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrq_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (int16x8_t)__builtin_neon_vshrs_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrq_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (int32x4_t)__builtin_neon_vshrs_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrq_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (int64x2_t)__builtin_neon_vshrs_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrq_n_u8 (uint8x16_t __a, const int __b)
+ {
+ return (uint8x16_t)__builtin_neon_vshru_nv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrq_n_u16 (uint16x8_t __a, const int __b)
+ {
+ return (uint16x8_t)__builtin_neon_vshru_nv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrq_n_u32 (uint32x4_t __a, const int __b)
+ {
+ return (uint32x4_t)__builtin_neon_vshru_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrq_n_u64 (uint64x2_t __a, const int __b)
+ {
+ return (uint64x2_t)__builtin_neon_vshru_nv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshr_n_s8 (int8x8_t __a, const int __b)
+ {
+ return (int8x8_t)__builtin_neon_vrshrs_nv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshr_n_s16 (int16x4_t __a, const int __b)
+ {
+ return (int16x4_t)__builtin_neon_vrshrs_nv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshr_n_s32 (int32x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vrshrs_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshr_n_s64 (int64x1_t __a, const int __b)
+ {
+ return (int64x1_t)__builtin_neon_vrshrs_ndi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshr_n_u8 (uint8x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vrshru_nv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshr_n_u16 (uint16x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vrshru_nv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshr_n_u32 (uint32x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vrshru_nv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshr_n_u64 (uint64x1_t __a, const int __b)
+ {
+ return (uint64x1_t)__builtin_neon_vrshru_ndi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrq_n_s8 (int8x16_t __a, const int __b)
+ {
+ return (int8x16_t)__builtin_neon_vrshrs_nv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrq_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (int16x8_t)__builtin_neon_vrshrs_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrq_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (int32x4_t)__builtin_neon_vrshrs_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrq_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (int64x2_t)__builtin_neon_vrshrs_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrq_n_u8 (uint8x16_t __a, const int __b)
+ {
+ return (uint8x16_t)__builtin_neon_vrshru_nv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrq_n_u16 (uint16x8_t __a, const int __b)
+ {
+ return (uint16x8_t)__builtin_neon_vrshru_nv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrq_n_u32 (uint32x4_t __a, const int __b)
+ {
+ return (uint32x4_t)__builtin_neon_vrshru_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrq_n_u64 (uint64x2_t __a, const int __b)
+ {
+ return (uint64x2_t)__builtin_neon_vrshru_nv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrn_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (int8x8_t)__builtin_neon_vshrn_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrn_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (int16x4_t)__builtin_neon_vshrn_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrn_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vshrn_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrn_n_u16 (uint16x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vshrn_nv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrn_n_u32 (uint32x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vshrn_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshrn_n_u64 (uint64x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vshrn_nv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrn_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (int8x8_t)__builtin_neon_vrshrn_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrn_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (int16x4_t)__builtin_neon_vrshrn_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrn_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vrshrn_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrn_n_u16 (uint16x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vrshrn_nv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrn_n_u32 (uint32x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vrshrn_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrshrn_n_u64 (uint64x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vrshrn_nv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshrn_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (int8x8_t)__builtin_neon_vqshrns_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshrn_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (int16x4_t)__builtin_neon_vqshrns_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshrn_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vqshrns_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshrn_n_u16 (uint16x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqshrnu_nv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshrn_n_u32 (uint32x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqshrnu_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshrn_n_u64 (uint64x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqshrnu_nv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshrn_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (int8x8_t)__builtin_neon_vqrshrns_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshrn_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (int16x4_t)__builtin_neon_vqrshrns_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshrn_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vqrshrns_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshrn_n_u16 (uint16x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqrshrnu_nv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshrn_n_u32 (uint32x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqrshrnu_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshrn_n_u64 (uint64x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqrshrnu_nv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshrun_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqshrun_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshrun_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqshrun_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshrun_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqshrun_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshrun_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqrshrun_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshrun_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqrshrun_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrshrun_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqrshrun_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_n_s8 (int8x8_t __a, const int __b)
+ {
+ return (int8x8_t)__builtin_neon_vshl_nv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_n_s16 (int16x4_t __a, const int __b)
+ {
+ return (int16x4_t)__builtin_neon_vshl_nv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_n_s32 (int32x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vshl_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_n_s64 (int64x1_t __a, const int __b)
+ {
+ return (int64x1_t)__builtin_neon_vshl_ndi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_n_u8 (uint8x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vshl_nv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_n_u16 (uint16x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vshl_nv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_n_u32 (uint32x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vshl_nv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshl_n_u64 (uint64x1_t __a, const int __b)
+ {
+ return (uint64x1_t)__builtin_neon_vshl_ndi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_n_s8 (int8x16_t __a, const int __b)
+ {
+ return (int8x16_t)__builtin_neon_vshl_nv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (int16x8_t)__builtin_neon_vshl_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (int32x4_t)__builtin_neon_vshl_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (int64x2_t)__builtin_neon_vshl_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_n_u8 (uint8x16_t __a, const int __b)
+ {
+ return (uint8x16_t)__builtin_neon_vshl_nv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_n_u16 (uint16x8_t __a, const int __b)
+ {
+ return (uint16x8_t)__builtin_neon_vshl_nv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_n_u32 (uint32x4_t __a, const int __b)
+ {
+ return (uint32x4_t)__builtin_neon_vshl_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshlq_n_u64 (uint64x2_t __a, const int __b)
+ {
+ return (uint64x2_t)__builtin_neon_vshl_nv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_n_s8 (int8x8_t __a, const int __b)
+ {
+ return (int8x8_t)__builtin_neon_vqshl_s_nv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_n_s16 (int16x4_t __a, const int __b)
+ {
+ return (int16x4_t)__builtin_neon_vqshl_s_nv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_n_s32 (int32x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vqshl_s_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_n_s64 (int64x1_t __a, const int __b)
+ {
+ return (int64x1_t)__builtin_neon_vqshl_s_ndi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_n_u8 (uint8x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqshl_u_nv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_n_u16 (uint16x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqshl_u_nv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_n_u32 (uint32x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqshl_u_nv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshl_n_u64 (uint64x1_t __a, const int __b)
+ {
+ return (uint64x1_t)__builtin_neon_vqshl_u_ndi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_n_s8 (int8x16_t __a, const int __b)
+ {
+ return (int8x16_t)__builtin_neon_vqshl_s_nv16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (int16x8_t)__builtin_neon_vqshl_s_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (int32x4_t)__builtin_neon_vqshl_s_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (int64x2_t)__builtin_neon_vqshl_s_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_n_u8 (uint8x16_t __a, const int __b)
+ {
+ return (uint8x16_t)__builtin_neon_vqshl_u_nv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_n_u16 (uint16x8_t __a, const int __b)
+ {
+ return (uint16x8_t)__builtin_neon_vqshl_u_nv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_n_u32 (uint32x4_t __a, const int __b)
+ {
+ return (uint32x4_t)__builtin_neon_vqshl_u_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlq_n_u64 (uint64x2_t __a, const int __b)
+ {
+ return (uint64x2_t)__builtin_neon_vqshl_u_nv2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlu_n_s8 (int8x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vqshlu_nv8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlu_n_s16 (int16x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vqshlu_nv4hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlu_n_s32 (int32x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vqshlu_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshlu_n_s64 (int64x1_t __a, const int __b)
+ {
+ return (uint64x1_t)__builtin_neon_vqshlu_ndi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshluq_n_s8 (int8x16_t __a, const int __b)
+ {
+ return (uint8x16_t)__builtin_neon_vqshlu_nv16qi (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshluq_n_s16 (int16x8_t __a, const int __b)
+ {
+ return (uint16x8_t)__builtin_neon_vqshlu_nv8hi (__a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshluq_n_s32 (int32x4_t __a, const int __b)
+ {
+ return (uint32x4_t)__builtin_neon_vqshlu_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqshluq_n_s64 (int64x2_t __a, const int __b)
+ {
+ return (uint64x2_t)__builtin_neon_vqshlu_nv2di (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshll_n_s8 (int8x8_t __a, const int __b)
+ {
+ return (int16x8_t)__builtin_neon_vshlls_nv8qi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshll_n_s16 (int16x4_t __a, const int __b)
+ {
+ return (int32x4_t)__builtin_neon_vshlls_nv4hi (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshll_n_s32 (int32x2_t __a, const int __b)
+ {
+ return (int64x2_t)__builtin_neon_vshlls_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshll_n_u8 (uint8x8_t __a, const int __b)
+ {
+ return (uint16x8_t)__builtin_neon_vshllu_nv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshll_n_u16 (uint16x4_t __a, const int __b)
+ {
+ return (uint32x4_t)__builtin_neon_vshllu_nv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vshll_n_u32 (uint32x2_t __a, const int __b)
+ {
+ return (uint64x2_t)__builtin_neon_vshllu_nv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+ {
+ return (int8x8_t)__builtin_neon_vsras_nv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vsras_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vsras_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+ {
+ return (int64x1_t)__builtin_neon_vsras_ndi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+ {
+ return (uint8x8_t)__builtin_neon_vsrau_nv8qi ((int8x8_t) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+ return (uint16x4_t)__builtin_neon_vsrau_nv4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+ return (uint32x2_t)__builtin_neon_vsrau_nv2si ((int32x2_t) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+ {
+ return (uint64x1_t)__builtin_neon_vsrau_ndi ((int64x1_t) __a, (int64x1_t) __b, __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+ {
+ return (int8x16_t)__builtin_neon_vsras_nv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vsras_nv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vsras_nv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+ {
+ return (int64x2_t)__builtin_neon_vsras_nv2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+ {
+ return (uint8x16_t)__builtin_neon_vsrau_nv16qi ((int8x16_t) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+ {
+ return (uint16x8_t)__builtin_neon_vsrau_nv8hi ((int16x8_t) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+ {
+ return (uint32x4_t)__builtin_neon_vsrau_nv4si ((int32x4_t) __a, (int32x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+ {
+ return (uint64x2_t)__builtin_neon_vsrau_nv2di ((int64x2_t) __a, (int64x2_t) __b, __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+ {
+ return (int8x8_t)__builtin_neon_vrsras_nv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vrsras_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vrsras_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+ {
+ return (int64x1_t)__builtin_neon_vrsras_ndi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+ {
+ return (uint8x8_t)__builtin_neon_vrsrau_nv8qi ((int8x8_t) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+ return (uint16x4_t)__builtin_neon_vrsrau_nv4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+ return (uint32x2_t)__builtin_neon_vrsrau_nv2si ((int32x2_t) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+ {
+ return (uint64x1_t)__builtin_neon_vrsrau_ndi ((int64x1_t) __a, (int64x1_t) __b, __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+ {
+ return (int8x16_t)__builtin_neon_vrsras_nv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vrsras_nv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vrsras_nv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+ {
+ return (int64x2_t)__builtin_neon_vrsras_nv2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+ {
+ return (uint8x16_t)__builtin_neon_vrsrau_nv16qi ((int8x16_t) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+ {
+ return (uint16x8_t)__builtin_neon_vrsrau_nv8hi ((int16x8_t) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+ {
+ return (uint32x4_t)__builtin_neon_vrsrau_nv4si ((int32x4_t) __a, (int32x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+ {
+ return (uint64x2_t)__builtin_neon_vrsrau_nv2di ((int64x2_t) __a, (int64x2_t) __b, __c);
+@@ -4565,68 +5278,79 @@ vrsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_p64 (poly64x1_t __a, poly64x1_t __b, const int __c)
+ {
+ return (poly64x1_t)__builtin_neon_vsri_ndi (__a, __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+ {
+ return (int8x8_t)__builtin_neon_vsri_nv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vsri_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vsri_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+ {
+ return (int64x1_t)__builtin_neon_vsri_ndi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+ {
+ return (uint8x8_t)__builtin_neon_vsri_nv8qi ((int8x8_t) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+ return (uint16x4_t)__builtin_neon_vsri_nv4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+ return (uint32x2_t)__builtin_neon_vsri_nv2si ((int32x2_t) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+ {
+ return (uint64x1_t)__builtin_neon_vsri_ndi ((int64x1_t) __a, (int64x1_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_p8 (poly8x8_t __a, poly8x8_t __b, const int __c)
+ {
+ return (poly8x8_t)__builtin_neon_vsri_nv8qi ((int8x8_t) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsri_n_p16 (poly16x4_t __a, poly16x4_t __b, const int __c)
+ {
+ return (poly16x4_t)__builtin_neon_vsri_nv4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+@@ -4634,68 +5358,79 @@ vsri_n_p16 (poly16x4_t __a, poly16x4_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_p64 (poly64x2_t __a, poly64x2_t __b, const int __c)
+ {
+ return (poly64x2_t)__builtin_neon_vsri_nv2di ((int64x2_t) __a, (int64x2_t) __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+ {
+ return (int8x16_t)__builtin_neon_vsri_nv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vsri_nv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vsri_nv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+ {
+ return (int64x2_t)__builtin_neon_vsri_nv2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+ {
+ return (uint8x16_t)__builtin_neon_vsri_nv16qi ((int8x16_t) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+ {
+ return (uint16x8_t)__builtin_neon_vsri_nv8hi ((int16x8_t) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+ {
+ return (uint32x4_t)__builtin_neon_vsri_nv4si ((int32x4_t) __a, (int32x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+ {
+ return (uint64x2_t)__builtin_neon_vsri_nv2di ((int64x2_t) __a, (int64x2_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_p8 (poly8x16_t __a, poly8x16_t __b, const int __c)
+ {
+ return (poly8x16_t)__builtin_neon_vsri_nv16qi ((int8x16_t) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsriq_n_p16 (poly16x8_t __a, poly16x8_t __b, const int __c)
+ {
+ return (poly16x8_t)__builtin_neon_vsri_nv8hi ((int16x8_t) __a, (int16x8_t) __b, __c);
+@@ -4703,68 +5438,79 @@ vsriq_n_p16 (poly16x8_t __a, poly16x8_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_p64 (poly64x1_t __a, poly64x1_t __b, const int __c)
+ {
+ return (poly64x1_t)__builtin_neon_vsli_ndi (__a, __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+ {
+ return (int8x8_t)__builtin_neon_vsli_nv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vsli_nv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vsli_nv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+ {
+ return (int64x1_t)__builtin_neon_vsli_ndi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+ {
+ return (uint8x8_t)__builtin_neon_vsli_nv8qi ((int8x8_t) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+ return (uint16x4_t)__builtin_neon_vsli_nv4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+ return (uint32x2_t)__builtin_neon_vsli_nv2si ((int32x2_t) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+ {
+ return (uint64x1_t)__builtin_neon_vsli_ndi ((int64x1_t) __a, (int64x1_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_p8 (poly8x8_t __a, poly8x8_t __b, const int __c)
+ {
+ return (poly8x8_t)__builtin_neon_vsli_nv8qi ((int8x8_t) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsli_n_p16 (poly16x4_t __a, poly16x4_t __b, const int __c)
+ {
+ return (poly16x4_t)__builtin_neon_vsli_nv4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+@@ -4772,530 +5518,618 @@ vsli_n_p16 (poly16x4_t __a, poly16x4_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_p64 (poly64x2_t __a, poly64x2_t __b, const int __c)
+ {
+ return (poly64x2_t)__builtin_neon_vsli_nv2di ((int64x2_t) __a, (int64x2_t) __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+ {
+ return (int8x16_t)__builtin_neon_vsli_nv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vsli_nv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vsli_nv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+ {
+ return (int64x2_t)__builtin_neon_vsli_nv2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+ {
+ return (uint8x16_t)__builtin_neon_vsli_nv16qi ((int8x16_t) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+ {
+ return (uint16x8_t)__builtin_neon_vsli_nv8hi ((int16x8_t) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+ {
+ return (uint32x4_t)__builtin_neon_vsli_nv4si ((int32x4_t) __a, (int32x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+ {
+ return (uint64x2_t)__builtin_neon_vsli_nv2di ((int64x2_t) __a, (int64x2_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_p8 (poly8x16_t __a, poly8x16_t __b, const int __c)
+ {
+ return (poly8x16_t)__builtin_neon_vsli_nv16qi ((int8x16_t) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsliq_n_p16 (poly16x8_t __a, poly16x8_t __b, const int __c)
+ {
+ return (poly16x8_t)__builtin_neon_vsli_nv8hi ((int16x8_t) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabs_s8 (int8x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vabsv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabs_s16 (int16x4_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vabsv4hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabs_s32 (int32x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vabsv2si (__a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabs_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vabsv2sf (__a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabsq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vabsv16qi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabsq_s16 (int16x8_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vabsv8hi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabsq_s32 (int32x4_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vabsv4si (__a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vabsq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vabsv4sf (__a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabs_s8 (int8x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vqabsv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabs_s16 (int16x4_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vqabsv4hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabs_s32 (int32x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vqabsv2si (__a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabsq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vqabsv16qi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabsq_s16 (int16x8_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vqabsv8hi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqabsq_s32 (int32x4_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vqabsv4si (__a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vneg_s8 (int8x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vnegv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vneg_s16 (int16x4_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vnegv4hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vneg_s32 (int32x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vnegv2si (__a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vneg_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vnegv2sf (__a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vnegq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vnegv16qi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vnegq_s16 (int16x8_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vnegv8hi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vnegq_s32 (int32x4_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vnegv4si (__a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vnegq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vnegv4sf (__a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqneg_s8 (int8x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vqnegv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqneg_s16 (int16x4_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vqnegv4hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqneg_s32 (int32x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vqnegv2si (__a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqnegq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vqnegv16qi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqnegq_s16 (int16x8_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vqnegv8hi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqnegq_s32 (int32x4_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vqnegv4si (__a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvn_s8 (int8x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vmvnv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvn_s16 (int16x4_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vmvnv4hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvn_s32 (int32x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vmvnv2si (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvn_u8 (uint8x8_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vmvnv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvn_u16 (uint16x4_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vmvnv4hi ((int16x4_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvn_u32 (uint32x2_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vmvnv2si ((int32x2_t) __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvn_p8 (poly8x8_t __a)
+ {
+ return (poly8x8_t)__builtin_neon_vmvnv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvnq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vmvnv16qi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvnq_s16 (int16x8_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vmvnv8hi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvnq_s32 (int32x4_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vmvnv4si (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvnq_u8 (uint8x16_t __a)
+ {
+ return (uint8x16_t)__builtin_neon_vmvnv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvnq_u16 (uint16x8_t __a)
+ {
+ return (uint16x8_t)__builtin_neon_vmvnv8hi ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvnq_u32 (uint32x4_t __a)
+ {
+ return (uint32x4_t)__builtin_neon_vmvnv4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmvnq_p8 (poly8x16_t __a)
+ {
+ return (poly8x16_t)__builtin_neon_vmvnv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcls_s8 (int8x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vclsv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcls_s16 (int16x4_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vclsv4hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcls_s32 (int32x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vclsv2si (__a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclsq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vclsv16qi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclsq_s16 (int16x8_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vclsv8hi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclsq_s32 (int32x4_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vclsv4si (__a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclz_s8 (int8x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vclzv8qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclz_s16 (int16x4_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vclzv4hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclz_s32 (int32x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vclzv2si (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclz_u8 (uint8x8_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vclzv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclz_u16 (uint16x4_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vclzv4hi ((int16x4_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclz_u32 (uint32x2_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vclzv2si ((int32x2_t) __a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclzq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vclzv16qi (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclzq_s16 (int16x8_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vclzv8hi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclzq_s32 (int32x4_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vclzv4si (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclzq_u8 (uint8x16_t __a)
+ {
+ return (uint8x16_t)__builtin_neon_vclzv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclzq_u16 (uint16x8_t __a)
+ {
+ return (uint16x8_t)__builtin_neon_vclzv8hi ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vclzq_u32 (uint32x4_t __a)
+ {
+ return (uint32x4_t)__builtin_neon_vclzv4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcnt_s8 (int8x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vcntv8qi (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcnt_u8 (uint8x8_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vcntv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcnt_p8 (poly8x8_t __a)
+ {
+ return (poly8x8_t)__builtin_neon_vcntv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcntq_s8 (int8x16_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vcntv16qi (__a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcntq_u8 (uint8x16_t __a)
+ {
+ return (uint8x16_t)__builtin_neon_vcntv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcntq_p8 (poly8x16_t __a)
+ {
+ return (poly8x16_t)__builtin_neon_vcntv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrecpe_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vrecpev2sf (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrecpe_u32 (uint32x2_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vrecpev2si ((int32x2_t) __a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrecpeq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vrecpev4sf (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrecpeq_u32 (uint32x4_t __a)
+ {
+ return (uint32x4_t)__builtin_neon_vrecpev4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsqrte_f32 (float32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vrsqrtev2sf (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsqrte_u32 (uint32x2_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vrsqrtev2si ((int32x2_t) __a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsqrteq_f32 (float32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vrsqrtev4sf (__a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrsqrteq_u32 (uint32x4_t __a)
+ {
+ return (uint32x4_t)__builtin_neon_vrsqrtev4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_s8 (int8x8_t __a, const int __b)
+ {
+ return (int8_t)__builtin_neon_vget_lanev8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_s16 (int16x4_t __a, const int __b)
+ {
+ return (int16_t)__builtin_neon_vget_lanev4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_s32 (int32x2_t __a, const int __b)
+ {
+ return (int32_t)__builtin_neon_vget_lanev2si (__a, __b);
+@@ -5328,67 +6162,88 @@ vget_lane_s32 (int32x2_t __a, const int __b)
+ })
+ #endif
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_f32 (float32x2_t __a, const int __b)
+ {
+ return (float32_t)__builtin_neon_vget_lanev2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_u8 (uint8x8_t __a, const int __b)
+ {
+ return (uint8_t)__builtin_neon_vget_laneuv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_u16 (uint16x4_t __a, const int __b)
+ {
+ return (uint16_t)__builtin_neon_vget_laneuv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_u32 (uint32x2_t __a, const int __b)
+ {
+ return (uint32_t)__builtin_neon_vget_laneuv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline poly8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_p8 (poly8x8_t __a, const int __b)
+ {
+ return (poly8_t)__builtin_neon_vget_laneuv8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline poly16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_p16 (poly16x4_t __a, const int __b)
+ {
+ return (poly16_t)__builtin_neon_vget_laneuv4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_s64 (int64x1_t __a, const int __b)
+ {
+ return (int64_t)__builtin_neon_vget_lanedi (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++#pragma GCC push_options
++#pragma GCC target ("fpu=crypto-neon-fp-armv8")
++__extension__ extern __inline poly64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vget_lane_p64 (poly64x1_t __a, const int __b)
++{
++ return (poly64_t)__builtin_neon_vget_lanedi ((int64x1_t) __a, __b);
++}
++
++#pragma GCC pop_options
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_lane_u64 (uint64x1_t __a, const int __b)
+ {
+ return (uint64_t)__builtin_neon_vget_lanedi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_s8 (int8x16_t __a, const int __b)
+ {
+ return (int8_t)__builtin_neon_vget_lanev16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_s16 (int16x8_t __a, const int __b)
+ {
+ return (int16_t)__builtin_neon_vget_lanev8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_s32 (int32x4_t __a, const int __b)
+ {
+ return (int32_t)__builtin_neon_vget_lanev4si (__a, __b);
+@@ -5405,67 +6260,78 @@ vgetq_lane_s32 (int32x4_t __a, const int __b)
+ })
+ #endif
+
+-__extension__ static __inline float32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_f32 (float32x4_t __a, const int __b)
+ {
+ return (float32_t)__builtin_neon_vget_lanev4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_u8 (uint8x16_t __a, const int __b)
+ {
+ return (uint8_t)__builtin_neon_vget_laneuv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_u16 (uint16x8_t __a, const int __b)
+ {
+ return (uint16_t)__builtin_neon_vget_laneuv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_u32 (uint32x4_t __a, const int __b)
+ {
+ return (uint32_t)__builtin_neon_vget_laneuv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline poly8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_p8 (poly8x16_t __a, const int __b)
+ {
+ return (poly8_t)__builtin_neon_vget_laneuv16qi ((int8x16_t) __a, __b);
+ }
+
+-__extension__ static __inline poly16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_p16 (poly16x8_t __a, const int __b)
+ {
+ return (poly16_t)__builtin_neon_vget_laneuv8hi ((int16x8_t) __a, __b);
+ }
+
+-__extension__ static __inline int64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_s64 (int64x2_t __a, const int __b)
+ {
+ return (int64_t)__builtin_neon_vget_lanev2di (__a, __b);
+ }
+
+-__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vgetq_lane_u64 (uint64x2_t __a, const int __b)
+ {
+ return (uint64_t)__builtin_neon_vget_lanev2di ((int64x2_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_s8 (int8_t __a, int8x8_t __b, const int __c)
+ {
+ return (int8x8_t)__builtin_neon_vset_lanev8qi ((__builtin_neon_qi) __a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vset_lanev4hi ((__builtin_neon_hi) __a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vset_lanev2si ((__builtin_neon_si) __a, __b, __c);
+@@ -5483,67 +6349,78 @@ vset_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
+ })
+ #endif
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_f32 (float32_t __a, float32x2_t __b, const int __c)
+ {
+ return (float32x2_t)__builtin_neon_vset_lanev2sf ((__builtin_neon_sf) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_u8 (uint8_t __a, uint8x8_t __b, const int __c)
+ {
+ return (uint8x8_t)__builtin_neon_vset_lanev8qi ((__builtin_neon_qi) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_u16 (uint16_t __a, uint16x4_t __b, const int __c)
+ {
+ return (uint16x4_t)__builtin_neon_vset_lanev4hi ((__builtin_neon_hi) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_u32 (uint32_t __a, uint32x2_t __b, const int __c)
+ {
+ return (uint32x2_t)__builtin_neon_vset_lanev2si ((__builtin_neon_si) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_p8 (poly8_t __a, poly8x8_t __b, const int __c)
+ {
+ return (poly8x8_t)__builtin_neon_vset_lanev8qi ((__builtin_neon_qi) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_p16 (poly16_t __a, poly16x4_t __b, const int __c)
+ {
+ return (poly16x4_t)__builtin_neon_vset_lanev4hi ((__builtin_neon_hi) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_s64 (int64_t __a, int64x1_t __b, const int __c)
+ {
+ return (int64x1_t)__builtin_neon_vset_lanedi ((__builtin_neon_di) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vset_lane_u64 (uint64_t __a, uint64x1_t __b, const int __c)
+ {
+ return (uint64x1_t)__builtin_neon_vset_lanedi ((__builtin_neon_di) __a, (int64x1_t) __b, __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_s8 (int8_t __a, int8x16_t __b, const int __c)
+ {
+ return (int8x16_t)__builtin_neon_vset_lanev16qi ((__builtin_neon_qi) __a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_s16 (int16_t __a, int16x8_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vset_lanev8hi ((__builtin_neon_hi) __a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_s32 (int32_t __a, int32x4_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vset_lanev4si ((__builtin_neon_si) __a, __b, __c);
+@@ -5561,49 +6438,57 @@ vsetq_lane_s32 (int32_t __a, int32x4_t __b, const int __c)
+ })
+ #endif
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_f32 (float32_t __a, float32x4_t __b, const int __c)
+ {
+ return (float32x4_t)__builtin_neon_vset_lanev4sf ((__builtin_neon_sf) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_u8 (uint8_t __a, uint8x16_t __b, const int __c)
+ {
+ return (uint8x16_t)__builtin_neon_vset_lanev16qi ((__builtin_neon_qi) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_u16 (uint16_t __a, uint16x8_t __b, const int __c)
+ {
+ return (uint16x8_t)__builtin_neon_vset_lanev8hi ((__builtin_neon_hi) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_u32 (uint32_t __a, uint32x4_t __b, const int __c)
+ {
+ return (uint32x4_t)__builtin_neon_vset_lanev4si ((__builtin_neon_si) __a, (int32x4_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_p8 (poly8_t __a, poly8x16_t __b, const int __c)
+ {
+ return (poly8x16_t)__builtin_neon_vset_lanev16qi ((__builtin_neon_qi) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_p16 (poly16_t __a, poly16x8_t __b, const int __c)
+ {
+ return (poly16x8_t)__builtin_neon_vset_lanev8hi ((__builtin_neon_hi) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_s64 (int64_t __a, int64x2_t __b, const int __c)
+ {
+ return (int64x2_t)__builtin_neon_vset_lanev2di ((__builtin_neon_di) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsetq_lane_u64 (uint64_t __a, uint64x2_t __b, const int __c)
+ {
+ return (uint64x2_t)__builtin_neon_vset_lanev2di ((__builtin_neon_di) __a, (int64x2_t) __b, __c);
+@@ -5611,136 +6496,158 @@ vsetq_lane_u64 (uint64_t __a, uint64x2_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_p64 (uint64_t __a)
+ {
+ return (poly64x1_t)__builtin_neon_vcreatedi ((__builtin_neon_di) __a);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_s8 (uint64_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vcreatev8qi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_s16 (uint64_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vcreatev4hi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_s32 (uint64_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vcreatev2si ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_s64 (uint64_t __a)
+ {
+ return (int64x1_t)__builtin_neon_vcreatedi ((__builtin_neon_di) __a);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_f16 (uint64_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_f32 (uint64_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vcreatev2sf ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_u8 (uint64_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vcreatev8qi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_u16 (uint64_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vcreatev4hi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_u32 (uint64_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vcreatev2si ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_u64 (uint64_t __a)
+ {
+ return (uint64x1_t)__builtin_neon_vcreatedi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_p8 (uint64_t __a)
+ {
+ return (poly8x8_t)__builtin_neon_vcreatev8qi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcreate_p16 (uint64_t __a)
+ {
+ return (poly16x4_t)__builtin_neon_vcreatev4hi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_s8 (int8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vdup_nv8qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_s16 (int16_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vdup_nv4hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_s32 (int32_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vdup_nv2si ((__builtin_neon_si) __a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_f32 (float32_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vdup_nv2sf ((__builtin_neon_sf) __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_u8 (uint8_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vdup_nv8qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_u16 (uint16_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vdup_nv4hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_u32 (uint32_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vdup_nv2si ((__builtin_neon_si) __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_p8 (poly8_t __a)
+ {
+ return (poly8x8_t)__builtin_neon_vdup_nv8qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_p16 (poly16_t __a)
+ {
+ return (poly16x4_t)__builtin_neon_vdup_nv4hi ((__builtin_neon_hi) __a);
+@@ -5748,20 +6655,23 @@ vdup_n_p16 (poly16_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_p64 (poly64_t __a)
+ {
+ return (poly64x1_t)__builtin_neon_vdup_ndi ((__builtin_neon_di) __a);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_s64 (int64_t __a)
+ {
+ return (int64x1_t)__builtin_neon_vdup_ndi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_n_u64 (uint64_t __a)
+ {
+ return (uint64x1_t)__builtin_neon_vdup_ndi ((__builtin_neon_di) __a);
+@@ -5769,260 +6679,303 @@ vdup_n_u64 (uint64_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_p64 (poly64_t __a)
+ {
+ return (poly64x2_t)__builtin_neon_vdup_nv2di ((__builtin_neon_di) __a);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_s8 (int8_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vdup_nv16qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_s16 (int16_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vdup_nv8hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_s32 (int32_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vdup_nv4si ((__builtin_neon_si) __a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_f32 (float32_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vdup_nv4sf ((__builtin_neon_sf) __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_u8 (uint8_t __a)
+ {
+ return (uint8x16_t)__builtin_neon_vdup_nv16qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_u16 (uint16_t __a)
+ {
+ return (uint16x8_t)__builtin_neon_vdup_nv8hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_u32 (uint32_t __a)
+ {
+ return (uint32x4_t)__builtin_neon_vdup_nv4si ((__builtin_neon_si) __a);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_p8 (poly8_t __a)
+ {
+ return (poly8x16_t)__builtin_neon_vdup_nv16qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_p16 (poly16_t __a)
+ {
+ return (poly16x8_t)__builtin_neon_vdup_nv8hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_s64 (int64_t __a)
+ {
+ return (int64x2_t)__builtin_neon_vdup_nv2di ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_n_u64 (uint64_t __a)
+ {
+ return (uint64x2_t)__builtin_neon_vdup_nv2di ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_s8 (int8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vdup_nv8qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_s16 (int16_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vdup_nv4hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_s32 (int32_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vdup_nv2si ((__builtin_neon_si) __a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_f32 (float32_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vdup_nv2sf ((__builtin_neon_sf) __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_u8 (uint8_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vdup_nv8qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_u16 (uint16_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vdup_nv4hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_u32 (uint32_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vdup_nv2si ((__builtin_neon_si) __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_p8 (poly8_t __a)
+ {
+ return (poly8x8_t)__builtin_neon_vdup_nv8qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_p16 (poly16_t __a)
+ {
+ return (poly16x4_t)__builtin_neon_vdup_nv4hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_s64 (int64_t __a)
+ {
+ return (int64x1_t)__builtin_neon_vdup_ndi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmov_n_u64 (uint64_t __a)
+ {
+ return (uint64x1_t)__builtin_neon_vdup_ndi ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_s8 (int8_t __a)
+ {
+ return (int8x16_t)__builtin_neon_vdup_nv16qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_s16 (int16_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vdup_nv8hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_s32 (int32_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vdup_nv4si ((__builtin_neon_si) __a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_f32 (float32_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vdup_nv4sf ((__builtin_neon_sf) __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_u8 (uint8_t __a)
+ {
+ return (uint8x16_t)__builtin_neon_vdup_nv16qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_u16 (uint16_t __a)
+ {
+ return (uint16x8_t)__builtin_neon_vdup_nv8hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_u32 (uint32_t __a)
+ {
+ return (uint32x4_t)__builtin_neon_vdup_nv4si ((__builtin_neon_si) __a);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_p8 (poly8_t __a)
+ {
+ return (poly8x16_t)__builtin_neon_vdup_nv16qi ((__builtin_neon_qi) __a);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_p16 (poly16_t __a)
+ {
+ return (poly16x8_t)__builtin_neon_vdup_nv8hi ((__builtin_neon_hi) __a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_s64 (int64_t __a)
+ {
+ return (int64x2_t)__builtin_neon_vdup_nv2di ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovq_n_u64 (uint64_t __a)
+ {
+ return (uint64x2_t)__builtin_neon_vdup_nv2di ((__builtin_neon_di) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_s8 (int8x8_t __a, const int __b)
+ {
+ return (int8x8_t)__builtin_neon_vdup_lanev8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_s16 (int16x4_t __a, const int __b)
+ {
+ return (int16x4_t)__builtin_neon_vdup_lanev4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_s32 (int32x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vdup_lanev2si (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_f32 (float32x2_t __a, const int __b)
+ {
+ return (float32x2_t)__builtin_neon_vdup_lanev2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_u8 (uint8x8_t __a, const int __b)
+ {
+ return (uint8x8_t)__builtin_neon_vdup_lanev8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_u16 (uint16x4_t __a, const int __b)
+ {
+ return (uint16x4_t)__builtin_neon_vdup_lanev4hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_u32 (uint32x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vdup_lanev2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_p8 (poly8x8_t __a, const int __b)
+ {
+ return (poly8x8_t)__builtin_neon_vdup_lanev8qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_p16 (poly16x4_t __a, const int __b)
+ {
+ return (poly16x4_t)__builtin_neon_vdup_lanev4hi ((int16x4_t) __a, __b);
+@@ -6030,74 +6983,86 @@ vdup_lane_p16 (poly16x4_t __a, const int __b)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_p64 (poly64x1_t __a, const int __b)
+ {
+ return (poly64x1_t)__builtin_neon_vdup_lanedi (__a, __b);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_s64 (int64x1_t __a, const int __b)
+ {
+ return (int64x1_t)__builtin_neon_vdup_lanedi (__a, __b);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdup_lane_u64 (uint64x1_t __a, const int __b)
+ {
+ return (uint64x1_t)__builtin_neon_vdup_lanedi ((int64x1_t) __a, __b);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_s8 (int8x8_t __a, const int __b)
+ {
+ return (int8x16_t)__builtin_neon_vdup_lanev16qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_s16 (int16x4_t __a, const int __b)
+ {
+ return (int16x8_t)__builtin_neon_vdup_lanev8hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_s32 (int32x2_t __a, const int __b)
+ {
+ return (int32x4_t)__builtin_neon_vdup_lanev4si (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_f32 (float32x2_t __a, const int __b)
+ {
+ return (float32x4_t)__builtin_neon_vdup_lanev4sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_u8 (uint8x8_t __a, const int __b)
+ {
+ return (uint8x16_t)__builtin_neon_vdup_lanev16qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_u16 (uint16x4_t __a, const int __b)
+ {
+ return (uint16x8_t)__builtin_neon_vdup_lanev8hi ((int16x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_u32 (uint32x2_t __a, const int __b)
+ {
+ return (uint32x4_t)__builtin_neon_vdup_lanev4si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_p8 (poly8x8_t __a, const int __b)
+ {
+ return (poly8x16_t)__builtin_neon_vdup_lanev16qi ((int8x8_t) __a, __b);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_p16 (poly16x4_t __a, const int __b)
+ {
+ return (poly16x8_t)__builtin_neon_vdup_lanev8hi ((int16x4_t) __a, __b);
+@@ -6105,20 +7070,23 @@ vdupq_lane_p16 (poly16x4_t __a, const int __b)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_p64 (poly64x1_t __a, const int __b)
+ {
+ return (poly64x2_t)__builtin_neon_vdup_lanev2di (__a, __b);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_s64 (int64x1_t __a, const int __b)
+ {
+ return (int64x2_t)__builtin_neon_vdup_lanev2di (__a, __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vdupq_lane_u64 (uint64x1_t __a, const int __b)
+ {
+ return (uint64x2_t)__builtin_neon_vdup_lanev2di ((int64x1_t) __a, __b);
+@@ -6126,82 +7094,95 @@ vdupq_lane_u64 (uint64x1_t __a, const int __b)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_p64 (poly64x1_t __a, poly64x1_t __b)
+ {
+ return (poly64x2_t)__builtin_neon_vcombinedi (__a, __b);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x16_t)__builtin_neon_vcombinev8qi (__a, __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vcombinev4hi (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vcombinev2si (__a, __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vcombinedi (__a, __b);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_f16 (float16x4_t __a, float16x4_t __b)
+ {
+ return __builtin_neon_vcombinev4hf (__a, __b);
+ }
+ #endif
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ return (float32x4_t)__builtin_neon_vcombinev2sf (__a, __b);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x16_t)__builtin_neon_vcombinev8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vcombinev4hi ((int16x4_t) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcombinev2si ((int32x2_t) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vcombinedi ((int64x1_t) __a, (int64x1_t) __b);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ return (poly8x16_t)__builtin_neon_vcombinev8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcombine_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+ return (poly16x8_t)__builtin_neon_vcombinev4hi ((int16x4_t) __a, (int16x4_t) __b);
+@@ -6209,144 +7190,167 @@ vcombine_p16 (poly16x4_t __a, poly16x4_t __b)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_p64 (poly64x2_t __a)
+ {
+ return (poly64x1_t)__builtin_neon_vget_highv2di ((int64x2_t) __a);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_s8 (int8x16_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vget_highv16qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_s16 (int16x8_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vget_highv8hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_s32 (int32x4_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vget_highv4si (__a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_s64 (int64x2_t __a)
+ {
+ return (int64x1_t)__builtin_neon_vget_highv2di (__a);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_f16 (float16x8_t __a)
+ {
+ return __builtin_neon_vget_highv8hf (__a);
+ }
+ #endif
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_f32 (float32x4_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vget_highv4sf (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_u8 (uint8x16_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vget_highv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_u16 (uint16x8_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vget_highv8hi ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_u32 (uint32x4_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vget_highv4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_u64 (uint64x2_t __a)
+ {
+ return (uint64x1_t)__builtin_neon_vget_highv2di ((int64x2_t) __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_p8 (poly8x16_t __a)
+ {
+ return (poly8x8_t)__builtin_neon_vget_highv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_high_p16 (poly16x8_t __a)
+ {
+ return (poly16x4_t)__builtin_neon_vget_highv8hi ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_s8 (int8x16_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vget_lowv16qi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_s16 (int16x8_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vget_lowv8hi (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_s32 (int32x4_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vget_lowv4si (__a);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_f16 (float16x8_t __a)
+ {
+ return __builtin_neon_vget_lowv8hf (__a);
+ }
+ #endif
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_f32 (float32x4_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vget_lowv4sf (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_u8 (uint8x16_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vget_lowv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_u16 (uint16x8_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vget_lowv8hi ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_u32 (uint32x4_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vget_lowv4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_p8 (poly8x16_t __a)
+ {
+ return (poly8x8_t)__builtin_neon_vget_lowv16qi ((int8x16_t) __a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_p16 (poly16x8_t __a)
+ {
+ return (poly16x4_t)__builtin_neon_vget_lowv8hi ((int16x8_t) __a);
+@@ -6354,68 +7358,79 @@ vget_low_p16 (poly16x8_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_p64 (poly64x2_t __a)
+ {
+ return (poly64x1_t)__builtin_neon_vget_lowv2di ((int64x2_t) __a);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_s64 (int64x2_t __a)
+ {
+ return (int64x1_t)__builtin_neon_vget_lowv2di (__a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vget_low_u64 (uint64x2_t __a)
+ {
+ return (uint64x1_t)__builtin_neon_vget_lowv2di ((int64x2_t) __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_s32_f32 (float32x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vcvtsv2sf (__a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_f32_s32 (int32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vcvtsv2si (__a);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_f32_u32 (uint32x2_t __a)
+ {
+ return (float32x2_t)__builtin_neon_vcvtuv2si ((int32x2_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_u32_f32 (float32x2_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vcvtuv2sf (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvtq_s32_f32 (float32x4_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vcvtsv4sf (__a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvtq_f32_s32 (int32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vcvtsv4si (__a);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvtq_f32_u32 (uint32x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vcvtuv4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvtq_u32_f32 (float32x4_t __a)
+ {
+ return (uint32x4_t)__builtin_neon_vcvtuv4sf (__a);
+@@ -6424,7 +7439,8 @@ vcvtq_u32_f32 (float32x4_t __a)
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=neon-fp16")
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_f16_f32 (float32x4_t __a)
+ {
+ return (float16x4_t)__builtin_neon_vcvtv4hfv4sf (__a);
+@@ -6432,7 +7448,8 @@ vcvt_f16_f32 (float32x4_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_f32_f16 (float16x4_t __a)
+ {
+ return (float32x4_t)__builtin_neon_vcvtv4sfv4hf (__a);
+@@ -6440,1059 +7457,1232 @@ vcvt_f32_f16 (float16x4_t __a)
+ #endif
+ #pragma GCC pop_options
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_n_s32_f32 (float32x2_t __a, const int __b)
+ {
+ return (int32x2_t)__builtin_neon_vcvts_nv2sf (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_n_f32_s32 (int32x2_t __a, const int __b)
+ {
+ return (float32x2_t)__builtin_neon_vcvts_nv2si (__a, __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_n_f32_u32 (uint32x2_t __a, const int __b)
+ {
+ return (float32x2_t)__builtin_neon_vcvtu_nv2si ((int32x2_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvt_n_u32_f32 (float32x2_t __a, const int __b)
+ {
+ return (uint32x2_t)__builtin_neon_vcvtu_nv2sf (__a, __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvtq_n_s32_f32 (float32x4_t __a, const int __b)
+ {
+ return (int32x4_t)__builtin_neon_vcvts_nv4sf (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvtq_n_f32_s32 (int32x4_t __a, const int __b)
+ {
+ return (float32x4_t)__builtin_neon_vcvts_nv4si (__a, __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvtq_n_f32_u32 (uint32x4_t __a, const int __b)
+ {
+ return (float32x4_t)__builtin_neon_vcvtu_nv4si ((int32x4_t) __a, __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vcvtq_n_u32_f32 (float32x4_t __a, const int __b)
+ {
+ return (uint32x4_t)__builtin_neon_vcvtu_nv4sf (__a, __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovn_s16 (int16x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vmovnv8hi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovn_s32 (int32x4_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vmovnv4si (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovn_s64 (int64x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vmovnv2di (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovn_u16 (uint16x8_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vmovnv8hi ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovn_u32 (uint32x4_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vmovnv4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovn_u64 (uint64x2_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vmovnv2di ((int64x2_t) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqmovn_s16 (int16x8_t __a)
+ {
+ return (int8x8_t)__builtin_neon_vqmovnsv8hi (__a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqmovn_s32 (int32x4_t __a)
+ {
+ return (int16x4_t)__builtin_neon_vqmovnsv4si (__a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqmovn_s64 (int64x2_t __a)
+ {
+ return (int32x2_t)__builtin_neon_vqmovnsv2di (__a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqmovn_u16 (uint16x8_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vqmovnuv8hi ((int16x8_t) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqmovn_u32 (uint32x4_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vqmovnuv4si ((int32x4_t) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqmovn_u64 (uint64x2_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vqmovnuv2di ((int64x2_t) __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqmovun_s16 (int16x8_t __a)
+ {
+ return (uint8x8_t)__builtin_neon_vqmovunv8hi (__a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqmovun_s32 (int32x4_t __a)
+ {
+ return (uint16x4_t)__builtin_neon_vqmovunv4si (__a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqmovun_s64 (int64x2_t __a)
+ {
+ return (uint32x2_t)__builtin_neon_vqmovunv2di (__a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovl_s8 (int8x8_t __a)
+ {
+ return (int16x8_t)__builtin_neon_vmovlsv8qi (__a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovl_s16 (int16x4_t __a)
+ {
+ return (int32x4_t)__builtin_neon_vmovlsv4hi (__a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovl_s32 (int32x2_t __a)
+ {
+ return (int64x2_t)__builtin_neon_vmovlsv2si (__a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovl_u8 (uint8x8_t __a)
+ {
+ return (uint16x8_t)__builtin_neon_vmovluv8qi ((int8x8_t) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovl_u16 (uint16x4_t __a)
+ {
+ return (uint32x4_t)__builtin_neon_vmovluv4hi ((int16x4_t) __a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmovl_u32 (uint32x2_t __a)
+ {
+ return (uint64x2_t)__builtin_neon_vmovluv2si ((int32x2_t) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl1_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return (int8x8_t)__builtin_neon_vtbl1v8qi (__a, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl1_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return (uint8x8_t)__builtin_neon_vtbl1v8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl1_p8 (poly8x8_t __a, uint8x8_t __b)
+ {
+ return (poly8x8_t)__builtin_neon_vtbl1v8qi ((int8x8_t) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl2_s8 (int8x8x2_t __a, int8x8_t __b)
+ {
+ union { int8x8x2_t __i; __builtin_neon_ti __o; } __au = { __a };
+ return (int8x8_t)__builtin_neon_vtbl2v8qi (__au.__o, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl2_u8 (uint8x8x2_t __a, uint8x8_t __b)
+ {
+ union { uint8x8x2_t __i; __builtin_neon_ti __o; } __au = { __a };
+ return (uint8x8_t)__builtin_neon_vtbl2v8qi (__au.__o, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl2_p8 (poly8x8x2_t __a, uint8x8_t __b)
+ {
+ union { poly8x8x2_t __i; __builtin_neon_ti __o; } __au = { __a };
+ return (poly8x8_t)__builtin_neon_vtbl2v8qi (__au.__o, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl3_s8 (int8x8x3_t __a, int8x8_t __b)
+ {
+ union { int8x8x3_t __i; __builtin_neon_ei __o; } __au = { __a };
+ return (int8x8_t)__builtin_neon_vtbl3v8qi (__au.__o, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl3_u8 (uint8x8x3_t __a, uint8x8_t __b)
+ {
+ union { uint8x8x3_t __i; __builtin_neon_ei __o; } __au = { __a };
+ return (uint8x8_t)__builtin_neon_vtbl3v8qi (__au.__o, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl3_p8 (poly8x8x3_t __a, uint8x8_t __b)
+ {
+ union { poly8x8x3_t __i; __builtin_neon_ei __o; } __au = { __a };
+ return (poly8x8_t)__builtin_neon_vtbl3v8qi (__au.__o, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl4_s8 (int8x8x4_t __a, int8x8_t __b)
+ {
+ union { int8x8x4_t __i; __builtin_neon_oi __o; } __au = { __a };
+ return (int8x8_t)__builtin_neon_vtbl4v8qi (__au.__o, __b);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl4_u8 (uint8x8x4_t __a, uint8x8_t __b)
+ {
+ union { uint8x8x4_t __i; __builtin_neon_oi __o; } __au = { __a };
+ return (uint8x8_t)__builtin_neon_vtbl4v8qi (__au.__o, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbl4_p8 (poly8x8x4_t __a, uint8x8_t __b)
+ {
+ union { poly8x8x4_t __i; __builtin_neon_oi __o; } __au = { __a };
+ return (poly8x8_t)__builtin_neon_vtbl4v8qi (__au.__o, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx1_s8 (int8x8_t __a, int8x8_t __b, int8x8_t __c)
+ {
+ return (int8x8_t)__builtin_neon_vtbx1v8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx1_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
+ {
+ return (uint8x8_t)__builtin_neon_vtbx1v8qi ((int8x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx1_p8 (poly8x8_t __a, poly8x8_t __b, uint8x8_t __c)
+ {
+ return (poly8x8_t)__builtin_neon_vtbx1v8qi ((int8x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx2_s8 (int8x8_t __a, int8x8x2_t __b, int8x8_t __c)
+ {
+ union { int8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ return (int8x8_t)__builtin_neon_vtbx2v8qi (__a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx2_u8 (uint8x8_t __a, uint8x8x2_t __b, uint8x8_t __c)
+ {
+ union { uint8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ return (uint8x8_t)__builtin_neon_vtbx2v8qi ((int8x8_t) __a, __bu.__o, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx2_p8 (poly8x8_t __a, poly8x8x2_t __b, uint8x8_t __c)
+ {
+ union { poly8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ return (poly8x8_t)__builtin_neon_vtbx2v8qi ((int8x8_t) __a, __bu.__o, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx3_s8 (int8x8_t __a, int8x8x3_t __b, int8x8_t __c)
+ {
+ union { int8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ return (int8x8_t)__builtin_neon_vtbx3v8qi (__a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx3_u8 (uint8x8_t __a, uint8x8x3_t __b, uint8x8_t __c)
+ {
+ union { uint8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ return (uint8x8_t)__builtin_neon_vtbx3v8qi ((int8x8_t) __a, __bu.__o, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx3_p8 (poly8x8_t __a, poly8x8x3_t __b, uint8x8_t __c)
+ {
+ union { poly8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ return (poly8x8_t)__builtin_neon_vtbx3v8qi ((int8x8_t) __a, __bu.__o, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx4_s8 (int8x8_t __a, int8x8x4_t __b, int8x8_t __c)
+ {
+ union { int8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ return (int8x8_t)__builtin_neon_vtbx4v8qi (__a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx4_u8 (uint8x8_t __a, uint8x8x4_t __b, uint8x8_t __c)
+ {
+ union { uint8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ return (uint8x8_t)__builtin_neon_vtbx4v8qi ((int8x8_t) __a, __bu.__o, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtbx4_p8 (poly8x8_t __a, poly8x8x4_t __b, uint8x8_t __c)
+ {
+ union { poly8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ return (poly8x8_t)__builtin_neon_vtbx4v8qi ((int8x8_t) __a, __bu.__o, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vmul_lanev4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vmul_lanev2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_lane_f32 (float32x2_t __a, float32x2_t __b, const int __c)
+ {
+ return (float32x2_t)__builtin_neon_vmul_lanev2sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_lane_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+ return (uint16x4_t)__builtin_neon_vmul_lanev4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_lane_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+ return (uint32x2_t)__builtin_neon_vmul_lanev2si ((int32x2_t) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vmul_lanev8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vmul_lanev4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_lane_f32 (float32x4_t __a, float32x2_t __b, const int __c)
+ {
+ return (float32x4_t)__builtin_neon_vmul_lanev4sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_lane_u16 (uint16x8_t __a, uint16x4_t __b, const int __c)
+ {
+ return (uint16x8_t)__builtin_neon_vmul_lanev8hi ((int16x8_t) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_lane_u32 (uint32x4_t __a, uint32x2_t __b, const int __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmul_lanev4si ((int32x4_t) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+ {
+ return (int16x4_t)__builtin_neon_vmla_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+ {
+ return (int32x2_t)__builtin_neon_vmla_lanev2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_lane_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c, const int __d)
+ {
+ return (float32x2_t)__builtin_neon_vmla_lanev2sf (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_lane_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c, const int __d)
+ {
+ return (uint16x4_t)__builtin_neon_vmla_lanev4hi ((int16x4_t) __a, (int16x4_t) __b, (int16x4_t) __c, __d);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_lane_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c, const int __d)
+ {
+ return (uint32x2_t)__builtin_neon_vmla_lanev2si ((int32x2_t) __a, (int32x2_t) __b, (int32x2_t) __c, __d);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
+ {
+ return (int16x8_t)__builtin_neon_vmla_lanev8hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
+ {
+ return (int32x4_t)__builtin_neon_vmla_lanev4si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_lane_f32 (float32x4_t __a, float32x4_t __b, float32x2_t __c, const int __d)
+ {
+ return (float32x4_t)__builtin_neon_vmla_lanev4sf (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_lane_u16 (uint16x8_t __a, uint16x8_t __b, uint16x4_t __c, const int __d)
+ {
+ return (uint16x8_t)__builtin_neon_vmla_lanev8hi ((int16x8_t) __a, (int16x8_t) __b, (int16x4_t) __c, __d);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_lane_u32 (uint32x4_t __a, uint32x4_t __b, uint32x2_t __c, const int __d)
+ {
+ return (uint32x4_t)__builtin_neon_vmla_lanev4si ((int32x4_t) __a, (int32x4_t) __b, (int32x2_t) __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+ {
+ return (int32x4_t)__builtin_neon_vmlals_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+ {
+ return (int64x2_t)__builtin_neon_vmlals_lanev2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_lane_u16 (uint32x4_t __a, uint16x4_t __b, uint16x4_t __c, const int __d)
+ {
+ return (uint32x4_t)__builtin_neon_vmlalu_lanev4hi ((int32x4_t) __a, (int16x4_t) __b, (int16x4_t) __c, __d);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_lane_u32 (uint64x2_t __a, uint32x2_t __b, uint32x2_t __c, const int __d)
+ {
+ return (uint64x2_t)__builtin_neon_vmlalu_lanev2si ((int64x2_t) __a, (int32x2_t) __b, (int32x2_t) __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlal_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+ {
+ return (int32x4_t)__builtin_neon_vqdmlal_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlal_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+ {
+ return (int64x2_t)__builtin_neon_vqdmlal_lanev2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+ {
+ return (int16x4_t)__builtin_neon_vmls_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+ {
+ return (int32x2_t)__builtin_neon_vmls_lanev2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_lane_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c, const int __d)
+ {
+ return (float32x2_t)__builtin_neon_vmls_lanev2sf (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_lane_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c, const int __d)
+ {
+ return (uint16x4_t)__builtin_neon_vmls_lanev4hi ((int16x4_t) __a, (int16x4_t) __b, (int16x4_t) __c, __d);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_lane_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c, const int __d)
+ {
+ return (uint32x2_t)__builtin_neon_vmls_lanev2si ((int32x2_t) __a, (int32x2_t) __b, (int32x2_t) __c, __d);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
+ {
+ return (int16x8_t)__builtin_neon_vmls_lanev8hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
+ {
+ return (int32x4_t)__builtin_neon_vmls_lanev4si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_lane_f32 (float32x4_t __a, float32x4_t __b, float32x2_t __c, const int __d)
+ {
+ return (float32x4_t)__builtin_neon_vmls_lanev4sf (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_lane_u16 (uint16x8_t __a, uint16x8_t __b, uint16x4_t __c, const int __d)
+ {
+ return (uint16x8_t)__builtin_neon_vmls_lanev8hi ((int16x8_t) __a, (int16x8_t) __b, (int16x4_t) __c, __d);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_lane_u32 (uint32x4_t __a, uint32x4_t __b, uint32x2_t __c, const int __d)
+ {
+ return (uint32x4_t)__builtin_neon_vmls_lanev4si ((int32x4_t) __a, (int32x4_t) __b, (int32x2_t) __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+ {
+ return (int32x4_t)__builtin_neon_vmlsls_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+ {
+ return (int64x2_t)__builtin_neon_vmlsls_lanev2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_lane_u16 (uint32x4_t __a, uint16x4_t __b, uint16x4_t __c, const int __d)
+ {
+ return (uint32x4_t)__builtin_neon_vmlslu_lanev4hi ((int32x4_t) __a, (int16x4_t) __b, (int16x4_t) __c, __d);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_lane_u32 (uint64x2_t __a, uint32x2_t __b, uint32x2_t __c, const int __d)
+ {
+ return (uint64x2_t)__builtin_neon_vmlslu_lanev2si ((int64x2_t) __a, (int32x2_t) __b, (int32x2_t) __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlsl_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+ {
+ return (int32x4_t)__builtin_neon_vqdmlsl_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlsl_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+ {
+ return (int64x2_t)__builtin_neon_vqdmlsl_lanev2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vmulls_lanev4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int64x2_t)__builtin_neon_vmulls_lanev2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_lane_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmullu_lanev4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_lane_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+ return (uint64x2_t)__builtin_neon_vmullu_lanev2si ((int32x2_t) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmull_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vqdmull_lanev4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmull_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int64x2_t)__builtin_neon_vqdmull_lanev2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vqdmulh_lanev8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vqdmulh_lanev4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vqdmulh_lanev4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vqdmulh_lanev2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vqrdmulh_lanev8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vqrdmulh_lanev4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vqrdmulh_lanev4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vqrdmulh_lanev2si (__a, __b, __c);
+ }
+
+ #ifdef __ARM_FEATURE_QRDMX
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlahq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
+ {
+ return (int16x8_t)__builtin_neon_vqrdmlah_lanev8hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlahq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
+ {
+ return (int32x4_t)__builtin_neon_vqrdmlah_lanev4si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlah_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+ {
+ return (int16x4_t)__builtin_neon_vqrdmlah_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlah_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+ {
+ return (int32x2_t)__builtin_neon_vqrdmlah_lanev2si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlshq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
+ {
+ return (int16x8_t)__builtin_neon_vqrdmlsh_lanev8hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlshq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
+ {
+ return (int32x4_t)__builtin_neon_vqrdmlsh_lanev4si (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlsh_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+ {
+ return (int16x4_t)__builtin_neon_vqrdmlsh_lanev4hi (__a, __b, __c, __d);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmlsh_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+ {
+ return (int32x2_t)__builtin_neon_vqrdmlsh_lanev2si (__a, __b, __c, __d);
+ }
+ #endif
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_n_s16 (int16x4_t __a, int16_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vmul_nv4hi (__a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_n_s32 (int32x2_t __a, int32_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vmul_nv2si (__a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_n_f32 (float32x2_t __a, float32_t __b)
+ {
+ return (float32x2_t)__builtin_neon_vmul_nv2sf (__a, (__builtin_neon_sf) __b);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_n_u16 (uint16x4_t __a, uint16_t __b)
+ {
+ return (uint16x4_t)__builtin_neon_vmul_nv4hi ((int16x4_t) __a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmul_n_u32 (uint32x2_t __a, uint32_t __b)
+ {
+ return (uint32x2_t)__builtin_neon_vmul_nv2si ((int32x2_t) __a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_n_s16 (int16x8_t __a, int16_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vmul_nv8hi (__a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_n_s32 (int32x4_t __a, int32_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vmul_nv4si (__a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_n_f32 (float32x4_t __a, float32_t __b)
+ {
+ return (float32x4_t)__builtin_neon_vmul_nv4sf (__a, (__builtin_neon_sf) __b);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_n_u16 (uint16x8_t __a, uint16_t __b)
+ {
+ return (uint16x8_t)__builtin_neon_vmul_nv8hi ((int16x8_t) __a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmulq_n_u32 (uint32x4_t __a, uint32_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vmul_nv4si ((int32x4_t) __a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_n_s16 (int16x4_t __a, int16_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vmulls_nv4hi (__a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_n_s32 (int32x2_t __a, int32_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vmulls_nv2si (__a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_n_u16 (uint16x4_t __a, uint16_t __b)
+ {
+ return (uint32x4_t)__builtin_neon_vmullu_nv4hi ((int16x4_t) __a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_n_u32 (uint32x2_t __a, uint32_t __b)
+ {
+ return (uint64x2_t)__builtin_neon_vmullu_nv2si ((int32x2_t) __a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmull_n_s16 (int16x4_t __a, int16_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqdmull_nv4hi (__a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmull_n_s32 (int32x2_t __a, int32_t __b)
+ {
+ return (int64x2_t)__builtin_neon_vqdmull_nv2si (__a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulhq_n_s16 (int16x8_t __a, int16_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vqdmulh_nv8hi (__a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulhq_n_s32 (int32x4_t __a, int32_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqdmulh_nv4si (__a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulh_n_s16 (int16x4_t __a, int16_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vqdmulh_nv4hi (__a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmulh_n_s32 (int32x2_t __a, int32_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vqdmulh_nv2si (__a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulhq_n_s16 (int16x8_t __a, int16_t __b)
+ {
+ return (int16x8_t)__builtin_neon_vqrdmulh_nv8hi (__a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulhq_n_s32 (int32x4_t __a, int32_t __b)
+ {
+ return (int32x4_t)__builtin_neon_vqrdmulh_nv4si (__a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulh_n_s16 (int16x4_t __a, int16_t __b)
+ {
+ return (int16x4_t)__builtin_neon_vqrdmulh_nv4hi (__a, (__builtin_neon_hi) __b);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqrdmulh_n_s32 (int32x2_t __a, int32_t __b)
+ {
+ return (int32x2_t)__builtin_neon_vqrdmulh_nv2si (__a, (__builtin_neon_si) __b);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_n_s16 (int16x4_t __a, int16x4_t __b, int16_t __c)
+ {
+ return (int16x4_t)__builtin_neon_vmla_nv4hi (__a, __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_n_s32 (int32x2_t __a, int32x2_t __b, int32_t __c)
+ {
+ return (int32x2_t)__builtin_neon_vmla_nv2si (__a, __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
+ {
+ return (float32x2_t)__builtin_neon_vmla_nv2sf (__a, __b, (__builtin_neon_sf) __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_n_u16 (uint16x4_t __a, uint16x4_t __b, uint16_t __c)
+ {
+ return (uint16x4_t)__builtin_neon_vmla_nv4hi ((int16x4_t) __a, (int16x4_t) __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmla_n_u32 (uint32x2_t __a, uint32x2_t __b, uint32_t __c)
+ {
+ return (uint32x2_t)__builtin_neon_vmla_nv2si ((int32x2_t) __a, (int32x2_t) __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_n_s16 (int16x8_t __a, int16x8_t __b, int16_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vmla_nv8hi (__a, __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_n_s32 (int32x4_t __a, int32x4_t __b, int32_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vmla_nv4si (__a, __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
+ {
+ return (float32x4_t)__builtin_neon_vmla_nv4sf (__a, __b, (__builtin_neon_sf) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_n_u16 (uint16x8_t __a, uint16x8_t __b, uint16_t __c)
+ {
+ return (uint16x8_t)__builtin_neon_vmla_nv8hi ((int16x8_t) __a, (int16x8_t) __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlaq_n_u32 (uint32x4_t __a, uint32x4_t __b, uint32_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmla_nv4si ((int32x4_t) __a, (int32x4_t) __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vmlals_nv4hi (__a, __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vmlals_nv2si (__a, __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_n_u16 (uint32x4_t __a, uint16x4_t __b, uint16_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmlalu_nv4hi ((int32x4_t) __a, (int16x4_t) __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlal_n_u32 (uint64x2_t __a, uint32x2_t __b, uint32_t __c)
+ {
+ return (uint64x2_t)__builtin_neon_vmlalu_nv2si ((int64x2_t) __a, (int32x2_t) __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlal_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vqdmlal_nv4hi (__a, __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlal_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vqdmlal_nv2si (__a, __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_n_s16 (int16x4_t __a, int16x4_t __b, int16_t __c)
+ {
+ return (int16x4_t)__builtin_neon_vmls_nv4hi (__a, __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_n_s32 (int32x2_t __a, int32x2_t __b, int32_t __c)
+ {
+ return (int32x2_t)__builtin_neon_vmls_nv2si (__a, __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
+ {
+ return (float32x2_t)__builtin_neon_vmls_nv2sf (__a, __b, (__builtin_neon_sf) __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_n_u16 (uint16x4_t __a, uint16x4_t __b, uint16_t __c)
+ {
+ return (uint16x4_t)__builtin_neon_vmls_nv4hi ((int16x4_t) __a, (int16x4_t) __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmls_n_u32 (uint32x2_t __a, uint32x2_t __b, uint32_t __c)
+ {
+ return (uint32x2_t)__builtin_neon_vmls_nv2si ((int32x2_t) __a, (int32x2_t) __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_n_s16 (int16x8_t __a, int16x8_t __b, int16_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vmls_nv8hi (__a, __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_n_s32 (int32x4_t __a, int32x4_t __b, int32_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vmls_nv4si (__a, __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
+ {
+ return (float32x4_t)__builtin_neon_vmls_nv4sf (__a, __b, (__builtin_neon_sf) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_n_u16 (uint16x8_t __a, uint16x8_t __b, uint16_t __c)
+ {
+ return (uint16x8_t)__builtin_neon_vmls_nv8hi ((int16x8_t) __a, (int16x8_t) __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsq_n_u32 (uint32x4_t __a, uint32x4_t __b, uint32_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmls_nv4si ((int32x4_t) __a, (int32x4_t) __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vmlsls_nv4hi (__a, __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vmlsls_nv2si (__a, __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_n_u16 (uint32x4_t __a, uint16x4_t __b, uint16_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vmlslu_nv4hi ((int32x4_t) __a, (int16x4_t) __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmlsl_n_u32 (uint64x2_t __a, uint32x2_t __b, uint32_t __c)
+ {
+ return (uint64x2_t)__builtin_neon_vmlslu_nv2si ((int64x2_t) __a, (int32x2_t) __b, (__builtin_neon_si) __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlsl_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vqdmlsl_nv4hi (__a, __b, (__builtin_neon_hi) __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vqdmlsl_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vqdmlsl_nv2si (__a, __b, (__builtin_neon_si) __c);
+@@ -7500,74 +8690,86 @@ vqdmlsl_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_p64 (poly64x1_t __a, poly64x1_t __b, const int __c)
+ {
+ return (poly64x1_t)__builtin_neon_vextdi (__a, __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+ {
+ return (int8x8_t)__builtin_neon_vextv8qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vextv4hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vextv2si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+ {
+ return (int64x1_t)__builtin_neon_vextdi (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_f32 (float32x2_t __a, float32x2_t __b, const int __c)
+ {
+ return (float32x2_t)__builtin_neon_vextv2sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+ {
+ return (uint8x8_t)__builtin_neon_vextv8qi ((int8x8_t) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+ {
+ return (uint16x4_t)__builtin_neon_vextv4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+ {
+ return (uint32x2_t)__builtin_neon_vextv2si ((int32x2_t) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+ {
+ return (uint64x1_t)__builtin_neon_vextdi ((int64x1_t) __a, (int64x1_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_p8 (poly8x8_t __a, poly8x8_t __b, const int __c)
+ {
+ return (poly8x8_t)__builtin_neon_vextv8qi ((int8x8_t) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vext_p16 (poly16x4_t __a, poly16x4_t __b, const int __c)
+ {
+ return (poly16x4_t)__builtin_neon_vextv4hi ((int16x4_t) __a, (int16x4_t) __b, __c);
+@@ -7575,290 +8777,338 @@ vext_p16 (poly16x4_t __a, poly16x4_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_p64 (poly64x2_t __a, poly64x2_t __b, const int __c)
+ {
+ return (poly64x2_t)__builtin_neon_vextv2di ((int64x2_t) __a, (int64x2_t) __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+ {
+ return (int8x16_t)__builtin_neon_vextv16qi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vextv8hi (__a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vextv4si (__a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+ {
+ return (int64x2_t)__builtin_neon_vextv2di (__a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_f32 (float32x4_t __a, float32x4_t __b, const int __c)
+ {
+ return (float32x4_t)__builtin_neon_vextv4sf (__a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+ {
+ return (uint8x16_t)__builtin_neon_vextv16qi ((int8x16_t) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+ {
+ return (uint16x8_t)__builtin_neon_vextv8hi ((int16x8_t) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+ {
+ return (uint32x4_t)__builtin_neon_vextv4si ((int32x4_t) __a, (int32x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+ {
+ return (uint64x2_t)__builtin_neon_vextv2di ((int64x2_t) __a, (int64x2_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_p8 (poly8x16_t __a, poly8x16_t __b, const int __c)
+ {
+ return (poly8x16_t)__builtin_neon_vextv16qi ((int8x16_t) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vextq_p16 (poly16x8_t __a, poly16x8_t __b, const int __c)
+ {
+ return (poly16x8_t)__builtin_neon_vextv8hi ((int16x8_t) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64_s8 (int8x8_t __a)
+ {
+ return (int8x8_t) __builtin_shuffle (__a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64_s16 (int16x4_t __a)
+ {
+ return (int16x4_t) __builtin_shuffle (__a, (uint16x4_t) { 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64_s32 (int32x2_t __a)
+ {
+ return (int32x2_t) __builtin_shuffle (__a, (uint32x2_t) { 1, 0 });
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64_f32 (float32x2_t __a)
+ {
+ return (float32x2_t) __builtin_shuffle (__a, (uint32x2_t) { 1, 0 });
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64_u8 (uint8x8_t __a)
+ {
+ return (uint8x8_t) __builtin_shuffle (__a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64_u16 (uint16x4_t __a)
+ {
+ return (uint16x4_t) __builtin_shuffle (__a, (uint16x4_t) { 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64_u32 (uint32x2_t __a)
+ {
+ return (uint32x2_t) __builtin_shuffle (__a, (uint32x2_t) { 1, 0 });
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64_p8 (poly8x8_t __a)
+ {
+ return (poly8x8_t) __builtin_shuffle (__a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64_p16 (poly16x4_t __a)
+ {
+ return (poly16x4_t) __builtin_shuffle (__a, (uint16x4_t) { 3, 2, 1, 0 });
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64q_s8 (int8x16_t __a)
+ {
+ return (int8x16_t) __builtin_shuffle (__a, (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64q_s16 (int16x8_t __a)
+ {
+ return (int16x8_t) __builtin_shuffle (__a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64q_s32 (int32x4_t __a)
+ {
+ return (int32x4_t) __builtin_shuffle (__a, (uint32x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64q_f32 (float32x4_t __a)
+ {
+ return (float32x4_t) __builtin_shuffle (__a, (uint32x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64q_u8 (uint8x16_t __a)
+ {
+ return (uint8x16_t) __builtin_shuffle (__a, (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64q_u16 (uint16x8_t __a)
+ {
+ return (uint16x8_t) __builtin_shuffle (__a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64q_u32 (uint32x4_t __a)
+ {
+ return (uint32x4_t) __builtin_shuffle (__a, (uint32x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64q_p8 (poly8x16_t __a)
+ {
+ return (poly8x16_t) __builtin_shuffle (__a, (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev64q_p16 (poly16x8_t __a)
+ {
+ return (poly16x8_t) __builtin_shuffle (__a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32_s8 (int8x8_t __a)
+ {
+ return (int8x8_t) __builtin_shuffle (__a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32_s16 (int16x4_t __a)
+ {
+ return (int16x4_t) __builtin_shuffle (__a, (uint16x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32_u8 (uint8x8_t __a)
+ {
+ return (uint8x8_t) __builtin_shuffle (__a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32_u16 (uint16x4_t __a)
+ {
+ return (uint16x4_t) __builtin_shuffle (__a, (uint16x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32_p8 (poly8x8_t __a)
+ {
+ return (poly8x8_t) __builtin_shuffle (__a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32_p16 (poly16x4_t __a)
+ {
+ return (poly16x4_t) __builtin_shuffle (__a, (uint16x4_t) { 1, 0, 3, 2 });
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32q_s8 (int8x16_t __a)
+ {
+ return (int8x16_t) __builtin_shuffle (__a, (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32q_s16 (int16x8_t __a)
+ {
+ return (int16x8_t) __builtin_shuffle (__a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32q_u8 (uint8x16_t __a)
+ {
+ return (uint8x16_t) __builtin_shuffle (__a, (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32q_u16 (uint16x8_t __a)
+ {
+ return (uint16x8_t) __builtin_shuffle (__a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32q_p8 (poly8x16_t __a)
+ {
+ return (poly8x16_t) __builtin_shuffle (__a, (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev32q_p16 (poly16x8_t __a)
+ {
+ return (poly16x8_t) __builtin_shuffle (__a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev16_s8 (int8x8_t __a)
+ {
+ return (int8x8_t) __builtin_shuffle (__a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev16_u8 (uint8x8_t __a)
+ {
+ return (uint8x8_t) __builtin_shuffle (__a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev16_p8 (poly8x8_t __a)
+ {
+ return (poly8x8_t) __builtin_shuffle (__a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev16q_s8 (int8x16_t __a)
+ {
+ return (int8x16_t) __builtin_shuffle (__a, (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev16q_u8 (uint8x16_t __a)
+ {
+ return (uint8x16_t) __builtin_shuffle (__a, (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vrev16q_p8 (poly8x16_t __a)
+ {
+ return (poly8x16_t) __builtin_shuffle (__a, (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
+@@ -7866,74 +9116,86 @@ vrev16q_p8 (poly8x16_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_p64 (uint64x1_t __a, poly64x1_t __b, poly64x1_t __c)
+ {
+ return (poly64x1_t)__builtin_neon_vbsldi ((int64x1_t) __a, __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_s8 (uint8x8_t __a, int8x8_t __b, int8x8_t __c)
+ {
+ return (int8x8_t)__builtin_neon_vbslv8qi ((int8x8_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_s16 (uint16x4_t __a, int16x4_t __b, int16x4_t __c)
+ {
+ return (int16x4_t)__builtin_neon_vbslv4hi ((int16x4_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_s32 (uint32x2_t __a, int32x2_t __b, int32x2_t __c)
+ {
+ return (int32x2_t)__builtin_neon_vbslv2si ((int32x2_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_s64 (uint64x1_t __a, int64x1_t __b, int64x1_t __c)
+ {
+ return (int64x1_t)__builtin_neon_vbsldi ((int64x1_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_f32 (uint32x2_t __a, float32x2_t __b, float32x2_t __c)
+ {
+ return (float32x2_t)__builtin_neon_vbslv2sf ((int32x2_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
+ {
+ return (uint8x8_t)__builtin_neon_vbslv8qi ((int8x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c)
+ {
+ return (uint16x4_t)__builtin_neon_vbslv4hi ((int16x4_t) __a, (int16x4_t) __b, (int16x4_t) __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c)
+ {
+ return (uint32x2_t)__builtin_neon_vbslv2si ((int32x2_t) __a, (int32x2_t) __b, (int32x2_t) __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_u64 (uint64x1_t __a, uint64x1_t __b, uint64x1_t __c)
+ {
+ return (uint64x1_t)__builtin_neon_vbsldi ((int64x1_t) __a, (int64x1_t) __b, (int64x1_t) __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_p8 (uint8x8_t __a, poly8x8_t __b, poly8x8_t __c)
+ {
+ return (poly8x8_t)__builtin_neon_vbslv8qi ((int8x8_t) __a, (int8x8_t) __b, (int8x8_t) __c);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbsl_p16 (uint16x4_t __a, poly16x4_t __b, poly16x4_t __c)
+ {
+ return (poly16x4_t)__builtin_neon_vbslv4hi ((int16x4_t) __a, (int16x4_t) __b, (int16x4_t) __c);
+@@ -7941,74 +9203,86 @@ vbsl_p16 (uint16x4_t __a, poly16x4_t __b, poly16x4_t __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_p64 (uint64x2_t __a, poly64x2_t __b, poly64x2_t __c)
+ {
+ return (poly64x2_t)__builtin_neon_vbslv2di ((int64x2_t) __a, (int64x2_t) __b, (int64x2_t) __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_s8 (uint8x16_t __a, int8x16_t __b, int8x16_t __c)
+ {
+ return (int8x16_t)__builtin_neon_vbslv16qi ((int8x16_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_s16 (uint16x8_t __a, int16x8_t __b, int16x8_t __c)
+ {
+ return (int16x8_t)__builtin_neon_vbslv8hi ((int16x8_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_s32 (uint32x4_t __a, int32x4_t __b, int32x4_t __c)
+ {
+ return (int32x4_t)__builtin_neon_vbslv4si ((int32x4_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_s64 (uint64x2_t __a, int64x2_t __b, int64x2_t __c)
+ {
+ return (int64x2_t)__builtin_neon_vbslv2di ((int64x2_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_f32 (uint32x4_t __a, float32x4_t __b, float32x4_t __c)
+ {
+ return (float32x4_t)__builtin_neon_vbslv4sf ((int32x4_t) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
+ {
+ return (uint8x16_t)__builtin_neon_vbslv16qi ((int8x16_t) __a, (int8x16_t) __b, (int8x16_t) __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
+ {
+ return (uint16x8_t)__builtin_neon_vbslv8hi ((int16x8_t) __a, (int16x8_t) __b, (int16x8_t) __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+ {
+ return (uint32x4_t)__builtin_neon_vbslv4si ((int32x4_t) __a, (int32x4_t) __b, (int32x4_t) __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
+ {
+ return (uint64x2_t)__builtin_neon_vbslv2di ((int64x2_t) __a, (int64x2_t) __b, (int64x2_t) __c);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_p8 (uint8x16_t __a, poly8x16_t __b, poly8x16_t __c)
+ {
+ return (poly8x16_t)__builtin_neon_vbslv16qi ((int8x16_t) __a, (int8x16_t) __b, (int8x16_t) __c);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbslq_p16 (uint16x8_t __a, poly16x8_t __b, poly16x8_t __c)
+ {
+ return (poly16x8_t)__builtin_neon_vbslv8hi ((int16x8_t) __a, (int16x8_t) __b, (int16x8_t) __c);
+@@ -8025,7 +9299,8 @@ vbslq_p16 (uint16x8_t __a, poly16x8_t __b, poly16x8_t __c)
+ vector, and will itself be loaded in reverse order (again, relative to the
+ neon intrinsics view, i.e. that would result from a "vld1" instruction). */
+
+-__extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrn_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ int8x8x2_t __rv;
+@@ -8043,7 +9318,8 @@ vtrn_s8 (int8x8_t __a, int8x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrn_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ int16x4x2_t __rv;
+@@ -8057,7 +9333,8 @@ vtrn_s16 (int16x4_t __a, int16x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrn_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ uint8x8x2_t __rv;
+@@ -8075,7 +9352,8 @@ vtrn_u8 (uint8x8_t __a, uint8x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrn_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ uint16x4x2_t __rv;
+@@ -8089,7 +9367,8 @@ vtrn_u16 (uint16x4_t __a, uint16x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrn_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ poly8x8x2_t __rv;
+@@ -8107,7 +9386,8 @@ vtrn_p8 (poly8x8_t __a, poly8x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrn_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+ poly16x4x2_t __rv;
+@@ -8121,7 +9401,8 @@ vtrn_p16 (poly16x4_t __a, poly16x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrn_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ int32x2x2_t __rv;
+@@ -8135,7 +9416,8 @@ vtrn_s32 (int32x2_t __a, int32x2_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrn_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ float32x2x2_t __rv;
+@@ -8149,7 +9431,8 @@ vtrn_f32 (float32x2_t __a, float32x2_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrn_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ uint32x2x2_t __rv;
+@@ -8163,7 +9446,8 @@ vtrn_u32 (uint32x2_t __a, uint32x2_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrnq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ int8x16x2_t __rv;
+@@ -8181,7 +9465,8 @@ vtrnq_s8 (int8x16_t __a, int8x16_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrnq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ int16x8x2_t __rv;
+@@ -8199,7 +9484,8 @@ vtrnq_s16 (int16x8_t __a, int16x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrnq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ int32x4x2_t __rv;
+@@ -8213,7 +9499,8 @@ vtrnq_s32 (int32x4_t __a, int32x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrnq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ float32x4x2_t __rv;
+@@ -8227,7 +9514,8 @@ vtrnq_f32 (float32x4_t __a, float32x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrnq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ uint8x16x2_t __rv;
+@@ -8245,7 +9533,8 @@ vtrnq_u8 (uint8x16_t __a, uint8x16_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrnq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ uint16x8x2_t __rv;
+@@ -8263,7 +9552,8 @@ vtrnq_u16 (uint16x8_t __a, uint16x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrnq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ uint32x4x2_t __rv;
+@@ -8277,7 +9567,8 @@ vtrnq_u32 (uint32x4_t __a, uint32x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrnq_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+ poly8x16x2_t __rv;
+@@ -8295,7 +9586,8 @@ vtrnq_p8 (poly8x16_t __a, poly8x16_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtrnq_p16 (poly16x8_t __a, poly16x8_t __b)
+ {
+ poly16x8x2_t __rv;
+@@ -8313,7 +9605,8 @@ vtrnq_p16 (poly16x8_t __a, poly16x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzip_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ int8x8x2_t __rv;
+@@ -8331,7 +9624,8 @@ vzip_s8 (int8x8_t __a, int8x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzip_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ int16x4x2_t __rv;
+@@ -8345,7 +9639,8 @@ vzip_s16 (int16x4_t __a, int16x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzip_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ uint8x8x2_t __rv;
+@@ -8363,7 +9658,8 @@ vzip_u8 (uint8x8_t __a, uint8x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzip_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ uint16x4x2_t __rv;
+@@ -8377,7 +9673,8 @@ vzip_u16 (uint16x4_t __a, uint16x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzip_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ poly8x8x2_t __rv;
+@@ -8395,7 +9692,8 @@ vzip_p8 (poly8x8_t __a, poly8x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzip_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+ poly16x4x2_t __rv;
+@@ -8409,7 +9707,8 @@ vzip_p16 (poly16x4_t __a, poly16x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzip_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ int32x2x2_t __rv;
+@@ -8423,7 +9722,8 @@ vzip_s32 (int32x2_t __a, int32x2_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzip_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ float32x2x2_t __rv;
+@@ -8437,7 +9737,8 @@ vzip_f32 (float32x2_t __a, float32x2_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzip_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ uint32x2x2_t __rv;
+@@ -8451,7 +9752,8 @@ vzip_u32 (uint32x2_t __a, uint32x2_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzipq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ int8x16x2_t __rv;
+@@ -8469,7 +9771,8 @@ vzipq_s8 (int8x16_t __a, int8x16_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzipq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ int16x8x2_t __rv;
+@@ -8487,7 +9790,8 @@ vzipq_s16 (int16x8_t __a, int16x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzipq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ int32x4x2_t __rv;
+@@ -8501,7 +9805,8 @@ vzipq_s32 (int32x4_t __a, int32x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzipq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ float32x4x2_t __rv;
+@@ -8515,7 +9820,8 @@ vzipq_f32 (float32x4_t __a, float32x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzipq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ uint8x16x2_t __rv;
+@@ -8533,7 +9839,8 @@ vzipq_u8 (uint8x16_t __a, uint8x16_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzipq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ uint16x8x2_t __rv;
+@@ -8551,7 +9858,8 @@ vzipq_u16 (uint16x8_t __a, uint16x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzipq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ uint32x4x2_t __rv;
+@@ -8565,7 +9873,8 @@ vzipq_u32 (uint32x4_t __a, uint32x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzipq_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+ poly8x16x2_t __rv;
+@@ -8583,7 +9892,8 @@ vzipq_p8 (poly8x16_t __a, poly8x16_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vzipq_p16 (poly16x8_t __a, poly16x8_t __b)
+ {
+ poly16x8x2_t __rv;
+@@ -8601,7 +9911,8 @@ vzipq_p16 (poly16x8_t __a, poly16x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzp_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ int8x8x2_t __rv;
+@@ -8619,7 +9930,8 @@ vuzp_s8 (int8x8_t __a, int8x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzp_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ int16x4x2_t __rv;
+@@ -8633,7 +9945,8 @@ vuzp_s16 (int16x4_t __a, int16x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzp_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ int32x2x2_t __rv;
+@@ -8647,7 +9960,8 @@ vuzp_s32 (int32x2_t __a, int32x2_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzp_f32 (float32x2_t __a, float32x2_t __b)
+ {
+ float32x2x2_t __rv;
+@@ -8661,7 +9975,8 @@ vuzp_f32 (float32x2_t __a, float32x2_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzp_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ uint8x8x2_t __rv;
+@@ -8679,7 +9994,8 @@ vuzp_u8 (uint8x8_t __a, uint8x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzp_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ uint16x4x2_t __rv;
+@@ -8693,7 +10009,8 @@ vuzp_u16 (uint16x4_t __a, uint16x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzp_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ uint32x2x2_t __rv;
+@@ -8707,7 +10024,8 @@ vuzp_u32 (uint32x2_t __a, uint32x2_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzp_p8 (poly8x8_t __a, poly8x8_t __b)
+ {
+ poly8x8x2_t __rv;
+@@ -8725,7 +10043,8 @@ vuzp_p8 (poly8x8_t __a, poly8x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzp_p16 (poly16x4_t __a, poly16x4_t __b)
+ {
+ poly16x4x2_t __rv;
+@@ -8739,7 +10058,8 @@ vuzp_p16 (poly16x4_t __a, poly16x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzpq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ int8x16x2_t __rv;
+@@ -8757,7 +10077,8 @@ vuzpq_s8 (int8x16_t __a, int8x16_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzpq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ int16x8x2_t __rv;
+@@ -8775,7 +10096,8 @@ vuzpq_s16 (int16x8_t __a, int16x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzpq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ int32x4x2_t __rv;
+@@ -8789,7 +10111,8 @@ vuzpq_s32 (int32x4_t __a, int32x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzpq_f32 (float32x4_t __a, float32x4_t __b)
+ {
+ float32x4x2_t __rv;
+@@ -8803,7 +10126,8 @@ vuzpq_f32 (float32x4_t __a, float32x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzpq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ uint8x16x2_t __rv;
+@@ -8821,7 +10145,8 @@ vuzpq_u8 (uint8x16_t __a, uint8x16_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzpq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ uint16x8x2_t __rv;
+@@ -8839,7 +10164,8 @@ vuzpq_u16 (uint16x8_t __a, uint16x8_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzpq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ uint32x4x2_t __rv;
+@@ -8853,7 +10179,8 @@ vuzpq_u32 (uint32x4_t __a, uint32x4_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzpq_p8 (poly8x16_t __a, poly8x16_t __b)
+ {
+ poly8x16x2_t __rv;
+@@ -8871,7 +10198,8 @@ vuzpq_p8 (poly8x16_t __a, poly8x16_t __b)
+ return __rv;
+ }
+
+-__extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vuzpq_p16 (poly16x8_t __a, poly16x8_t __b)
+ {
+ poly16x8x2_t __rv;
+@@ -8891,82 +10219,95 @@ vuzpq_p16 (poly16x8_t __a, poly16x8_t __b)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_p64 (const poly64_t * __a)
+ {
+ return (poly64x1_t)__builtin_neon_vld1di ((const __builtin_neon_di *) __a);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_s8 (const int8_t * __a)
+ {
+ return (int8x8_t)__builtin_neon_vld1v8qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_s16 (const int16_t * __a)
+ {
+ return (int16x4_t)__builtin_neon_vld1v4hi ((const __builtin_neon_hi *) __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_s32 (const int32_t * __a)
+ {
+ return (int32x2_t)__builtin_neon_vld1v2si ((const __builtin_neon_si *) __a);
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_s64 (const int64_t * __a)
+ {
+ return (int64x1_t)__builtin_neon_vld1di ((const __builtin_neon_di *) __a);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_f16 (const float16_t * __a)
+ {
+ return __builtin_neon_vld1v4hf (__a);
+ }
+ #endif
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_f32 (const float32_t * __a)
+ {
+ return (float32x2_t)__builtin_neon_vld1v2sf ((const __builtin_neon_sf *) __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_u8 (const uint8_t * __a)
+ {
+ return (uint8x8_t)__builtin_neon_vld1v8qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_u16 (const uint16_t * __a)
+ {
+ return (uint16x4_t)__builtin_neon_vld1v4hi ((const __builtin_neon_hi *) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_u32 (const uint32_t * __a)
+ {
+ return (uint32x2_t)__builtin_neon_vld1v2si ((const __builtin_neon_si *) __a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_u64 (const uint64_t * __a)
+ {
+ return (uint64x1_t)__builtin_neon_vld1di ((const __builtin_neon_di *) __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_p8 (const poly8_t * __a)
+ {
+ return (poly8x8_t)__builtin_neon_vld1v8qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_p16 (const poly16_t * __a)
+ {
+ return (poly16x4_t)__builtin_neon_vld1v4hi ((const __builtin_neon_hi *) __a);
+@@ -8974,144 +10315,167 @@ vld1_p16 (const poly16_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_p64 (const poly64_t * __a)
+ {
+ return (poly64x2_t)__builtin_neon_vld1v2di ((const __builtin_neon_di *) __a);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_s8 (const int8_t * __a)
+ {
+ return (int8x16_t)__builtin_neon_vld1v16qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_s16 (const int16_t * __a)
+ {
+ return (int16x8_t)__builtin_neon_vld1v8hi ((const __builtin_neon_hi *) __a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_s32 (const int32_t * __a)
+ {
+ return (int32x4_t)__builtin_neon_vld1v4si ((const __builtin_neon_si *) __a);
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_s64 (const int64_t * __a)
+ {
+ return (int64x2_t)__builtin_neon_vld1v2di ((const __builtin_neon_di *) __a);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_f16 (const float16_t * __a)
+ {
+ return __builtin_neon_vld1v8hf (__a);
+ }
+ #endif
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_f32 (const float32_t * __a)
+ {
+ return (float32x4_t)__builtin_neon_vld1v4sf ((const __builtin_neon_sf *) __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_u8 (const uint8_t * __a)
+ {
+ return (uint8x16_t)__builtin_neon_vld1v16qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_u16 (const uint16_t * __a)
+ {
+ return (uint16x8_t)__builtin_neon_vld1v8hi ((const __builtin_neon_hi *) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_u32 (const uint32_t * __a)
+ {
+ return (uint32x4_t)__builtin_neon_vld1v4si ((const __builtin_neon_si *) __a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_u64 (const uint64_t * __a)
+ {
+ return (uint64x2_t)__builtin_neon_vld1v2di ((const __builtin_neon_di *) __a);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_p8 (const poly8_t * __a)
+ {
+ return (poly8x16_t)__builtin_neon_vld1v16qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_p16 (const poly16_t * __a)
+ {
+ return (poly16x8_t)__builtin_neon_vld1v8hi ((const __builtin_neon_hi *) __a);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_s8 (const int8_t * __a, int8x8_t __b, const int __c)
+ {
+ return (int8x8_t)__builtin_neon_vld1_lanev8qi ((const __builtin_neon_qi *) __a, __b, __c);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_s16 (const int16_t * __a, int16x4_t __b, const int __c)
+ {
+ return (int16x4_t)__builtin_neon_vld1_lanev4hi ((const __builtin_neon_hi *) __a, __b, __c);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_s32 (const int32_t * __a, int32x2_t __b, const int __c)
+ {
+ return (int32x2_t)__builtin_neon_vld1_lanev2si ((const __builtin_neon_si *) __a, __b, __c);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_f16 (const float16_t * __a, float16x4_t __b, const int __c)
+ {
+ return vset_lane_f16 (*__a, __b, __c);
+ }
+ #endif
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_f32 (const float32_t * __a, float32x2_t __b, const int __c)
+ {
+ return (float32x2_t)__builtin_neon_vld1_lanev2sf ((const __builtin_neon_sf *) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_u8 (const uint8_t * __a, uint8x8_t __b, const int __c)
+ {
+ return (uint8x8_t)__builtin_neon_vld1_lanev8qi ((const __builtin_neon_qi *) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_u16 (const uint16_t * __a, uint16x4_t __b, const int __c)
+ {
+ return (uint16x4_t)__builtin_neon_vld1_lanev4hi ((const __builtin_neon_hi *) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_u32 (const uint32_t * __a, uint32x2_t __b, const int __c)
+ {
+ return (uint32x2_t)__builtin_neon_vld1_lanev2si ((const __builtin_neon_si *) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_p8 (const poly8_t * __a, poly8x8_t __b, const int __c)
+ {
+ return (poly8x8_t)__builtin_neon_vld1_lanev8qi ((const __builtin_neon_qi *) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_p16 (const poly16_t * __a, poly16x4_t __b, const int __c)
+ {
+ return (poly16x4_t)__builtin_neon_vld1_lanev4hi ((const __builtin_neon_hi *) __a, (int16x4_t) __b, __c);
+@@ -9119,82 +10483,95 @@ vld1_lane_p16 (const poly16_t * __a, poly16x4_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_p64 (const poly64_t * __a, poly64x1_t __b, const int __c)
+ {
+ return (poly64x1_t)__builtin_neon_vld1_lanedi ((const __builtin_neon_di *) __a, __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_s64 (const int64_t * __a, int64x1_t __b, const int __c)
+ {
+ return (int64x1_t)__builtin_neon_vld1_lanedi ((const __builtin_neon_di *) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_lane_u64 (const uint64_t * __a, uint64x1_t __b, const int __c)
+ {
+ return (uint64x1_t)__builtin_neon_vld1_lanedi ((const __builtin_neon_di *) __a, (int64x1_t) __b, __c);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_s8 (const int8_t * __a, int8x16_t __b, const int __c)
+ {
+ return (int8x16_t)__builtin_neon_vld1_lanev16qi ((const __builtin_neon_qi *) __a, __b, __c);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_s16 (const int16_t * __a, int16x8_t __b, const int __c)
+ {
+ return (int16x8_t)__builtin_neon_vld1_lanev8hi ((const __builtin_neon_hi *) __a, __b, __c);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_s32 (const int32_t * __a, int32x4_t __b, const int __c)
+ {
+ return (int32x4_t)__builtin_neon_vld1_lanev4si ((const __builtin_neon_si *) __a, __b, __c);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_f16 (const float16_t * __a, float16x8_t __b, const int __c)
+ {
+ return vsetq_lane_f16 (*__a, __b, __c);
+ }
+ #endif
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_f32 (const float32_t * __a, float32x4_t __b, const int __c)
+ {
+ return (float32x4_t)__builtin_neon_vld1_lanev4sf ((const __builtin_neon_sf *) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_u8 (const uint8_t * __a, uint8x16_t __b, const int __c)
+ {
+ return (uint8x16_t)__builtin_neon_vld1_lanev16qi ((const __builtin_neon_qi *) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_u16 (const uint16_t * __a, uint16x8_t __b, const int __c)
+ {
+ return (uint16x8_t)__builtin_neon_vld1_lanev8hi ((const __builtin_neon_hi *) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_u32 (const uint32_t * __a, uint32x4_t __b, const int __c)
+ {
+ return (uint32x4_t)__builtin_neon_vld1_lanev4si ((const __builtin_neon_si *) __a, (int32x4_t) __b, __c);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_p8 (const poly8_t * __a, poly8x16_t __b, const int __c)
+ {
+ return (poly8x16_t)__builtin_neon_vld1_lanev16qi ((const __builtin_neon_qi *) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_p16 (const poly16_t * __a, poly16x8_t __b, const int __c)
+ {
+ return (poly16x8_t)__builtin_neon_vld1_lanev8hi ((const __builtin_neon_hi *) __a, (int16x8_t) __b, __c);
+@@ -9202,45 +10579,52 @@ vld1q_lane_p16 (const poly16_t * __a, poly16x8_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_p64 (const poly64_t * __a, poly64x2_t __b, const int __c)
+ {
+ return (poly64x2_t)__builtin_neon_vld1_lanev2di ((const __builtin_neon_di *) __a, (int64x2_t) __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_s64 (const int64_t * __a, int64x2_t __b, const int __c)
+ {
+ return (int64x2_t)__builtin_neon_vld1_lanev2di ((const __builtin_neon_di *) __a, __b, __c);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_lane_u64 (const uint64_t * __a, uint64x2_t __b, const int __c)
+ {
+ return (uint64x2_t)__builtin_neon_vld1_lanev2di ((const __builtin_neon_di *) __a, (int64x2_t) __b, __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_s8 (const int8_t * __a)
+ {
+ return (int8x8_t)__builtin_neon_vld1_dupv8qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_s16 (const int16_t * __a)
+ {
+ return (int16x4_t)__builtin_neon_vld1_dupv4hi ((const __builtin_neon_hi *) __a);
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_s32 (const int32_t * __a)
+ {
+ return (int32x2_t)__builtin_neon_vld1_dupv2si ((const __builtin_neon_si *) __a);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_f16 (const float16_t * __a)
+ {
+ float16_t __f = *__a;
+@@ -9248,37 +10632,43 @@ vld1_dup_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_f32 (const float32_t * __a)
+ {
+ return (float32x2_t)__builtin_neon_vld1_dupv2sf ((const __builtin_neon_sf *) __a);
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_u8 (const uint8_t * __a)
+ {
+ return (uint8x8_t)__builtin_neon_vld1_dupv8qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_u16 (const uint16_t * __a)
+ {
+ return (uint16x4_t)__builtin_neon_vld1_dupv4hi ((const __builtin_neon_hi *) __a);
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_u32 (const uint32_t * __a)
+ {
+ return (uint32x2_t)__builtin_neon_vld1_dupv2si ((const __builtin_neon_si *) __a);
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_p8 (const poly8_t * __a)
+ {
+ return (poly8x8_t)__builtin_neon_vld1_dupv8qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_p16 (const poly16_t * __a)
+ {
+ return (poly16x4_t)__builtin_neon_vld1_dupv4hi ((const __builtin_neon_hi *) __a);
+@@ -9286,45 +10676,52 @@ vld1_dup_p16 (const poly16_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_p64 (const poly64_t * __a)
+ {
+ return (poly64x1_t)__builtin_neon_vld1_dupdi ((const __builtin_neon_di *) __a);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_s64 (const int64_t * __a)
+ {
+ return (int64x1_t)__builtin_neon_vld1_dupdi ((const __builtin_neon_di *) __a);
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1_dup_u64 (const uint64_t * __a)
+ {
+ return (uint64x1_t)__builtin_neon_vld1_dupdi ((const __builtin_neon_di *) __a);
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_s8 (const int8_t * __a)
+ {
+ return (int8x16_t)__builtin_neon_vld1_dupv16qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_s16 (const int16_t * __a)
+ {
+ return (int16x8_t)__builtin_neon_vld1_dupv8hi ((const __builtin_neon_hi *) __a);
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_s32 (const int32_t * __a)
+ {
+ return (int32x4_t)__builtin_neon_vld1_dupv4si ((const __builtin_neon_si *) __a);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_f16 (const float16_t * __a)
+ {
+ float16_t __f = *__a;
+@@ -9332,37 +10729,43 @@ vld1q_dup_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_f32 (const float32_t * __a)
+ {
+ return (float32x4_t)__builtin_neon_vld1_dupv4sf ((const __builtin_neon_sf *) __a);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_u8 (const uint8_t * __a)
+ {
+ return (uint8x16_t)__builtin_neon_vld1_dupv16qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_u16 (const uint16_t * __a)
+ {
+ return (uint16x8_t)__builtin_neon_vld1_dupv8hi ((const __builtin_neon_hi *) __a);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_u32 (const uint32_t * __a)
+ {
+ return (uint32x4_t)__builtin_neon_vld1_dupv4si ((const __builtin_neon_si *) __a);
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_p8 (const poly8_t * __a)
+ {
+ return (poly8x16_t)__builtin_neon_vld1_dupv16qi ((const __builtin_neon_qi *) __a);
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_p16 (const poly16_t * __a)
+ {
+ return (poly16x8_t)__builtin_neon_vld1_dupv8hi ((const __builtin_neon_hi *) __a);
+@@ -9370,20 +10773,23 @@ vld1q_dup_p16 (const poly16_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_p64 (const poly64_t * __a)
+ {
+ return (poly64x2_t)__builtin_neon_vld1_dupv2di ((const __builtin_neon_di *) __a);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_s64 (const int64_t * __a)
+ {
+ return (int64x2_t)__builtin_neon_vld1_dupv2di ((const __builtin_neon_di *) __a);
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld1q_dup_u64 (const uint64_t * __a)
+ {
+ return (uint64x2_t)__builtin_neon_vld1_dupv2di ((const __builtin_neon_di *) __a);
+@@ -9391,82 +10797,95 @@ vld1q_dup_u64 (const uint64_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_p64 (poly64_t * __a, poly64x1_t __b)
+ {
+ __builtin_neon_vst1di ((__builtin_neon_di *) __a, __b);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_s8 (int8_t * __a, int8x8_t __b)
+ {
+ __builtin_neon_vst1v8qi ((__builtin_neon_qi *) __a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_s16 (int16_t * __a, int16x4_t __b)
+ {
+ __builtin_neon_vst1v4hi ((__builtin_neon_hi *) __a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_s32 (int32_t * __a, int32x2_t __b)
+ {
+ __builtin_neon_vst1v2si ((__builtin_neon_si *) __a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_s64 (int64_t * __a, int64x1_t __b)
+ {
+ __builtin_neon_vst1di ((__builtin_neon_di *) __a, __b);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_f16 (float16_t * __a, float16x4_t __b)
+ {
+ __builtin_neon_vst1v4hf (__a, __b);
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_f32 (float32_t * __a, float32x2_t __b)
+ {
+ __builtin_neon_vst1v2sf ((__builtin_neon_sf *) __a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_u8 (uint8_t * __a, uint8x8_t __b)
+ {
+ __builtin_neon_vst1v8qi ((__builtin_neon_qi *) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_u16 (uint16_t * __a, uint16x4_t __b)
+ {
+ __builtin_neon_vst1v4hi ((__builtin_neon_hi *) __a, (int16x4_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_u32 (uint32_t * __a, uint32x2_t __b)
+ {
+ __builtin_neon_vst1v2si ((__builtin_neon_si *) __a, (int32x2_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_u64 (uint64_t * __a, uint64x1_t __b)
+ {
+ __builtin_neon_vst1di ((__builtin_neon_di *) __a, (int64x1_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_p8 (poly8_t * __a, poly8x8_t __b)
+ {
+ __builtin_neon_vst1v8qi ((__builtin_neon_qi *) __a, (int8x8_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_p16 (poly16_t * __a, poly16x4_t __b)
+ {
+ __builtin_neon_vst1v4hi ((__builtin_neon_hi *) __a, (int16x4_t) __b);
+@@ -9474,144 +10893,167 @@ vst1_p16 (poly16_t * __a, poly16x4_t __b)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_p64 (poly64_t * __a, poly64x2_t __b)
+ {
+ __builtin_neon_vst1v2di ((__builtin_neon_di *) __a, (int64x2_t) __b);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_s8 (int8_t * __a, int8x16_t __b)
+ {
+ __builtin_neon_vst1v16qi ((__builtin_neon_qi *) __a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_s16 (int16_t * __a, int16x8_t __b)
+ {
+ __builtin_neon_vst1v8hi ((__builtin_neon_hi *) __a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_s32 (int32_t * __a, int32x4_t __b)
+ {
+ __builtin_neon_vst1v4si ((__builtin_neon_si *) __a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_s64 (int64_t * __a, int64x2_t __b)
+ {
+ __builtin_neon_vst1v2di ((__builtin_neon_di *) __a, __b);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_f16 (float16_t * __a, float16x8_t __b)
+ {
+ __builtin_neon_vst1v8hf (__a, __b);
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_f32 (float32_t * __a, float32x4_t __b)
+ {
+ __builtin_neon_vst1v4sf ((__builtin_neon_sf *) __a, __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_u8 (uint8_t * __a, uint8x16_t __b)
+ {
+ __builtin_neon_vst1v16qi ((__builtin_neon_qi *) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_u16 (uint16_t * __a, uint16x8_t __b)
+ {
+ __builtin_neon_vst1v8hi ((__builtin_neon_hi *) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_u32 (uint32_t * __a, uint32x4_t __b)
+ {
+ __builtin_neon_vst1v4si ((__builtin_neon_si *) __a, (int32x4_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_u64 (uint64_t * __a, uint64x2_t __b)
+ {
+ __builtin_neon_vst1v2di ((__builtin_neon_di *) __a, (int64x2_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_p8 (poly8_t * __a, poly8x16_t __b)
+ {
+ __builtin_neon_vst1v16qi ((__builtin_neon_qi *) __a, (int8x16_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_p16 (poly16_t * __a, poly16x8_t __b)
+ {
+ __builtin_neon_vst1v8hi ((__builtin_neon_hi *) __a, (int16x8_t) __b);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_s8 (int8_t * __a, int8x8_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev8qi ((__builtin_neon_qi *) __a, __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_s16 (int16_t * __a, int16x4_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev4hi ((__builtin_neon_hi *) __a, __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_s32 (int32_t * __a, int32x2_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev2si ((__builtin_neon_si *) __a, __b, __c);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_f16 (float16_t * __a, float16x4_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev4hf (__a, __b, __c);
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_f32 (float32_t * __a, float32x2_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev2sf ((__builtin_neon_sf *) __a, __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_u8 (uint8_t * __a, uint8x8_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev8qi ((__builtin_neon_qi *) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_u16 (uint16_t * __a, uint16x4_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev4hi ((__builtin_neon_hi *) __a, (int16x4_t) __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_u32 (uint32_t * __a, uint32x2_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev2si ((__builtin_neon_si *) __a, (int32x2_t) __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_p8 (poly8_t * __a, poly8x8_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev8qi ((__builtin_neon_qi *) __a, (int8x8_t) __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_p16 (poly16_t * __a, poly16x4_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev4hi ((__builtin_neon_hi *) __a, (int16x4_t) __b, __c);
+@@ -9619,82 +11061,95 @@ vst1_lane_p16 (poly16_t * __a, poly16x4_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_p64 (poly64_t * __a, poly64x1_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanedi ((__builtin_neon_di *) __a, __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_s64 (int64_t * __a, int64x1_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanedi ((__builtin_neon_di *) __a, __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1_lane_u64 (uint64_t * __a, uint64x1_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanedi ((__builtin_neon_di *) __a, (int64x1_t) __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_s8 (int8_t * __a, int8x16_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev16qi ((__builtin_neon_qi *) __a, __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_s16 (int16_t * __a, int16x8_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev8hi ((__builtin_neon_hi *) __a, __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_s32 (int32_t * __a, int32x4_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev4si ((__builtin_neon_si *) __a, __b, __c);
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_f16 (float16_t * __a, float16x8_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev8hf (__a, __b, __c);
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_f32 (float32_t * __a, float32x4_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev4sf ((__builtin_neon_sf *) __a, __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_u8 (uint8_t * __a, uint8x16_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev16qi ((__builtin_neon_qi *) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_u16 (uint16_t * __a, uint16x8_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev8hi ((__builtin_neon_hi *) __a, (int16x8_t) __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_u32 (uint32_t * __a, uint32x4_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev4si ((__builtin_neon_si *) __a, (int32x4_t) __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_p8 (poly8_t * __a, poly8x16_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev16qi ((__builtin_neon_qi *) __a, (int8x16_t) __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_p16 (poly16_t * __a, poly16x8_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev8hi ((__builtin_neon_hi *) __a, (int16x8_t) __b, __c);
+@@ -9702,26 +11157,30 @@ vst1q_lane_p16 (poly16_t * __a, poly16x8_t __b, const int __c)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_p64 (poly64_t * __a, poly64x2_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev2di ((__builtin_neon_di *) __a, (int64x2_t) __b, __c);
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_s64 (int64_t * __a, int64x2_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev2di ((__builtin_neon_di *) __a, __b, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst1q_lane_u64 (uint64_t * __a, uint64x2_t __b, const int __c)
+ {
+ __builtin_neon_vst1_lanev2di ((__builtin_neon_di *) __a, (int64x2_t) __b, __c);
+ }
+
+-__extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_s8 (const int8_t * __a)
+ {
+ union { int8x8x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9729,7 +11188,8 @@ vld2_s8 (const int8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_s16 (const int16_t * __a)
+ {
+ union { int16x4x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9737,7 +11197,8 @@ vld2_s16 (const int16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_s32 (const int32_t * __a)
+ {
+ union { int32x2x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9746,7 +11207,8 @@ vld2_s32 (const int32_t * __a)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_f16 (const float16_t * __a)
+ {
+ union { float16x4x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9755,7 +11217,8 @@ vld2_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_f32 (const float32_t * __a)
+ {
+ union { float32x2x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9763,7 +11226,8 @@ vld2_f32 (const float32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_u8 (const uint8_t * __a)
+ {
+ union { uint8x8x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9771,7 +11235,8 @@ vld2_u8 (const uint8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_u16 (const uint16_t * __a)
+ {
+ union { uint16x4x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9779,7 +11244,8 @@ vld2_u16 (const uint16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_u32 (const uint32_t * __a)
+ {
+ union { uint32x2x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9787,7 +11253,8 @@ vld2_u32 (const uint32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_p8 (const poly8_t * __a)
+ {
+ union { poly8x8x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9795,7 +11262,8 @@ vld2_p8 (const poly8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_p16 (const poly16_t * __a)
+ {
+ union { poly16x4x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9805,7 +11273,8 @@ vld2_p16 (const poly16_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_p64 (const poly64_t * __a)
+ {
+ union { poly64x1x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9814,7 +11283,8 @@ vld2_p64 (const poly64_t * __a)
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_s64 (const int64_t * __a)
+ {
+ union { int64x1x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9822,7 +11292,8 @@ vld2_s64 (const int64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint64x1x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_u64 (const uint64_t * __a)
+ {
+ union { uint64x1x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -9830,7 +11301,8 @@ vld2_u64 (const uint64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_s8 (const int8_t * __a)
+ {
+ union { int8x16x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9838,7 +11310,8 @@ vld2q_s8 (const int8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_s16 (const int16_t * __a)
+ {
+ union { int16x8x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9846,7 +11319,8 @@ vld2q_s16 (const int16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_s32 (const int32_t * __a)
+ {
+ union { int32x4x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9855,7 +11329,8 @@ vld2q_s32 (const int32_t * __a)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_f16 (const float16_t * __a)
+ {
+ union { float16x8x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9864,7 +11339,8 @@ vld2q_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_f32 (const float32_t * __a)
+ {
+ union { float32x4x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9872,7 +11348,8 @@ vld2q_f32 (const float32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_u8 (const uint8_t * __a)
+ {
+ union { uint8x16x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9880,7 +11357,8 @@ vld2q_u8 (const uint8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_u16 (const uint16_t * __a)
+ {
+ union { uint16x8x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9888,7 +11366,8 @@ vld2q_u16 (const uint16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_u32 (const uint32_t * __a)
+ {
+ union { uint32x4x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9896,7 +11375,8 @@ vld2q_u32 (const uint32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_p8 (const poly8_t * __a)
+ {
+ union { poly8x16x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9904,7 +11384,8 @@ vld2q_p8 (const poly8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_p16 (const poly16_t * __a)
+ {
+ union { poly16x8x2_t __i; __builtin_neon_oi __o; } __rv;
+@@ -9912,7 +11393,8 @@ vld2q_p16 (const poly16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_s8 (const int8_t * __a, int8x8x2_t __b, const int __c)
+ {
+ union { int8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -9921,7 +11403,8 @@ vld2_lane_s8 (const int8_t * __a, int8x8x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_s16 (const int16_t * __a, int16x4x2_t __b, const int __c)
+ {
+ union { int16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -9930,7 +11413,8 @@ vld2_lane_s16 (const int16_t * __a, int16x4x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_s32 (const int32_t * __a, int32x2x2_t __b, const int __c)
+ {
+ union { int32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -9940,7 +11424,8 @@ vld2_lane_s32 (const int32_t * __a, int32x2x2_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_f16 (const float16_t * __a, float16x4x2_t __b, const int __c)
+ {
+ union { float16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -9950,7 +11435,8 @@ vld2_lane_f16 (const float16_t * __a, float16x4x2_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_f32 (const float32_t * __a, float32x2x2_t __b, const int __c)
+ {
+ union { float32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -9959,7 +11445,8 @@ vld2_lane_f32 (const float32_t * __a, float32x2x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_u8 (const uint8_t * __a, uint8x8x2_t __b, const int __c)
+ {
+ union { uint8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -9968,7 +11455,8 @@ vld2_lane_u8 (const uint8_t * __a, uint8x8x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_u16 (const uint16_t * __a, uint16x4x2_t __b, const int __c)
+ {
+ union { uint16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -9977,7 +11465,8 @@ vld2_lane_u16 (const uint16_t * __a, uint16x4x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_u32 (const uint32_t * __a, uint32x2x2_t __b, const int __c)
+ {
+ union { uint32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -9986,7 +11475,8 @@ vld2_lane_u32 (const uint32_t * __a, uint32x2x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_p8 (const poly8_t * __a, poly8x8x2_t __b, const int __c)
+ {
+ union { poly8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -9995,7 +11485,8 @@ vld2_lane_p8 (const poly8_t * __a, poly8x8x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_lane_p16 (const poly16_t * __a, poly16x4x2_t __b, const int __c)
+ {
+ union { poly16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -10004,7 +11495,8 @@ vld2_lane_p16 (const poly16_t * __a, poly16x4x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_lane_s16 (const int16_t * __a, int16x8x2_t __b, const int __c)
+ {
+ union { int16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10013,7 +11505,8 @@ vld2q_lane_s16 (const int16_t * __a, int16x8x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_lane_s32 (const int32_t * __a, int32x4x2_t __b, const int __c)
+ {
+ union { int32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10023,7 +11516,8 @@ vld2q_lane_s32 (const int32_t * __a, int32x4x2_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_lane_f16 (const float16_t * __a, float16x8x2_t __b, const int __c)
+ {
+ union { float16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10033,7 +11527,8 @@ vld2q_lane_f16 (const float16_t * __a, float16x8x2_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_lane_f32 (const float32_t * __a, float32x4x2_t __b, const int __c)
+ {
+ union { float32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10042,7 +11537,8 @@ vld2q_lane_f32 (const float32_t * __a, float32x4x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_lane_u16 (const uint16_t * __a, uint16x8x2_t __b, const int __c)
+ {
+ union { uint16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10051,7 +11547,8 @@ vld2q_lane_u16 (const uint16_t * __a, uint16x8x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_lane_u32 (const uint32_t * __a, uint32x4x2_t __b, const int __c)
+ {
+ union { uint32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10060,7 +11557,8 @@ vld2q_lane_u32 (const uint32_t * __a, uint32x4x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2q_lane_p16 (const poly16_t * __a, poly16x8x2_t __b, const int __c)
+ {
+ union { poly16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10069,7 +11567,8 @@ vld2q_lane_p16 (const poly16_t * __a, poly16x8x2_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_s8 (const int8_t * __a)
+ {
+ union { int8x8x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10077,7 +11576,8 @@ vld2_dup_s8 (const int8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_s16 (const int16_t * __a)
+ {
+ union { int16x4x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10085,7 +11585,8 @@ vld2_dup_s16 (const int16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_s32 (const int32_t * __a)
+ {
+ union { int32x2x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10094,7 +11595,8 @@ vld2_dup_s32 (const int32_t * __a)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_f16 (const float16_t * __a)
+ {
+ union { float16x4x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10103,7 +11605,8 @@ vld2_dup_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_f32 (const float32_t * __a)
+ {
+ union { float32x2x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10111,7 +11614,8 @@ vld2_dup_f32 (const float32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_u8 (const uint8_t * __a)
+ {
+ union { uint8x8x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10119,7 +11623,8 @@ vld2_dup_u8 (const uint8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_u16 (const uint16_t * __a)
+ {
+ union { uint16x4x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10127,7 +11632,8 @@ vld2_dup_u16 (const uint16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_u32 (const uint32_t * __a)
+ {
+ union { uint32x2x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10135,7 +11641,8 @@ vld2_dup_u32 (const uint32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_p8 (const poly8_t * __a)
+ {
+ union { poly8x8x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10143,7 +11650,8 @@ vld2_dup_p8 (const poly8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_p16 (const poly16_t * __a)
+ {
+ union { poly16x4x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10153,7 +11661,8 @@ vld2_dup_p16 (const poly16_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_p64 (const poly64_t * __a)
+ {
+ union { poly64x1x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10162,7 +11671,8 @@ vld2_dup_p64 (const poly64_t * __a)
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_s64 (const int64_t * __a)
+ {
+ union { int64x1x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10170,7 +11680,8 @@ vld2_dup_s64 (const int64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint64x1x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld2_dup_u64 (const uint64_t * __a)
+ {
+ union { uint64x1x2_t __i; __builtin_neon_ti __o; } __rv;
+@@ -10178,21 +11689,24 @@ vld2_dup_u64 (const uint64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_s8 (int8_t * __a, int8x8x2_t __b)
+ {
+ union { int8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2v8qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_s16 (int16_t * __a, int16x4x2_t __b)
+ {
+ union { int16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2v4hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_s32 (int32_t * __a, int32x2x2_t __b)
+ {
+ union { int32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -10200,7 +11714,8 @@ vst2_s32 (int32_t * __a, int32x2x2_t __b)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_f16 (float16_t * __a, float16x4x2_t __b)
+ {
+ union { float16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -10208,42 +11723,48 @@ vst2_f16 (float16_t * __a, float16x4x2_t __b)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_f32 (float32_t * __a, float32x2x2_t __b)
+ {
+ union { float32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2v2sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_u8 (uint8_t * __a, uint8x8x2_t __b)
+ {
+ union { uint8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2v8qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_u16 (uint16_t * __a, uint16x4x2_t __b)
+ {
+ union { uint16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2v4hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_u32 (uint32_t * __a, uint32x2x2_t __b)
+ {
+ union { uint32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2v2si ((__builtin_neon_si *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_p8 (poly8_t * __a, poly8x8x2_t __b)
+ {
+ union { poly8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2v8qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_p16 (poly16_t * __a, poly16x4x2_t __b)
+ {
+ union { poly16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -10252,7 +11773,8 @@ vst2_p16 (poly16_t * __a, poly16x4x2_t __b)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_p64 (poly64_t * __a, poly64x1x2_t __b)
+ {
+ union { poly64x1x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -10260,35 +11782,40 @@ vst2_p64 (poly64_t * __a, poly64x1x2_t __b)
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_s64 (int64_t * __a, int64x1x2_t __b)
+ {
+ union { int64x1x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2di ((__builtin_neon_di *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_u64 (uint64_t * __a, uint64x1x2_t __b)
+ {
+ union { uint64x1x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2di ((__builtin_neon_di *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_s8 (int8_t * __a, int8x16x2_t __b)
+ {
+ union { int8x16x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2v16qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_s16 (int16_t * __a, int16x8x2_t __b)
+ {
+ union { int16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2v8hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_s32 (int32_t * __a, int32x4x2_t __b)
+ {
+ union { int32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10296,7 +11823,8 @@ vst2q_s32 (int32_t * __a, int32x4x2_t __b)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_f16 (float16_t * __a, float16x8x2_t __b)
+ {
+ union { float16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10304,63 +11832,72 @@ vst2q_f16 (float16_t * __a, float16x8x2_t __b)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_f32 (float32_t * __a, float32x4x2_t __b)
+ {
+ union { float32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2v4sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_u8 (uint8_t * __a, uint8x16x2_t __b)
+ {
+ union { uint8x16x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2v16qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_u16 (uint16_t * __a, uint16x8x2_t __b)
+ {
+ union { uint16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2v8hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_u32 (uint32_t * __a, uint32x4x2_t __b)
+ {
+ union { uint32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2v4si ((__builtin_neon_si *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_p8 (poly8_t * __a, poly8x16x2_t __b)
+ {
+ union { poly8x16x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2v16qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_p16 (poly16_t * __a, poly16x8x2_t __b)
+ {
+ union { poly16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2v8hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_s8 (int8_t * __a, int8x8x2_t __b, const int __c)
+ {
+ union { int8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev8qi ((__builtin_neon_qi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_s16 (int16_t * __a, int16x4x2_t __b, const int __c)
+ {
+ union { int16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev4hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_s32 (int32_t * __a, int32x2x2_t __b, const int __c)
+ {
+ union { int32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -10368,7 +11905,8 @@ vst2_lane_s32 (int32_t * __a, int32x2x2_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_f16 (float16_t * __a, float16x4x2_t __b, const int __c)
+ {
+ union { float16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+@@ -10376,56 +11914,64 @@ vst2_lane_f16 (float16_t * __a, float16x4x2_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_f32 (float32_t * __a, float32x2x2_t __b, const int __c)
+ {
+ union { float32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev2sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_u8 (uint8_t * __a, uint8x8x2_t __b, const int __c)
+ {
+ union { uint8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev8qi ((__builtin_neon_qi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_u16 (uint16_t * __a, uint16x4x2_t __b, const int __c)
+ {
+ union { uint16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev4hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_u32 (uint32_t * __a, uint32x2x2_t __b, const int __c)
+ {
+ union { uint32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev2si ((__builtin_neon_si *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_p8 (poly8_t * __a, poly8x8x2_t __b, const int __c)
+ {
+ union { poly8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev8qi ((__builtin_neon_qi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2_lane_p16 (poly16_t * __a, poly16x4x2_t __b, const int __c)
+ {
+ union { poly16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev4hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_lane_s16 (int16_t * __a, int16x8x2_t __b, const int __c)
+ {
+ union { int16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev8hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_lane_s32 (int32_t * __a, int32x4x2_t __b, const int __c)
+ {
+ union { int32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10433,7 +11979,8 @@ vst2q_lane_s32 (int32_t * __a, int32x4x2_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_lane_f16 (float16_t * __a, float16x8x2_t __b, const int __c)
+ {
+ union { float16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -10441,35 +11988,40 @@ vst2q_lane_f16 (float16_t * __a, float16x8x2_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_lane_f32 (float32_t * __a, float32x4x2_t __b, const int __c)
+ {
+ union { float32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev4sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_lane_u16 (uint16_t * __a, uint16x8x2_t __b, const int __c)
+ {
+ union { uint16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev8hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_lane_u32 (uint32_t * __a, uint32x4x2_t __b, const int __c)
+ {
+ union { uint32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev4si ((__builtin_neon_si *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst2q_lane_p16 (poly16_t * __a, poly16x8x2_t __b, const int __c)
+ {
+ union { poly16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst2_lanev8hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline int8x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_s8 (const int8_t * __a)
+ {
+ union { int8x8x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10477,7 +12029,8 @@ vld3_s8 (const int8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_s16 (const int16_t * __a)
+ {
+ union { int16x4x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10485,7 +12038,8 @@ vld3_s16 (const int16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x2x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_s32 (const int32_t * __a)
+ {
+ union { int32x2x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10494,7 +12048,8 @@ vld3_s32 (const int32_t * __a)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_f16 (const float16_t * __a)
+ {
+ union { float16x4x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10503,7 +12058,8 @@ vld3_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x2x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_f32 (const float32_t * __a)
+ {
+ union { float32x2x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10511,7 +12067,8 @@ vld3_f32 (const float32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_u8 (const uint8_t * __a)
+ {
+ union { uint8x8x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10519,7 +12076,8 @@ vld3_u8 (const uint8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_u16 (const uint16_t * __a)
+ {
+ union { uint16x4x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10527,7 +12085,8 @@ vld3_u16 (const uint16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x2x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_u32 (const uint32_t * __a)
+ {
+ union { uint32x2x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10535,7 +12094,8 @@ vld3_u32 (const uint32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_p8 (const poly8_t * __a)
+ {
+ union { poly8x8x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10543,7 +12103,8 @@ vld3_p8 (const poly8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_p16 (const poly16_t * __a)
+ {
+ union { poly16x4x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10553,7 +12114,8 @@ vld3_p16 (const poly16_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_p64 (const poly64_t * __a)
+ {
+ union { poly64x1x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10562,7 +12124,8 @@ vld3_p64 (const poly64_t * __a)
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_s64 (const int64_t * __a)
+ {
+ union { int64x1x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10570,7 +12133,8 @@ vld3_s64 (const int64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint64x1x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_u64 (const uint64_t * __a)
+ {
+ union { uint64x1x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10578,7 +12142,8 @@ vld3_u64 (const uint64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int8x16x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_s8 (const int8_t * __a)
+ {
+ union { int8x16x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10586,7 +12151,8 @@ vld3q_s8 (const int8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_s16 (const int16_t * __a)
+ {
+ union { int16x8x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10594,7 +12160,8 @@ vld3q_s16 (const int16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_s32 (const int32_t * __a)
+ {
+ union { int32x4x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10603,7 +12170,8 @@ vld3q_s32 (const int32_t * __a)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_f16 (const float16_t * __a)
+ {
+ union { float16x8x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10612,7 +12180,8 @@ vld3q_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_f32 (const float32_t * __a)
+ {
+ union { float32x4x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10620,7 +12189,8 @@ vld3q_f32 (const float32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x16x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_u8 (const uint8_t * __a)
+ {
+ union { uint8x16x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10628,7 +12198,8 @@ vld3q_u8 (const uint8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_u16 (const uint16_t * __a)
+ {
+ union { uint16x8x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10636,7 +12207,8 @@ vld3q_u16 (const uint16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_u32 (const uint32_t * __a)
+ {
+ union { uint32x4x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10644,7 +12216,8 @@ vld3q_u32 (const uint32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x16x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_p8 (const poly8_t * __a)
+ {
+ union { poly8x16x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10652,7 +12225,8 @@ vld3q_p8 (const poly8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_p16 (const poly16_t * __a)
+ {
+ union { poly16x8x3_t __i; __builtin_neon_ci __o; } __rv;
+@@ -10660,7 +12234,8 @@ vld3q_p16 (const poly16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int8x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_s8 (const int8_t * __a, int8x8x3_t __b, const int __c)
+ {
+ union { int8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10669,7 +12244,8 @@ vld3_lane_s8 (const int8_t * __a, int8x8x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_s16 (const int16_t * __a, int16x4x3_t __b, const int __c)
+ {
+ union { int16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10678,7 +12254,8 @@ vld3_lane_s16 (const int16_t * __a, int16x4x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x2x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_s32 (const int32_t * __a, int32x2x3_t __b, const int __c)
+ {
+ union { int32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10688,7 +12265,8 @@ vld3_lane_s32 (const int32_t * __a, int32x2x3_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_f16 (const float16_t * __a, float16x4x3_t __b, const int __c)
+ {
+ union { float16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10698,7 +12276,8 @@ vld3_lane_f16 (const float16_t * __a, float16x4x3_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline float32x2x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_f32 (const float32_t * __a, float32x2x3_t __b, const int __c)
+ {
+ union { float32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10707,7 +12286,8 @@ vld3_lane_f32 (const float32_t * __a, float32x2x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_u8 (const uint8_t * __a, uint8x8x3_t __b, const int __c)
+ {
+ union { uint8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10716,7 +12296,8 @@ vld3_lane_u8 (const uint8_t * __a, uint8x8x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_u16 (const uint16_t * __a, uint16x4x3_t __b, const int __c)
+ {
+ union { uint16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10725,7 +12306,8 @@ vld3_lane_u16 (const uint16_t * __a, uint16x4x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x2x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_u32 (const uint32_t * __a, uint32x2x3_t __b, const int __c)
+ {
+ union { uint32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10734,7 +12316,8 @@ vld3_lane_u32 (const uint32_t * __a, uint32x2x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_p8 (const poly8_t * __a, poly8x8x3_t __b, const int __c)
+ {
+ union { poly8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10743,7 +12326,8 @@ vld3_lane_p8 (const poly8_t * __a, poly8x8x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_lane_p16 (const poly16_t * __a, poly16x4x3_t __b, const int __c)
+ {
+ union { poly16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10752,7 +12336,8 @@ vld3_lane_p16 (const poly16_t * __a, poly16x4x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_lane_s16 (const int16_t * __a, int16x8x3_t __b, const int __c)
+ {
+ union { int16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -10761,7 +12346,8 @@ vld3q_lane_s16 (const int16_t * __a, int16x8x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_lane_s32 (const int32_t * __a, int32x4x3_t __b, const int __c)
+ {
+ union { int32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -10771,7 +12357,8 @@ vld3q_lane_s32 (const int32_t * __a, int32x4x3_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_lane_f16 (const float16_t * __a, float16x8x3_t __b, const int __c)
+ {
+ union { float16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -10781,7 +12368,8 @@ vld3q_lane_f16 (const float16_t * __a, float16x8x3_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline float32x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_lane_f32 (const float32_t * __a, float32x4x3_t __b, const int __c)
+ {
+ union { float32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -10790,7 +12378,8 @@ vld3q_lane_f32 (const float32_t * __a, float32x4x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_lane_u16 (const uint16_t * __a, uint16x8x3_t __b, const int __c)
+ {
+ union { uint16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -10799,7 +12388,8 @@ vld3q_lane_u16 (const uint16_t * __a, uint16x8x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_lane_u32 (const uint32_t * __a, uint32x4x3_t __b, const int __c)
+ {
+ union { uint32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -10808,7 +12398,8 @@ vld3q_lane_u32 (const uint32_t * __a, uint32x4x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3q_lane_p16 (const poly16_t * __a, poly16x8x3_t __b, const int __c)
+ {
+ union { poly16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -10817,7 +12408,8 @@ vld3q_lane_p16 (const poly16_t * __a, poly16x8x3_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int8x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_s8 (const int8_t * __a)
+ {
+ union { int8x8x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10825,7 +12417,8 @@ vld3_dup_s8 (const int8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_s16 (const int16_t * __a)
+ {
+ union { int16x4x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10833,7 +12426,8 @@ vld3_dup_s16 (const int16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x2x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_s32 (const int32_t * __a)
+ {
+ union { int32x2x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10842,7 +12436,8 @@ vld3_dup_s32 (const int32_t * __a)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_f16 (const float16_t * __a)
+ {
+ union { float16x4x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10851,7 +12446,8 @@ vld3_dup_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x2x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_f32 (const float32_t * __a)
+ {
+ union { float32x2x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10859,7 +12455,8 @@ vld3_dup_f32 (const float32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_u8 (const uint8_t * __a)
+ {
+ union { uint8x8x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10867,7 +12464,8 @@ vld3_dup_u8 (const uint8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_u16 (const uint16_t * __a)
+ {
+ union { uint16x4x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10875,7 +12473,8 @@ vld3_dup_u16 (const uint16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x2x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_u32 (const uint32_t * __a)
+ {
+ union { uint32x2x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10883,7 +12482,8 @@ vld3_dup_u32 (const uint32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x8x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_p8 (const poly8_t * __a)
+ {
+ union { poly8x8x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10891,7 +12491,8 @@ vld3_dup_p8 (const poly8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x4x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_p16 (const poly16_t * __a)
+ {
+ union { poly16x4x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10901,7 +12502,8 @@ vld3_dup_p16 (const poly16_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_p64 (const poly64_t * __a)
+ {
+ union { poly64x1x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10910,7 +12512,8 @@ vld3_dup_p64 (const poly64_t * __a)
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_s64 (const int64_t * __a)
+ {
+ union { int64x1x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10918,7 +12521,8 @@ vld3_dup_s64 (const int64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint64x1x3_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1x3_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld3_dup_u64 (const uint64_t * __a)
+ {
+ union { uint64x1x3_t __i; __builtin_neon_ei __o; } __rv;
+@@ -10926,21 +12530,24 @@ vld3_dup_u64 (const uint64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_s8 (int8_t * __a, int8x8x3_t __b)
+ {
+ union { int8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3v8qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_s16 (int16_t * __a, int16x4x3_t __b)
+ {
+ union { int16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3v4hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_s32 (int32_t * __a, int32x2x3_t __b)
+ {
+ union { int32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10948,7 +12555,8 @@ vst3_s32 (int32_t * __a, int32x2x3_t __b)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_f16 (float16_t * __a, float16x4x3_t __b)
+ {
+ union { float16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -10956,42 +12564,48 @@ vst3_f16 (float16_t * __a, float16x4x3_t __b)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_f32 (float32_t * __a, float32x2x3_t __b)
+ {
+ union { float32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3v2sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_u8 (uint8_t * __a, uint8x8x3_t __b)
+ {
+ union { uint8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3v8qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_u16 (uint16_t * __a, uint16x4x3_t __b)
+ {
+ union { uint16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3v4hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_u32 (uint32_t * __a, uint32x2x3_t __b)
+ {
+ union { uint32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3v2si ((__builtin_neon_si *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_p8 (poly8_t * __a, poly8x8x3_t __b)
+ {
+ union { poly8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3v8qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_p16 (poly16_t * __a, poly16x4x3_t __b)
+ {
+ union { poly16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -11000,7 +12614,8 @@ vst3_p16 (poly16_t * __a, poly16x4x3_t __b)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_p64 (poly64_t * __a, poly64x1x3_t __b)
+ {
+ union { poly64x1x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -11008,35 +12623,40 @@ vst3_p64 (poly64_t * __a, poly64x1x3_t __b)
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_s64 (int64_t * __a, int64x1x3_t __b)
+ {
+ union { int64x1x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3di ((__builtin_neon_di *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_u64 (uint64_t * __a, uint64x1x3_t __b)
+ {
+ union { uint64x1x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3di ((__builtin_neon_di *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_s8 (int8_t * __a, int8x16x3_t __b)
+ {
+ union { int8x16x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3v16qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_s16 (int16_t * __a, int16x8x3_t __b)
+ {
+ union { int16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3v8hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_s32 (int32_t * __a, int32x4x3_t __b)
+ {
+ union { int32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -11044,7 +12664,8 @@ vst3q_s32 (int32_t * __a, int32x4x3_t __b)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_f16 (float16_t * __a, float16x8x3_t __b)
+ {
+ union { float16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -11052,63 +12673,72 @@ vst3q_f16 (float16_t * __a, float16x8x3_t __b)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_f32 (float32_t * __a, float32x4x3_t __b)
+ {
+ union { float32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3v4sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_u8 (uint8_t * __a, uint8x16x3_t __b)
+ {
+ union { uint8x16x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3v16qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_u16 (uint16_t * __a, uint16x8x3_t __b)
+ {
+ union { uint16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3v8hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_u32 (uint32_t * __a, uint32x4x3_t __b)
+ {
+ union { uint32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3v4si ((__builtin_neon_si *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_p8 (poly8_t * __a, poly8x16x3_t __b)
+ {
+ union { poly8x16x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3v16qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_p16 (poly16_t * __a, poly16x8x3_t __b)
+ {
+ union { poly16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3v8hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_s8 (int8_t * __a, int8x8x3_t __b, const int __c)
+ {
+ union { int8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev8qi ((__builtin_neon_qi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_s16 (int16_t * __a, int16x4x3_t __b, const int __c)
+ {
+ union { int16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev4hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_s32 (int32_t * __a, int32x2x3_t __b, const int __c)
+ {
+ union { int32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -11116,7 +12746,8 @@ vst3_lane_s32 (int32_t * __a, int32x2x3_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_f16 (float16_t * __a, float16x4x3_t __b, const int __c)
+ {
+ union { float16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+@@ -11124,56 +12755,64 @@ vst3_lane_f16 (float16_t * __a, float16x4x3_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_f32 (float32_t * __a, float32x2x3_t __b, const int __c)
+ {
+ union { float32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev2sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_u8 (uint8_t * __a, uint8x8x3_t __b, const int __c)
+ {
+ union { uint8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev8qi ((__builtin_neon_qi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_u16 (uint16_t * __a, uint16x4x3_t __b, const int __c)
+ {
+ union { uint16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev4hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_u32 (uint32_t * __a, uint32x2x3_t __b, const int __c)
+ {
+ union { uint32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev2si ((__builtin_neon_si *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_p8 (poly8_t * __a, poly8x8x3_t __b, const int __c)
+ {
+ union { poly8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev8qi ((__builtin_neon_qi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3_lane_p16 (poly16_t * __a, poly16x4x3_t __b, const int __c)
+ {
+ union { poly16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev4hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_lane_s16 (int16_t * __a, int16x8x3_t __b, const int __c)
+ {
+ union { int16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev8hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_lane_s32 (int32_t * __a, int32x4x3_t __b, const int __c)
+ {
+ union { int32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -11181,7 +12820,8 @@ vst3q_lane_s32 (int32_t * __a, int32x4x3_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_lane_f16 (float16_t * __a, float16x8x3_t __b, const int __c)
+ {
+ union { float16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+@@ -11189,35 +12829,40 @@ vst3q_lane_f16 (float16_t * __a, float16x8x3_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_lane_f32 (float32_t * __a, float32x4x3_t __b, const int __c)
+ {
+ union { float32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev4sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_lane_u16 (uint16_t * __a, uint16x8x3_t __b, const int __c)
+ {
+ union { uint16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev8hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_lane_u32 (uint32_t * __a, uint32x4x3_t __b, const int __c)
+ {
+ union { uint32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev4si ((__builtin_neon_si *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst3q_lane_p16 (poly16_t * __a, poly16x8x3_t __b, const int __c)
+ {
+ union { poly16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+ __builtin_neon_vst3_lanev8hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline int8x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_s8 (const int8_t * __a)
+ {
+ union { int8x8x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11225,7 +12870,8 @@ vld4_s8 (const int8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_s16 (const int16_t * __a)
+ {
+ union { int16x4x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11233,7 +12879,8 @@ vld4_s16 (const int16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x2x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_s32 (const int32_t * __a)
+ {
+ union { int32x2x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11242,7 +12889,8 @@ vld4_s32 (const int32_t * __a)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_f16 (const float16_t * __a)
+ {
+ union { float16x4x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11251,7 +12899,8 @@ vld4_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x2x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_f32 (const float32_t * __a)
+ {
+ union { float32x2x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11259,7 +12908,8 @@ vld4_f32 (const float32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_u8 (const uint8_t * __a)
+ {
+ union { uint8x8x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11267,7 +12917,8 @@ vld4_u8 (const uint8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_u16 (const uint16_t * __a)
+ {
+ union { uint16x4x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11275,7 +12926,8 @@ vld4_u16 (const uint16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x2x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_u32 (const uint32_t * __a)
+ {
+ union { uint32x2x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11283,7 +12935,8 @@ vld4_u32 (const uint32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_p8 (const poly8_t * __a)
+ {
+ union { poly8x8x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11291,7 +12944,8 @@ vld4_p8 (const poly8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_p16 (const poly16_t * __a)
+ {
+ union { poly16x4x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11301,7 +12955,8 @@ vld4_p16 (const poly16_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_p64 (const poly64_t * __a)
+ {
+ union { poly64x1x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11310,7 +12965,8 @@ vld4_p64 (const poly64_t * __a)
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_s64 (const int64_t * __a)
+ {
+ union { int64x1x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11318,7 +12974,8 @@ vld4_s64 (const int64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint64x1x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_u64 (const uint64_t * __a)
+ {
+ union { uint64x1x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11326,7 +12983,8 @@ vld4_u64 (const uint64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int8x16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_s8 (const int8_t * __a)
+ {
+ union { int8x16x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11334,7 +12992,8 @@ vld4q_s8 (const int8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_s16 (const int16_t * __a)
+ {
+ union { int16x8x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11342,7 +13001,8 @@ vld4q_s16 (const int16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_s32 (const int32_t * __a)
+ {
+ union { int32x4x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11351,7 +13011,8 @@ vld4q_s32 (const int32_t * __a)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_f16 (const float16_t * __a)
+ {
+ union { float16x8x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11360,7 +13021,8 @@ vld4q_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_f32 (const float32_t * __a)
+ {
+ union { float32x4x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11368,7 +13030,8 @@ vld4q_f32 (const float32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_u8 (const uint8_t * __a)
+ {
+ union { uint8x16x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11376,7 +13039,8 @@ vld4q_u8 (const uint8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_u16 (const uint16_t * __a)
+ {
+ union { uint16x8x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11384,7 +13048,8 @@ vld4q_u16 (const uint16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_u32 (const uint32_t * __a)
+ {
+ union { uint32x4x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11392,7 +13057,8 @@ vld4q_u32 (const uint32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_p8 (const poly8_t * __a)
+ {
+ union { poly8x16x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11400,7 +13066,8 @@ vld4q_p8 (const poly8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_p16 (const poly16_t * __a)
+ {
+ union { poly16x8x4_t __i; __builtin_neon_xi __o; } __rv;
+@@ -11408,7 +13075,8 @@ vld4q_p16 (const poly16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int8x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_s8 (const int8_t * __a, int8x8x4_t __b, const int __c)
+ {
+ union { int8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11417,7 +13085,8 @@ vld4_lane_s8 (const int8_t * __a, int8x8x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_s16 (const int16_t * __a, int16x4x4_t __b, const int __c)
+ {
+ union { int16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11426,7 +13095,8 @@ vld4_lane_s16 (const int16_t * __a, int16x4x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x2x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_s32 (const int32_t * __a, int32x2x4_t __b, const int __c)
+ {
+ union { int32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11436,7 +13106,8 @@ vld4_lane_s32 (const int32_t * __a, int32x2x4_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_f16 (const float16_t * __a, float16x4x4_t __b, const int __c)
+ {
+ union { float16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11447,7 +13118,8 @@ vld4_lane_f16 (const float16_t * __a, float16x4x4_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline float32x2x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_f32 (const float32_t * __a, float32x2x4_t __b, const int __c)
+ {
+ union { float32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11456,7 +13128,8 @@ vld4_lane_f32 (const float32_t * __a, float32x2x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_u8 (const uint8_t * __a, uint8x8x4_t __b, const int __c)
+ {
+ union { uint8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11465,7 +13138,8 @@ vld4_lane_u8 (const uint8_t * __a, uint8x8x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_u16 (const uint16_t * __a, uint16x4x4_t __b, const int __c)
+ {
+ union { uint16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11474,7 +13148,8 @@ vld4_lane_u16 (const uint16_t * __a, uint16x4x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x2x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_u32 (const uint32_t * __a, uint32x2x4_t __b, const int __c)
+ {
+ union { uint32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11483,7 +13158,8 @@ vld4_lane_u32 (const uint32_t * __a, uint32x2x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_p8 (const poly8_t * __a, poly8x8x4_t __b, const int __c)
+ {
+ union { poly8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11492,7 +13168,8 @@ vld4_lane_p8 (const poly8_t * __a, poly8x8x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_lane_p16 (const poly16_t * __a, poly16x4x4_t __b, const int __c)
+ {
+ union { poly16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11501,7 +13178,8 @@ vld4_lane_p16 (const poly16_t * __a, poly16x4x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_lane_s16 (const int16_t * __a, int16x8x4_t __b, const int __c)
+ {
+ union { int16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11510,7 +13188,8 @@ vld4q_lane_s16 (const int16_t * __a, int16x8x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_lane_s32 (const int32_t * __a, int32x4x4_t __b, const int __c)
+ {
+ union { int32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11520,7 +13199,8 @@ vld4q_lane_s32 (const int32_t * __a, int32x4x4_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_lane_f16 (const float16_t * __a, float16x8x4_t __b, const int __c)
+ {
+ union { float16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11531,7 +13211,8 @@ vld4q_lane_f16 (const float16_t * __a, float16x8x4_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline float32x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_lane_f32 (const float32_t * __a, float32x4x4_t __b, const int __c)
+ {
+ union { float32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11540,7 +13221,8 @@ vld4q_lane_f32 (const float32_t * __a, float32x4x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_lane_u16 (const uint16_t * __a, uint16x8x4_t __b, const int __c)
+ {
+ union { uint16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11549,7 +13231,8 @@ vld4q_lane_u16 (const uint16_t * __a, uint16x8x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_lane_u32 (const uint32_t * __a, uint32x4x4_t __b, const int __c)
+ {
+ union { uint32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11558,7 +13241,8 @@ vld4q_lane_u32 (const uint32_t * __a, uint32x4x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4q_lane_p16 (const poly16_t * __a, poly16x8x4_t __b, const int __c)
+ {
+ union { poly16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11567,7 +13251,8 @@ vld4q_lane_p16 (const poly16_t * __a, poly16x8x4_t __b, const int __c)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int8x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_s8 (const int8_t * __a)
+ {
+ union { int8x8x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11575,7 +13260,8 @@ vld4_dup_s8 (const int8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_s16 (const int16_t * __a)
+ {
+ union { int16x4x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11583,7 +13269,8 @@ vld4_dup_s16 (const int16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline int32x2x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_s32 (const int32_t * __a)
+ {
+ union { int32x2x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11592,7 +13279,8 @@ vld4_dup_s32 (const int32_t * __a)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_f16 (const float16_t * __a)
+ {
+ union { float16x4x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11601,7 +13289,8 @@ vld4_dup_f16 (const float16_t * __a)
+ }
+ #endif
+
+-__extension__ static __inline float32x2x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_f32 (const float32_t * __a)
+ {
+ union { float32x2x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11609,7 +13298,8 @@ vld4_dup_f32 (const float32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint8x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_u8 (const uint8_t * __a)
+ {
+ union { uint8x8x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11617,7 +13307,8 @@ vld4_dup_u8 (const uint8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_u16 (const uint16_t * __a)
+ {
+ union { uint16x4x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11625,7 +13316,8 @@ vld4_dup_u16 (const uint16_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint32x2x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_u32 (const uint32_t * __a)
+ {
+ union { uint32x2x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11633,7 +13325,8 @@ vld4_dup_u32 (const uint32_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly8x8x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_p8 (const poly8_t * __a)
+ {
+ union { poly8x8x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11641,7 +13334,8 @@ vld4_dup_p8 (const poly8_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline poly16x4x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_p16 (const poly16_t * __a)
+ {
+ union { poly16x4x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11651,7 +13345,8 @@ vld4_dup_p16 (const poly16_t * __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_p64 (const poly64_t * __a)
+ {
+ union { poly64x1x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11660,7 +13355,8 @@ vld4_dup_p64 (const poly64_t * __a)
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_s64 (const int64_t * __a)
+ {
+ union { int64x1x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11668,7 +13364,8 @@ vld4_dup_s64 (const int64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline uint64x1x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vld4_dup_u64 (const uint64_t * __a)
+ {
+ union { uint64x1x4_t __i; __builtin_neon_oi __o; } __rv;
+@@ -11676,21 +13373,24 @@ vld4_dup_u64 (const uint64_t * __a)
+ return __rv.__i;
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_s8 (int8_t * __a, int8x8x4_t __b)
+ {
+ union { int8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4v8qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_s16 (int16_t * __a, int16x4x4_t __b)
+ {
+ union { int16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4v4hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_s32 (int32_t * __a, int32x2x4_t __b)
+ {
+ union { int32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11698,7 +13398,8 @@ vst4_s32 (int32_t * __a, int32x2x4_t __b)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_f16 (float16_t * __a, float16x4x4_t __b)
+ {
+ union { float16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11706,42 +13407,48 @@ vst4_f16 (float16_t * __a, float16x4x4_t __b)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_f32 (float32_t * __a, float32x2x4_t __b)
+ {
+ union { float32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4v2sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_u8 (uint8_t * __a, uint8x8x4_t __b)
+ {
+ union { uint8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4v8qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_u16 (uint16_t * __a, uint16x4x4_t __b)
+ {
+ union { uint16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4v4hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_u32 (uint32_t * __a, uint32x2x4_t __b)
+ {
+ union { uint32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4v2si ((__builtin_neon_si *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_p8 (poly8_t * __a, poly8x8x4_t __b)
+ {
+ union { poly8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4v8qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_p16 (poly16_t * __a, poly16x4x4_t __b)
+ {
+ union { poly16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11750,7 +13457,8 @@ vst4_p16 (poly16_t * __a, poly16x4x4_t __b)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_p64 (poly64_t * __a, poly64x1x4_t __b)
+ {
+ union { poly64x1x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11758,35 +13466,40 @@ vst4_p64 (poly64_t * __a, poly64x1x4_t __b)
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_s64 (int64_t * __a, int64x1x4_t __b)
+ {
+ union { int64x1x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4di ((__builtin_neon_di *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_u64 (uint64_t * __a, uint64x1x4_t __b)
+ {
+ union { uint64x1x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4di ((__builtin_neon_di *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_s8 (int8_t * __a, int8x16x4_t __b)
+ {
+ union { int8x16x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4v16qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_s16 (int16_t * __a, int16x8x4_t __b)
+ {
+ union { int16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4v8hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_s32 (int32_t * __a, int32x4x4_t __b)
+ {
+ union { int32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11794,7 +13507,8 @@ vst4q_s32 (int32_t * __a, int32x4x4_t __b)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_f16 (float16_t * __a, float16x8x4_t __b)
+ {
+ union { float16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11802,63 +13516,72 @@ vst4q_f16 (float16_t * __a, float16x8x4_t __b)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_f32 (float32_t * __a, float32x4x4_t __b)
+ {
+ union { float32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4v4sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_u8 (uint8_t * __a, uint8x16x4_t __b)
+ {
+ union { uint8x16x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4v16qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_u16 (uint16_t * __a, uint16x8x4_t __b)
+ {
+ union { uint16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4v8hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_u32 (uint32_t * __a, uint32x4x4_t __b)
+ {
+ union { uint32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4v4si ((__builtin_neon_si *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_p8 (poly8_t * __a, poly8x16x4_t __b)
+ {
+ union { poly8x16x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4v16qi ((__builtin_neon_qi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_p16 (poly16_t * __a, poly16x8x4_t __b)
+ {
+ union { poly16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4v8hi ((__builtin_neon_hi *) __a, __bu.__o);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_s8 (int8_t * __a, int8x8x4_t __b, const int __c)
+ {
+ union { int8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev8qi ((__builtin_neon_qi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_s16 (int16_t * __a, int16x4x4_t __b, const int __c)
+ {
+ union { int16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev4hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_s32 (int32_t * __a, int32x2x4_t __b, const int __c)
+ {
+ union { int32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11866,7 +13589,8 @@ vst4_lane_s32 (int32_t * __a, int32x2x4_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_f16 (float16_t * __a, float16x4x4_t __b, const int __c)
+ {
+ union { float16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+@@ -11874,56 +13598,64 @@ vst4_lane_f16 (float16_t * __a, float16x4x4_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_f32 (float32_t * __a, float32x2x4_t __b, const int __c)
+ {
+ union { float32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev2sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_u8 (uint8_t * __a, uint8x8x4_t __b, const int __c)
+ {
+ union { uint8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev8qi ((__builtin_neon_qi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_u16 (uint16_t * __a, uint16x4x4_t __b, const int __c)
+ {
+ union { uint16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev4hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_u32 (uint32_t * __a, uint32x2x4_t __b, const int __c)
+ {
+ union { uint32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev2si ((__builtin_neon_si *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_p8 (poly8_t * __a, poly8x8x4_t __b, const int __c)
+ {
+ union { poly8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev8qi ((__builtin_neon_qi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4_lane_p16 (poly16_t * __a, poly16x4x4_t __b, const int __c)
+ {
+ union { poly16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev4hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_lane_s16 (int16_t * __a, int16x8x4_t __b, const int __c)
+ {
+ union { int16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev8hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_lane_s32 (int32_t * __a, int32x4x4_t __b, const int __c)
+ {
+ union { int32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11931,7 +13663,8 @@ vst4q_lane_s32 (int32_t * __a, int32x4x4_t __b, const int __c)
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_lane_f16 (float16_t * __a, float16x8x4_t __b, const int __c)
+ {
+ union { float16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+@@ -11939,529 +13672,616 @@ vst4q_lane_f16 (float16_t * __a, float16x8x4_t __b, const int __c)
+ }
+ #endif
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_lane_f32 (float32_t * __a, float32x4x4_t __b, const int __c)
+ {
+ union { float32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev4sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_lane_u16 (uint16_t * __a, uint16x8x4_t __b, const int __c)
+ {
+ union { uint16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev8hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_lane_u32 (uint32_t * __a, uint32x4x4_t __b, const int __c)
+ {
+ union { uint32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev4si ((__builtin_neon_si *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vst4q_lane_p16 (poly16_t * __a, poly16x8x4_t __b, const int __c)
+ {
+ union { poly16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+ __builtin_neon_vst4_lanev8hi ((__builtin_neon_hi *) __a, __bu.__o, __c);
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vand_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vandq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a & __b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorr_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorrq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a | __b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veor_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ veorq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a ^ __b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbic_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vbicq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a & ~__b;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_s8 (int8x8_t __a, int8x8_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_s16 (int16x4_t __a, int16x4_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_s32 (int32x2_t __a, int32x2_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_s64 (int64x1_t __a, int64x1_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vorn_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_s8 (int8x16_t __a, int8x16_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_s16 (int16x8_t __a, int16x8_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_s32 (int32x4_t __a, int32x4_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_s64 (int64x2_t __a, int64x2_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vornq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+ return __a | ~__b;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_p16 (poly16x4_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_f16 (float16x4_t __a)
+ {
+ return (poly8x8_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_f32 (float32x2_t __a)
+ {
+ return (poly8x8_t)__a;
+@@ -12469,76 +14289,88 @@ vreinterpret_p8_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_p64 (poly64x1_t __a)
+ {
+ return (poly8x8_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_s64 (int64x1_t __a)
+ {
+ return (poly8x8_t)__a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_u64 (uint64x1_t __a)
+ {
+ return (poly8x8_t)__a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_s8 (int8x8_t __a)
+ {
+ return (poly8x8_t)__a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_s16 (int16x4_t __a)
+ {
+ return (poly8x8_t)__a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_s32 (int32x2_t __a)
+ {
+ return (poly8x8_t)__a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_u8 (uint8x8_t __a)
+ {
+ return (poly8x8_t)__a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_u16 (uint16x4_t __a)
+ {
+ return (poly8x8_t)__a;
+ }
+
+-__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p8_u32 (uint32x2_t __a)
+ {
+ return (poly8x8_t)__a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_p8 (poly8x8_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_f16 (float16x4_t __a)
+ {
+ return (poly16x4_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_f32 (float32x2_t __a)
+ {
+ return (poly16x4_t)__a;
+@@ -12546,63 +14378,73 @@ vreinterpret_p16_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_p64 (poly64x1_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_s64 (int64x1_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_u64 (uint64x1_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_s8 (int8x8_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_s16 (int16x4_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_s32 (int32x2_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_u8 (uint8x8_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_u16 (uint16x4_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+-__extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p16_u32 (uint32x2_t __a)
+ {
+ return (poly16x4_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_p8 (poly8x8_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12610,7 +14452,8 @@ vreinterpret_f16_p8 (poly8x8_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_p16 (poly16x4_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12618,7 +14461,8 @@ vreinterpret_f16_p16 (poly16x4_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_f32 (float32x2_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12628,7 +14472,8 @@ vreinterpret_f16_f32 (float32x2_t __a)
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_p64 (poly64x1_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12637,7 +14482,8 @@ vreinterpret_f16_p64 (poly64x1_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_s64 (int64x1_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12645,7 +14491,8 @@ vreinterpret_f16_s64 (int64x1_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_u64 (uint64x1_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12653,7 +14500,8 @@ vreinterpret_f16_u64 (uint64x1_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_s8 (int8x8_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12661,7 +14509,8 @@ vreinterpret_f16_s8 (int8x8_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_s16 (int16x4_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12669,7 +14518,8 @@ vreinterpret_f16_s16 (int16x4_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_s32 (int32x2_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12677,7 +14527,8 @@ vreinterpret_f16_s32 (int32x2_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_u8 (uint8x8_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12685,7 +14536,8 @@ vreinterpret_f16_u8 (uint8x8_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_u16 (uint16x4_t __a)
+ {
+ return (float16x4_t) __a;
+@@ -12693,27 +14545,31 @@ vreinterpret_f16_u16 (uint16x4_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f16_u32 (uint32x2_t __a)
+ {
+ return (float16x4_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_p8 (poly8x8_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_p16 (poly16x4_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_f16 (float16x4_t __a)
+ {
+ return (float32x2_t) __a;
+@@ -12722,56 +14578,65 @@ vreinterpret_f32_f16 (float16x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_p64 (poly64x1_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_s64 (int64x1_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_u64 (uint64x1_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_s8 (int8x8_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_s16 (int16x4_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_s32 (int32x2_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_u8 (uint8x8_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_u16 (uint16x4_t __a)
+ {
+ return (float32x2_t)__a;
+ }
+
+-__extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_f32_u32 (uint32x2_t __a)
+ {
+ return (float32x2_t)__a;
+@@ -12779,102 +14644,118 @@ vreinterpret_f32_u32 (uint32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_p8 (poly8x8_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_p16 (poly16x4_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_f16 (float16x4_t __a)
+ {
+ return (poly64x1_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_f32 (float32x2_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_s64 (int64x1_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_u64 (uint64x1_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_s8 (int8x8_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_s16 (int16x4_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_s32 (int32x2_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_u8 (uint8x8_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_u16 (uint16x4_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+-__extension__ static __inline poly64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_p64_u32 (uint32x2_t __a)
+ {
+ return (poly64x1_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_p8 (poly8x8_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_p16 (poly16x4_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_f16 (float16x4_t __a)
+ {
+ return (int64x1_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_f32 (float32x2_t __a)
+ {
+ return (int64x1_t)__a;
+@@ -12882,76 +14763,88 @@ vreinterpret_s64_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_p64 (poly64x1_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_u64 (uint64x1_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_s8 (int8x8_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_s16 (int16x4_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_s32 (int32x2_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_u8 (uint8x8_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_u16 (uint16x4_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s64_u32 (uint32x2_t __a)
+ {
+ return (int64x1_t)__a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_p8 (poly8x8_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_p16 (poly16x4_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_f16 (float16x4_t __a)
+ {
+ return (uint64x1_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_f32 (float32x2_t __a)
+ {
+ return (uint64x1_t)__a;
+@@ -12959,76 +14852,88 @@ vreinterpret_u64_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_p64 (poly64x1_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_s64 (int64x1_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_s8 (int8x8_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_s16 (int16x4_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_s32 (int32x2_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_u8 (uint8x8_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_u16 (uint16x4_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u64_u32 (uint32x2_t __a)
+ {
+ return (uint64x1_t)__a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_p8 (poly8x8_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_p16 (poly16x4_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_f16 (float16x4_t __a)
+ {
+ return (int8x8_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_f32 (float32x2_t __a)
+ {
+ return (int8x8_t)__a;
+@@ -13036,76 +14941,88 @@ vreinterpret_s8_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_p64 (poly64x1_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_s64 (int64x1_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_u64 (uint64x1_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_s16 (int16x4_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_s32 (int32x2_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_u8 (uint8x8_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_u16 (uint16x4_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+-__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s8_u32 (uint32x2_t __a)
+ {
+ return (int8x8_t)__a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_p8 (poly8x8_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_p16 (poly16x4_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_f16 (float16x4_t __a)
+ {
+ return (int16x4_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_f32 (float32x2_t __a)
+ {
+ return (int16x4_t)__a;
+@@ -13113,76 +15030,88 @@ vreinterpret_s16_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_p64 (poly64x1_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_s64 (int64x1_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_u64 (uint64x1_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_s8 (int8x8_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_s32 (int32x2_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_u8 (uint8x8_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_u16 (uint16x4_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+-__extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s16_u32 (uint32x2_t __a)
+ {
+ return (int16x4_t)__a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_p8 (poly8x8_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_p16 (poly16x4_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_f16 (float16x4_t __a)
+ {
+ return (int32x2_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_f32 (float32x2_t __a)
+ {
+ return (int32x2_t)__a;
+@@ -13190,76 +15119,88 @@ vreinterpret_s32_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_p64 (poly64x1_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_s64 (int64x1_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_u64 (uint64x1_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_s8 (int8x8_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_s16 (int16x4_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_u8 (uint8x8_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_u16 (uint16x4_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+-__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_s32_u32 (uint32x2_t __a)
+ {
+ return (int32x2_t)__a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_p8 (poly8x8_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_p16 (poly16x4_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_f16 (float16x4_t __a)
+ {
+ return (uint8x8_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_f32 (float32x2_t __a)
+ {
+ return (uint8x8_t)__a;
+@@ -13267,76 +15208,88 @@ vreinterpret_u8_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_p64 (poly64x1_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_s64 (int64x1_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_u64 (uint64x1_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_s8 (int8x8_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_s16 (int16x4_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_s32 (int32x2_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_u16 (uint16x4_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+-__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u8_u32 (uint32x2_t __a)
+ {
+ return (uint8x8_t)__a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_p8 (poly8x8_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_p16 (poly16x4_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_f16 (float16x4_t __a)
+ {
+ return (uint16x4_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_f32 (float32x2_t __a)
+ {
+ return (uint16x4_t)__a;
+@@ -13344,76 +15297,88 @@ vreinterpret_u16_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_p64 (poly64x1_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_s64 (int64x1_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_u64 (uint64x1_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_s8 (int8x8_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_s16 (int16x4_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_s32 (int32x2_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_u8 (uint8x8_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+-__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u16_u32 (uint32x2_t __a)
+ {
+ return (uint16x4_t)__a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_p8 (poly8x8_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_p16 (poly16x4_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_f16 (float16x4_t __a)
+ {
+ return (uint32x2_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_f32 (float32x2_t __a)
+ {
+ return (uint32x2_t)__a;
+@@ -13421,70 +15386,81 @@ vreinterpret_u32_f32 (float32x2_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_p64 (poly64x1_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_s64 (int64x1_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_u64 (uint64x1_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_s8 (int8x8_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_s16 (int16x4_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_s32 (int32x2_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_u8 (uint8x8_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+-__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpret_u32_u16 (uint16x4_t __a)
+ {
+ return (uint32x2_t)__a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_p16 (poly16x8_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_f16 (float16x8_t __a)
+ {
+ return (poly8x16_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_f32 (float32x4_t __a)
+ {
+ return (poly8x16_t)__a;
+@@ -13492,83 +15468,96 @@ vreinterpretq_p8_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_p64 (poly64x2_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_p128 (poly128_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_s64 (int64x2_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_u64 (uint64x2_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_s8 (int8x16_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_s16 (int16x8_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_s32 (int32x4_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_u8 (uint8x16_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_u16 (uint16x8_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+-__extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p8_u32 (uint32x4_t __a)
+ {
+ return (poly8x16_t)__a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_p8 (poly8x16_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_f16 (float16x8_t __a)
+ {
+ return (poly16x8_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_f32 (float32x4_t __a)
+ {
+ return (poly16x8_t)__a;
+@@ -13576,69 +15565,80 @@ vreinterpretq_p16_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_p64 (poly64x2_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_p128 (poly128_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_s64 (int64x2_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_u64 (uint64x2_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_s8 (int8x16_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_s16 (int16x8_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_s32 (int32x4_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_u8 (uint8x16_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_u16 (uint16x8_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+-__extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p16_u32 (uint32x4_t __a)
+ {
+ return (poly16x8_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_p8 (poly8x16_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13646,7 +15646,8 @@ vreinterpretq_f16_p8 (poly8x16_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_p16 (poly16x8_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13654,7 +15655,8 @@ vreinterpretq_f16_p16 (poly16x8_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_f32 (float32x4_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13665,7 +15667,8 @@ vreinterpretq_f16_f32 (float32x4_t __a)
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_p64 (poly64x2_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13673,7 +15676,8 @@ vreinterpretq_f16_p64 (poly64x2_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_p128 (poly128_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13683,7 +15687,8 @@ vreinterpretq_f16_p128 (poly128_t __a)
+ #pragma GCC pop_options
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_s64 (int64x2_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13691,7 +15696,8 @@ vreinterpretq_f16_s64 (int64x2_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_u64 (uint64x2_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13699,7 +15705,8 @@ vreinterpretq_f16_u64 (uint64x2_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_s8 (int8x16_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13707,7 +15714,8 @@ vreinterpretq_f16_s8 (int8x16_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_s16 (int16x8_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13715,7 +15723,8 @@ vreinterpretq_f16_s16 (int16x8_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_s32 (int32x4_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13723,7 +15732,8 @@ vreinterpretq_f16_s32 (int32x4_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_u8 (uint8x16_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13731,7 +15741,8 @@ vreinterpretq_f16_u8 (uint8x16_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_u16 (uint16x8_t __a)
+ {
+ return (float16x8_t) __a;
+@@ -13739,27 +15750,31 @@ vreinterpretq_f16_u16 (uint16x8_t __a)
+ #endif
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f16_u32 (uint32x4_t __a)
+ {
+ return (float16x8_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_p8 (poly8x16_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_p16 (poly16x8_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_f16 (float16x8_t __a)
+ {
+ return (float32x4_t) __a;
+@@ -13768,62 +15783,72 @@ vreinterpretq_f32_f16 (float16x8_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_p64 (poly64x2_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_p128 (poly128_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_s64 (int64x2_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_u64 (uint64x2_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_s8 (int8x16_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_s16 (int16x8_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_s32 (int32x4_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_u8 (uint8x16_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_u16 (uint16x8_t __a)
+ {
+ return (float32x4_t)__a;
+ }
+
+-__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline float32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_f32_u32 (uint32x4_t __a)
+ {
+ return (float32x4_t)__a;
+@@ -13831,188 +15856,218 @@ vreinterpretq_f32_u32 (uint32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_p8 (poly8x16_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_p16 (poly16x8_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_f16 (float16x8_t __a)
+ {
+ return (poly64x2_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_f32 (float32x4_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_p128 (poly128_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_s64 (int64x2_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_u64 (uint64x2_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_s8 (int8x16_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_s16 (int16x8_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_s32 (int32x4_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_u8 (uint8x16_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_u16 (uint16x8_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p64_u32 (uint32x4_t __a)
+ {
+ return (poly64x2_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_p8 (poly8x16_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_p16 (poly16x8_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_f16 (float16x8_t __a)
+ {
+ return (poly128_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_f32 (float32x4_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_p64 (poly64x2_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_s64 (int64x2_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_u64 (uint64x2_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_s8 (int8x16_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_s16 (int16x8_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_s32 (int32x4_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_u8 (uint8x16_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_u16 (uint16x8_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_p128_u32 (uint32x4_t __a)
+ {
+ return (poly128_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_p8 (poly8x16_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_p16 (poly16x8_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_f16 (float16x8_t __a)
+ {
+ return (int64x2_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_f32 (float32x4_t __a)
+ {
+ return (int64x2_t)__a;
+@@ -14020,82 +16075,95 @@ vreinterpretq_s64_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_p64 (poly64x2_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_p128 (poly128_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_u64 (uint64x2_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_s8 (int8x16_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_s16 (int16x8_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_s32 (int32x4_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_u8 (uint8x16_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_u16 (uint16x8_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+-__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s64_u32 (uint32x4_t __a)
+ {
+ return (int64x2_t)__a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_p8 (poly8x16_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_p16 (poly16x8_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_f16 (float16x8_t __a)
+ {
+ return (uint64x2_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_f32 (float32x4_t __a)
+ {
+ return (uint64x2_t)__a;
+@@ -14103,82 +16171,95 @@ vreinterpretq_u64_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_p64 (poly64x2_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_p128 (poly128_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_s64 (int64x2_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_s8 (int8x16_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_s16 (int16x8_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_s32 (int32x4_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_u8 (uint8x16_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_u16 (uint16x8_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+-__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u64_u32 (uint32x4_t __a)
+ {
+ return (uint64x2_t)__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_p8 (poly8x16_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_p16 (poly16x8_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_f16 (float16x8_t __a)
+ {
+ return (int8x16_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_f32 (float32x4_t __a)
+ {
+ return (int8x16_t)__a;
+@@ -14186,82 +16267,95 @@ vreinterpretq_s8_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_p64 (poly64x2_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_p128 (poly128_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_s64 (int64x2_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_u64 (uint64x2_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_s16 (int16x8_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_s32 (int32x4_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_u8 (uint8x16_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_u16 (uint16x8_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+-__extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s8_u32 (uint32x4_t __a)
+ {
+ return (int8x16_t)__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_p8 (poly8x16_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_p16 (poly16x8_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_f16 (float16x8_t __a)
+ {
+ return (int16x8_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_f32 (float32x4_t __a)
+ {
+ return (int16x8_t)__a;
+@@ -14269,82 +16363,95 @@ vreinterpretq_s16_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_p64 (poly64x2_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_p128 (poly128_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_s64 (int64x2_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_u64 (uint64x2_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_s8 (int8x16_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_s32 (int32x4_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_u8 (uint8x16_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_u16 (uint16x8_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+-__extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s16_u32 (uint32x4_t __a)
+ {
+ return (int16x8_t)__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_p8 (poly8x16_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_p16 (poly16x8_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_f16 (float16x8_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+ #endif
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_f32 (float32x4_t __a)
+ {
+ return (int32x4_t)__a;
+@@ -14352,82 +16459,95 @@ vreinterpretq_s32_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_p64 (poly64x2_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_p128 (poly128_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_s64 (int64x2_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_u64 (uint64x2_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_s8 (int8x16_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_s16 (int16x8_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_u8 (uint8x16_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_u16 (uint16x8_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+-__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_s32_u32 (uint32x4_t __a)
+ {
+ return (int32x4_t)__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_p8 (poly8x16_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_p16 (poly16x8_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_f16 (float16x8_t __a)
+ {
+ return (uint8x16_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_f32 (float32x4_t __a)
+ {
+ return (uint8x16_t)__a;
+@@ -14435,82 +16555,95 @@ vreinterpretq_u8_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_p64 (poly64x2_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_p128 (poly128_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_s64 (int64x2_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_u64 (uint64x2_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_s8 (int8x16_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_s16 (int16x8_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_s32 (int32x4_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_u16 (uint16x8_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u8_u32 (uint32x4_t __a)
+ {
+ return (uint8x16_t)__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_p8 (poly8x16_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_p16 (poly16x8_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_f16 (float16x8_t __a)
+ {
+ return (uint16x8_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_f32 (float32x4_t __a)
+ {
+ return (uint16x8_t)__a;
+@@ -14518,82 +16651,95 @@ vreinterpretq_u16_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_p64 (poly64x2_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_p128 (poly128_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_s64 (int64x2_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_u64 (uint64x2_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_s8 (int8x16_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_s16 (int16x8_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_s32 (int32x4_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_u8 (uint8x16_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+-__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u16_u32 (uint32x4_t __a)
+ {
+ return (uint16x8_t)__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_p8 (poly8x16_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_p16 (poly16x8_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_f16 (float16x8_t __a)
+ {
+ return (uint32x4_t) __a;
+ }
+ #endif
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_f32 (float32x4_t __a)
+ {
+ return (uint32x4_t)__a;
+@@ -14601,56 +16747,65 @@ vreinterpretq_u32_f32 (float32x4_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_p64 (poly64x2_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_p128 (poly128_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+ #pragma GCC pop_options
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_s64 (int64x2_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_u64 (uint64x2_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_s8 (int8x16_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_s16 (int16x8_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_s32 (int32x4_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_u8 (uint8x16_t __a)
+ {
+ return (uint32x4_t)__a;
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vreinterpretq_u32_u16 (uint16x8_t __a)
+ {
+ return (uint32x4_t)__a;
+@@ -14659,7 +16814,8 @@ vreinterpretq_u32_u16 (uint16x8_t __a)
+
+ #pragma GCC push_options
+ #pragma GCC target ("fpu=crypto-neon-fp-armv8")
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vldrq_p128 (poly128_t const * __ptr)
+ {
+ #ifdef __ARM_BIG_ENDIAN
+@@ -14672,7 +16828,8 @@ vldrq_p128 (poly128_t const * __ptr)
+ #endif
+ }
+
+-__extension__ static __inline void __attribute__ ((__always_inline__))
++__extension__ extern __inline void
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vstrq_p128 (poly128_t * __ptr, poly128_t __val)
+ {
+ #ifdef __ARM_BIG_ENDIAN
+@@ -14695,7 +16852,8 @@ vstrq_p128 (poly128_t * __ptr, poly128_t __val)
+ If the result is all zeroes for any half then the whole result is zeroes.
+ This is what the pairwise min reduction achieves. */
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vceq_p64 (poly64x1_t __a, poly64x1_t __b)
+ {
+ uint32x2_t __t_a = vreinterpret_u32_p64 (__a);
+@@ -14710,7 +16868,8 @@ vceq_p64 (poly64x1_t __a, poly64x1_t __b)
+ a reduction with max since if any two corresponding bits
+ in the two poly64_t's match, then the whole result must be all ones. */
+
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint64x1_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vtst_p64 (poly64x1_t __a, poly64x1_t __b)
+ {
+ uint32x2_t __t_a = vreinterpret_u32_p64 (__a);
+@@ -14720,31 +16879,36 @@ vtst_p64 (poly64x1_t __a, poly64x1_t __b)
+ return vreinterpret_u64_u32 (__m);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaeseq_u8 (uint8x16_t __data, uint8x16_t __key)
+ {
+ return __builtin_arm_crypto_aese (__data, __key);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaesdq_u8 (uint8x16_t __data, uint8x16_t __key)
+ {
+ return __builtin_arm_crypto_aesd (__data, __key);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaesmcq_u8 (uint8x16_t __data)
+ {
+ return __builtin_arm_crypto_aesmc (__data);
+ }
+
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint8x16_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vaesimcq_u8 (uint8x16_t __data)
+ {
+ return __builtin_arm_crypto_aesimc (__data);
+ }
+
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha1h_u32 (uint32_t __hash_e)
+ {
+ uint32x4_t __t = vdupq_n_u32 (0);
+@@ -14753,7 +16917,8 @@ vsha1h_u32 (uint32_t __hash_e)
+ return vgetq_lane_u32 (__t, 0);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha1cq_u32 (uint32x4_t __hash_abcd, uint32_t __hash_e, uint32x4_t __wk)
+ {
+ uint32x4_t __t = vdupq_n_u32 (0);
+@@ -14761,7 +16926,8 @@ vsha1cq_u32 (uint32x4_t __hash_abcd, uint32_t __hash_e, uint32x4_t __wk)
+ return __builtin_arm_crypto_sha1c (__hash_abcd, __t, __wk);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha1pq_u32 (uint32x4_t __hash_abcd, uint32_t __hash_e, uint32x4_t __wk)
+ {
+ uint32x4_t __t = vdupq_n_u32 (0);
+@@ -14769,7 +16935,8 @@ vsha1pq_u32 (uint32x4_t __hash_abcd, uint32_t __hash_e, uint32x4_t __wk)
+ return __builtin_arm_crypto_sha1p (__hash_abcd, __t, __wk);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha1mq_u32 (uint32x4_t __hash_abcd, uint32_t __hash_e, uint32x4_t __wk)
+ {
+ uint32x4_t __t = vdupq_n_u32 (0);
+@@ -14777,49 +16944,57 @@ vsha1mq_u32 (uint32x4_t __hash_abcd, uint32_t __hash_e, uint32x4_t __wk)
+ return __builtin_arm_crypto_sha1m (__hash_abcd, __t, __wk);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha1su0q_u32 (uint32x4_t __w0_3, uint32x4_t __w4_7, uint32x4_t __w8_11)
+ {
+ return __builtin_arm_crypto_sha1su0 (__w0_3, __w4_7, __w8_11);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha1su1q_u32 (uint32x4_t __tw0_3, uint32x4_t __w12_15)
+ {
+ return __builtin_arm_crypto_sha1su1 (__tw0_3, __w12_15);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha256hq_u32 (uint32x4_t __hash_abcd, uint32x4_t __hash_efgh, uint32x4_t __wk)
+ {
+ return __builtin_arm_crypto_sha256h (__hash_abcd, __hash_efgh, __wk);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha256h2q_u32 (uint32x4_t __hash_abcd, uint32x4_t __hash_efgh, uint32x4_t __wk)
+ {
+ return __builtin_arm_crypto_sha256h2 (__hash_abcd, __hash_efgh, __wk);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha256su0q_u32 (uint32x4_t __w0_3, uint32x4_t __w4_7)
+ {
+ return __builtin_arm_crypto_sha256su0 (__w0_3, __w4_7);
+ }
+
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
++__extension__ extern __inline uint32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vsha256su1q_u32 (uint32x4_t __tw0_3, uint32x4_t __w8_11, uint32x4_t __w12_15)
+ {
+ return __builtin_arm_crypto_sha256su1 (__tw0_3, __w8_11, __w12_15);
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_p64 (poly64_t __a, poly64_t __b)
+ {
+ return (poly128_t) __builtin_arm_crypto_vmullp64 ((uint64_t) __a, (uint64_t) __b);
+ }
+
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
++__extension__ extern __inline poly128_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ vmull_high_p64 (poly64x2_t __a, poly64x2_t __b)
+ {
+ poly64_t __t1 = vget_high_p64 (__a);
+@@ -14830,6 +17005,984 @@ vmull_high_p64 (poly64x2_t __a, poly64x2_t __b)
+
+ #pragma GCC pop_options
+
++ /* Intrinsics for FP16 instructions. */
++#pragma GCC push_options
++#pragma GCC target ("fpu=neon-fp-armv8")
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabd_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vabdv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabdq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vabdv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabs_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vabsv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vabsq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vabsv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vadd_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vaddv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vaddq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vaddv8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcage_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vcagev4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcageq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vcagev8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagt_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vcagtv4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcagtq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vcagtv8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcale_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vcalev4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaleq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vcalev8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcalt_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vcaltv4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcaltq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vcaltv8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceq_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vceqv4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vceqv8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqz_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vceqzv4hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vceqzq_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vceqzv8hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcge_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vcgev4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgeq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vcgev8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgez_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vcgezv4hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgezq_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vcgezv8hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgt_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vcgtv4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vcgtv8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtz_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vcgtzv4hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcgtzq_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vcgtzv8hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcle_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vclev4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcleq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vclev8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclez_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vclezv4hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclezq_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vclezv8hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vclt_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return (uint16x4_t)__builtin_neon_vcltv4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return (uint16x8_t)__builtin_neon_vcltv8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltz_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vcltzv4hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcltzq_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vcltzv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f16_s16 (int16x4_t __a)
++{
++ return (float16x4_t)__builtin_neon_vcvtsv4hi (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_f16_u16 (uint16x4_t __a)
++{
++ return (float16x4_t)__builtin_neon_vcvtuv4hi ((int16x4_t)__a);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_s16_f16 (float16x4_t __a)
++{
++ return (int16x4_t)__builtin_neon_vcvtsv4hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_u16_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vcvtuv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_f16_s16 (int16x8_t __a)
++{
++ return (float16x8_t)__builtin_neon_vcvtsv8hi (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_f16_u16 (uint16x8_t __a)
++{
++ return (float16x8_t)__builtin_neon_vcvtuv8hi ((int16x8_t)__a);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_s16_f16 (float16x8_t __a)
++{
++ return (int16x8_t)__builtin_neon_vcvtsv8hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_u16_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vcvtuv8hf (__a);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvta_s16_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vcvtasv4hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvta_u16_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vcvtauv4hf (__a);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtaq_s16_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vcvtasv8hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtaq_u16_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vcvtauv8hf (__a);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtm_s16_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vcvtmsv4hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtm_u16_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vcvtmuv4hf (__a);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmq_s16_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vcvtmsv8hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtmq_u16_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vcvtmuv8hf (__a);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtn_s16_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vcvtnsv4hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtn_u16_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vcvtnuv4hf (__a);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnq_s16_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vcvtnsv8hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtnq_u16_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vcvtnuv8hf (__a);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtp_s16_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vcvtpsv4hf (__a);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtp_u16_f16 (float16x4_t __a)
++{
++ return (uint16x4_t)__builtin_neon_vcvtpuv4hf (__a);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpq_s16_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vcvtpsv8hf (__a);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtpq_u16_f16 (float16x8_t __a)
++{
++ return (uint16x8_t)__builtin_neon_vcvtpuv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_f16_s16 (int16x4_t __a, const int __b)
++{
++ return __builtin_neon_vcvts_nv4hi (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_f16_u16 (uint16x4_t __a, const int __b)
++{
++ return __builtin_neon_vcvtu_nv4hi ((int16x4_t)__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_f16_s16 (int16x8_t __a, const int __b)
++{
++ return __builtin_neon_vcvts_nv8hi (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_f16_u16 (uint16x8_t __a, const int __b)
++{
++ return __builtin_neon_vcvtu_nv8hi ((int16x8_t)__a, __b);
++}
++
++__extension__ extern __inline int16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_s16_f16 (float16x4_t __a, const int __b)
++{
++ return __builtin_neon_vcvts_nv4hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvt_n_u16_f16 (float16x4_t __a, const int __b)
++{
++ return (uint16x4_t)__builtin_neon_vcvtu_nv4hf (__a, __b);
++}
++
++__extension__ extern __inline int16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_s16_f16 (float16x8_t __a, const int __b)
++{
++ return __builtin_neon_vcvts_nv8hf (__a, __b);
++}
++
++__extension__ extern __inline uint16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vcvtq_n_u16_f16 (float16x8_t __a, const int __b)
++{
++ return (uint16x8_t)__builtin_neon_vcvtu_nv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfma_f16 (float16x4_t __a, float16x4_t __b, float16x4_t __c)
++{
++ return __builtin_neon_vfmav4hf (__a, __b, __c);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmaq_f16 (float16x8_t __a, float16x8_t __b, float16x8_t __c)
++{
++ return __builtin_neon_vfmav8hf (__a, __b, __c);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfms_f16 (float16x4_t __a, float16x4_t __b, float16x4_t __c)
++{
++ return __builtin_neon_vfmsv4hf (__a, __b, __c);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vfmsq_f16 (float16x8_t __a, float16x8_t __b, float16x8_t __c)
++{
++ return __builtin_neon_vfmsv8hf (__a, __b, __c);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmax_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vmaxfv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vmaxfv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnm_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vmaxnmv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmaxnmq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vmaxnmv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmin_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vminfv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vminfv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnm_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vminnmv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vminnmq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vminnmv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vmulfv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_lane_f16 (float16x4_t __a, float16x4_t __b, const int __c)
++{
++ return __builtin_neon_vmul_lanev4hf (__a, __b, __c);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmul_n_f16 (float16x4_t __a, float16_t __b)
++{
++ return __builtin_neon_vmul_nv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vmulfv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_lane_f16 (float16x8_t __a, float16x4_t __b, const int __c)
++{
++ return __builtin_neon_vmul_lanev8hf (__a, __b, __c);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmulq_n_f16 (float16x8_t __a, float16_t __b)
++{
++ return __builtin_neon_vmul_nv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vneg_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vnegv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vnegq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vnegv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpadd_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vpaddv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmax_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vpmaxfv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vpmin_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vpminfv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpe_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vrecpev4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpeq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vrecpev8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrnd_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vrndv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vrndv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrnda_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vrndav4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndaq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vrndav8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndm_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vrndmv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndmq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vrndmv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndn_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vrndnv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndnq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vrndnv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndp_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vrndpv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndpq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vrndpv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndx_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vrndxv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrndxq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vrndxv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrte_f16 (float16x4_t __a)
++{
++ return __builtin_neon_vrsqrtev4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrteq_f16 (float16x8_t __a)
++{
++ return __builtin_neon_vrsqrtev8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecps_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vrecpsv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrecpsq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vrecpsv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrts_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vrsqrtsv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrsqrtsq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vrsqrtsv8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsub_f16 (float16x4_t __a, float16x4_t __b)
++{
++ return __builtin_neon_vsubv4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vsubq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ return __builtin_neon_vsubv8hf (__a, __b);
++}
++
++#endif /* __ARM_FEATURE_VECTOR_FP16_ARITHMETIC. */
++#pragma GCC pop_options
++
++ /* Half-precision data processing intrinsics. */
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbsl_f16 (uint16x4_t __a, float16x4_t __b, float16x4_t __c)
++{
++ return __builtin_neon_vbslv4hf ((int16x4_t)__a, __b, __c);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vbslq_f16 (uint16x8_t __a, float16x8_t __b, float16x8_t __c)
++{
++ return __builtin_neon_vbslv8hf ((int16x8_t)__a, __b, __c);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_n_f16 (float16_t __a)
++{
++ return __builtin_neon_vdup_nv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_n_f16 (float16_t __a)
++{
++ return __builtin_neon_vdup_nv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdup_lane_f16 (float16x4_t __a, const int __b)
++{
++ return __builtin_neon_vdup_lanev4hf (__a, __b);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vdupq_lane_f16 (float16x4_t __a, const int __b)
++{
++ return __builtin_neon_vdup_lanev8hf (__a, __b);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vext_f16 (float16x4_t __a, float16x4_t __b, const int __c)
++{
++ return __builtin_neon_vextv4hf (__a, __b, __c);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vextq_f16 (float16x8_t __a, float16x8_t __b, const int __c)
++{
++ return __builtin_neon_vextv8hf (__a, __b, __c);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmov_n_f16 (float16_t __a)
++{
++ return __builtin_neon_vdup_nv4hf (__a);
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vmovq_n_f16 (float16_t __a)
++{
++ return __builtin_neon_vdup_nv8hf (__a);
++}
++
++__extension__ extern __inline float16x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64_f16 (float16x4_t __a)
++{
++ return (float16x4_t)__builtin_shuffle (__a, (uint16x4_t){ 3, 2, 1, 0 });
++}
++
++__extension__ extern __inline float16x8_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vrev64q_f16 (float16x8_t __a)
++{
++ return
++ (float16x8_t)__builtin_shuffle (__a,
++ (uint16x8_t){ 3, 2, 1, 0, 7, 6, 5, 4 });
++}
++
++__extension__ extern __inline float16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrn_f16 (float16x4_t __a, float16x4_t __b)
++{
++ float16x4x2_t __rv;
++#ifdef __ARM_BIG_ENDIAN
++ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t){ 5, 1, 7, 3 });
++ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t){ 4, 0, 6, 2 });
++#else
++ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t){ 0, 4, 2, 6 });
++ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t){ 1, 5, 3, 7 });
++#endif
++ return __rv;
++}
++
++__extension__ extern __inline float16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vtrnq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ float16x8x2_t __rv;
++#ifdef __ARM_BIG_ENDIAN
++ __rv.val[0] = __builtin_shuffle (__a, __b,
++ (uint16x8_t){ 9, 1, 11, 3, 13, 5, 15, 7 });
++ __rv.val[1] = __builtin_shuffle (__a, __b,
++ (uint16x8_t){ 8, 0, 10, 2, 12, 4, 14, 6 });
++#else
++ __rv.val[0] = __builtin_shuffle (__a, __b,
++ (uint16x8_t){ 0, 8, 2, 10, 4, 12, 6, 14 });
++ __rv.val[1] = __builtin_shuffle (__a, __b,
++ (uint16x8_t){ 1, 9, 3, 11, 5, 13, 7, 15 });
++#endif
++ return __rv;
++}
++
++__extension__ extern __inline float16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzp_f16 (float16x4_t __a, float16x4_t __b)
++{
++ float16x4x2_t __rv;
++#ifdef __ARM_BIG_ENDIAN
++ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t){ 5, 7, 1, 3 });
++ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t){ 4, 6, 0, 2 });
++#else
++ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t){ 0, 2, 4, 6 });
++ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t){ 1, 3, 5, 7 });
++#endif
++ return __rv;
++}
++
++__extension__ extern __inline float16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vuzpq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ float16x8x2_t __rv;
++#ifdef __ARM_BIG_ENDIAN
++ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
++ { 5, 7, 1, 3, 13, 15, 9, 11 });
++ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
++ { 4, 6, 0, 2, 12, 14, 8, 10 });
++#else
++ __rv.val[0] = __builtin_shuffle (__a, __b,
++ (uint16x8_t){ 0, 2, 4, 6, 8, 10, 12, 14 });
++ __rv.val[1] = __builtin_shuffle (__a, __b,
++ (uint16x8_t){ 1, 3, 5, 7, 9, 11, 13, 15 });
++#endif
++ return __rv;
++}
++
++__extension__ extern __inline float16x4x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzip_f16 (float16x4_t __a, float16x4_t __b)
++{
++ float16x4x2_t __rv;
++#ifdef __ARM_BIG_ENDIAN
++ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t){ 6, 2, 7, 3 });
++ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t){ 4, 0, 5, 1 });
++#else
++ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t){ 0, 4, 1, 5 });
++ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t){ 2, 6, 3, 7 });
++#endif
++ return __rv;
++}
++
++__extension__ extern __inline float16x8x2_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vzipq_f16 (float16x8_t __a, float16x8_t __b)
++{
++ float16x8x2_t __rv;
++#ifdef __ARM_BIG_ENDIAN
++ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
++ { 10, 2, 11, 3, 8, 0, 9, 1 });
++ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
++ { 14, 6, 15, 7, 12, 4, 13, 5 });
++#else
++ __rv.val[0] = __builtin_shuffle (__a, __b,
++ (uint16x8_t){ 0, 8, 1, 9, 2, 10, 3, 11 });
++ __rv.val[1] = __builtin_shuffle (__a, __b,
++ (uint16x8_t){ 4, 12, 5, 13, 6, 14, 7, 15 });
++#endif
++ return __rv;
++}
++
++#endif
++
+ #ifdef __cplusplus
+ }
+ #endif
+--- a/src/gcc/config/arm/arm_neon_builtins.def
++++ b/src/gcc/config/arm/arm_neon_builtins.def
+@@ -19,6 +19,7 @@
+ <http://www.gnu.org/licenses/>. */
+
+ VAR2 (BINOP, vadd, v2sf, v4sf)
++VAR2 (BINOP, vadd, v8hf, v4hf)
+ VAR3 (BINOP, vaddls, v8qi, v4hi, v2si)
+ VAR3 (BINOP, vaddlu, v8qi, v4hi, v2si)
+ VAR3 (BINOP, vaddws, v8qi, v4hi, v2si)
+@@ -32,12 +33,15 @@ VAR8 (BINOP, vqaddu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
+ VAR3 (BINOP, vaddhn, v8hi, v4si, v2di)
+ VAR3 (BINOP, vraddhn, v8hi, v4si, v2di)
+ VAR2 (BINOP, vmulf, v2sf, v4sf)
++VAR2 (BINOP, vmulf, v8hf, v4hf)
+ VAR2 (BINOP, vmulp, v8qi, v16qi)
+ VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
+ VAR3 (TERNOP, vmlals, v8qi, v4hi, v2si)
+ VAR3 (TERNOP, vmlalu, v8qi, v4hi, v2si)
+ VAR2 (TERNOP, vfma, v2sf, v4sf)
++VAR2 (TERNOP, vfma, v4hf, v8hf)
+ VAR2 (TERNOP, vfms, v2sf, v4sf)
++VAR2 (TERNOP, vfms, v4hf, v8hf)
+ VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
+ VAR3 (TERNOP, vmlsls, v8qi, v4hi, v2si)
+ VAR3 (TERNOP, vmlslu, v8qi, v4hi, v2si)
+@@ -94,6 +98,7 @@ VAR8 (TERNOP_IMM, vsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
+ VAR8 (TERNOP_IMM, vrsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
+ VAR8 (TERNOP_IMM, vrsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
+ VAR2 (BINOP, vsub, v2sf, v4sf)
++VAR2 (BINOP, vsub, v8hf, v4hf)
+ VAR3 (BINOP, vsubls, v8qi, v4hi, v2si)
+ VAR3 (BINOP, vsublu, v8qi, v4hi, v2si)
+ VAR3 (BINOP, vsubws, v8qi, v4hi, v2si)
+@@ -111,12 +116,27 @@ VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
+ VAR6 (BINOP, vcgtu, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR2 (BINOP, vcage, v2sf, v4sf)
+ VAR2 (BINOP, vcagt, v2sf, v4sf)
++VAR2 (BINOP, vcage, v4hf, v8hf)
++VAR2 (BINOP, vcagt, v4hf, v8hf)
++VAR2 (BINOP, vcale, v4hf, v8hf)
++VAR2 (BINOP, vcalt, v4hf, v8hf)
++VAR2 (BINOP, vceq, v4hf, v8hf)
++VAR2 (BINOP, vcge, v4hf, v8hf)
++VAR2 (BINOP, vcgt, v4hf, v8hf)
++VAR2 (BINOP, vcle, v4hf, v8hf)
++VAR2 (BINOP, vclt, v4hf, v8hf)
++VAR2 (UNOP, vceqz, v4hf, v8hf)
++VAR2 (UNOP, vcgez, v4hf, v8hf)
++VAR2 (UNOP, vcgtz, v4hf, v8hf)
++VAR2 (UNOP, vclez, v4hf, v8hf)
++VAR2 (UNOP, vcltz, v4hf, v8hf)
+ VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR6 (BINOP, vabds, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR6 (BINOP, vabdu, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR2 (BINOP, vabdf, v2sf, v4sf)
+ VAR3 (BINOP, vabdls, v8qi, v4hi, v2si)
+ VAR3 (BINOP, vabdlu, v8qi, v4hi, v2si)
++VAR2 (BINOP, vabd, v8hf, v4hf)
+
+ VAR6 (TERNOP, vabas, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR6 (TERNOP, vabau, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+@@ -126,27 +146,38 @@ VAR3 (TERNOP, vabalu, v8qi, v4hi, v2si)
+ VAR6 (BINOP, vmaxs, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR6 (BINOP, vmaxu, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR2 (BINOP, vmaxf, v2sf, v4sf)
++VAR2 (BINOP, vmaxf, v8hf, v4hf)
++VAR4 (BINOP, vmaxnm, v2sf, v4sf, v4hf, v8hf)
+ VAR6 (BINOP, vmins, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR6 (BINOP, vminu, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR2 (BINOP, vminf, v2sf, v4sf)
++VAR2 (BINOP, vminf, v4hf, v8hf)
++VAR4 (BINOP, vminnm, v2sf, v4sf, v8hf, v4hf)
+
+ VAR3 (BINOP, vpmaxs, v8qi, v4hi, v2si)
+ VAR3 (BINOP, vpmaxu, v8qi, v4hi, v2si)
+ VAR1 (BINOP, vpmaxf, v2sf)
++VAR1 (BINOP, vpmaxf, v4hf)
+ VAR3 (BINOP, vpmins, v8qi, v4hi, v2si)
+ VAR3 (BINOP, vpminu, v8qi, v4hi, v2si)
+ VAR1 (BINOP, vpminf, v2sf)
++VAR1 (BINOP, vpminf, v4hf)
+
+ VAR4 (BINOP, vpadd, v8qi, v4hi, v2si, v2sf)
++VAR1 (BINOP, vpadd, v4hf)
+ VAR6 (UNOP, vpaddls, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR6 (UNOP, vpaddlu, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR6 (BINOP, vpadals, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR6 (BINOP, vpadalu, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR2 (BINOP, vrecps, v2sf, v4sf)
+ VAR2 (BINOP, vrsqrts, v2sf, v4sf)
++VAR2 (BINOP, vrecps, v4hf, v8hf)
++VAR2 (BINOP, vrsqrts, v4hf, v8hf)
+ VAR8 (TERNOP_IMM, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
+ VAR8 (TERNOP_IMM, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
+ VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
++VAR2 (UNOP, vabs, v8hf, v4hf)
++VAR2 (UNOP, vneg, v8hf, v4hf)
+ 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)
+@@ -155,8 +186,16 @@ VAR6 (UNOP, vclz, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
+ VAR5 (BSWAP, bswap, v4hi, v8hi, v2si, v4si, v2di)
+ VAR2 (UNOP, vcnt, v8qi, v16qi)
+ VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf)
++VAR2 (UNOP, vrecpe, v8hf, v4hf)
+ VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf)
++VAR2 (UNOP, vrsqrte, v4hf, v8hf)
+ VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
++VAR2 (UNOP, vrnd, v8hf, v4hf)
++VAR2 (UNOP, vrnda, v8hf, v4hf)
++VAR2 (UNOP, vrndm, v8hf, v4hf)
++VAR2 (UNOP, vrndn, v8hf, v4hf)
++VAR2 (UNOP, vrndp, v8hf, v4hf)
++VAR2 (UNOP, vrndx, v8hf, v4hf)
+ /* FIXME: vget_lane supports more variants than this! */
+ VAR10 (GETLANE, vget_lane,
+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
+@@ -166,8 +205,10 @@ VAR10 (SETLANE, vset_lane,
+ VAR5 (UNOP, vcreate, v8qi, v4hi, v2si, v2sf, di)
+ VAR10 (UNOP, vdup_n,
+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
++VAR2 (UNOP, vdup_n, v8hf, v4hf)
+ VAR10 (GETLANE, vdup_lane,
+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
++VAR2 (GETLANE, vdup_lane, v8hf, v4hf)
+ VAR6 (COMBINE, vcombine, v8qi, v4hi, v4hf, v2si, v2sf, di)
+ VAR6 (UNOP, vget_high, v16qi, v8hi, v8hf, v4si, v4sf, v2di)
+ VAR6 (UNOP, vget_low, v16qi, v8hi, v8hf, v4si, v4sf, v2di)
+@@ -177,7 +218,7 @@ VAR3 (UNOP, vqmovnu, v8hi, v4si, v2di)
+ VAR3 (UNOP, vqmovun, v8hi, v4si, v2di)
+ VAR3 (UNOP, vmovls, v8qi, v4hi, v2si)
+ VAR3 (UNOP, vmovlu, v8qi, v4hi, v2si)
+-VAR6 (SETLANE, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
++VAR8 (SETLANE, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf, v4hf, v8hf)
+ VAR6 (MAC_LANE, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
+ VAR2 (MAC_LANE, vmlals_lane, v4hi, v2si)
+ VAR2 (MAC_LANE, vmlalu_lane, v4hi, v2si)
+@@ -186,7 +227,7 @@ VAR6 (MAC_LANE, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
+ VAR2 (MAC_LANE, vmlsls_lane, v4hi, v2si)
+ VAR2 (MAC_LANE, vmlslu_lane, v4hi, v2si)
+ VAR2 (MAC_LANE, vqdmlsl_lane, v4hi, v2si)
+-VAR6 (BINOP, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
++VAR8 (BINOP, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf, v4hf, v8hf)
+ VAR6 (MAC_N, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
+ VAR2 (MAC_N, vmlals_n, v4hi, v2si)
+ VAR2 (MAC_N, vmlalu_n, v4hi, v2si)
+@@ -197,17 +238,27 @@ VAR2 (MAC_N, vmlslu_n, v4hi, v2si)
+ VAR2 (MAC_N, vqdmlsl_n, v4hi, v2si)
+ VAR10 (SETLANE, vext,
+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
++VAR2 (SETLANE, vext, v8hf, v4hf)
+ VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
+ VAR4 (UNOP, vrev32, v8qi, v4hi, v16qi, v8hi)
+ VAR2 (UNOP, vrev16, v8qi, v16qi)
+ VAR4 (UNOP, vcvts, v2si, v2sf, v4si, v4sf)
++VAR2 (UNOP, vcvts, v4hi, v8hi)
++VAR2 (UNOP, vcvts, v4hf, v8hf)
++VAR2 (UNOP, vcvtu, v4hi, v8hi)
++VAR2 (UNOP, vcvtu, v4hf, v8hf)
+ VAR4 (UNOP, vcvtu, v2si, v2sf, v4si, v4sf)
+ VAR4 (BINOP, vcvts_n, v2si, v2sf, v4si, v4sf)
+ VAR4 (BINOP, vcvtu_n, v2si, v2sf, v4si, v4sf)
++VAR2 (BINOP, vcvts_n, v4hf, v8hf)
++VAR2 (BINOP, vcvtu_n, v4hi, v8hi)
++VAR2 (BINOP, vcvts_n, v4hi, v8hi)
++VAR2 (BINOP, vcvtu_n, v4hf, v8hf)
+ VAR1 (UNOP, vcvtv4sf, v4hf)
+ VAR1 (UNOP, vcvtv4hf, v4sf)
+ VAR10 (TERNOP, vbsl,
+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
++VAR2 (TERNOP, vbsl, v8hf, v4hf)
+ VAR2 (UNOP, copysignf, v2sf, v4sf)
+ VAR2 (UNOP, vrintn, v2sf, v4sf)
+ VAR2 (UNOP, vrinta, v2sf, v4sf)
+@@ -219,6 +270,14 @@ VAR1 (UNOP, vcvtav2sf, v2si)
+ VAR1 (UNOP, vcvtav4sf, v4si)
+ VAR1 (UNOP, vcvtauv2sf, v2si)
+ VAR1 (UNOP, vcvtauv4sf, v4si)
++VAR2 (UNOP, vcvtas, v4hf, v8hf)
++VAR2 (UNOP, vcvtau, v4hf, v8hf)
++VAR2 (UNOP, vcvtms, v4hf, v8hf)
++VAR2 (UNOP, vcvtmu, v4hf, v8hf)
++VAR2 (UNOP, vcvtns, v4hf, v8hf)
++VAR2 (UNOP, vcvtnu, v4hf, v8hf)
++VAR2 (UNOP, vcvtps, v4hf, v8hf)
++VAR2 (UNOP, vcvtpu, v4hf, v8hf)
+ VAR1 (UNOP, vcvtpv2sf, v2si)
+ VAR1 (UNOP, vcvtpv4sf, v4si)
+ VAR1 (UNOP, vcvtpuv2sf, v2si)
+--- /dev/null
++++ b/src/gcc/config/arm/arm_vfp_builtins.def
+@@ -0,0 +1,51 @@
++/* VFP instruction builtin definitions.
++ Copyright (C) 2016 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published
++ by the Free Software Foundation; either version 3, or (at your
++ option) any later version.
++
++ GCC is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
++ License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++/* This file lists the builtins that may be available when VFP is enabled but
++ not NEON is enabled. The entries otherwise have the same requirements and
++ generate the same structures as those in the arm_neon_builtins.def. */
++
++/* FP16 Arithmetic instructions. */
++VAR1 (UNOP, vabs, hf)
++VAR2 (UNOP, vcvths, hf, si)
++VAR2 (UNOP, vcvthu, hf, si)
++VAR1 (UNOP, vcvtahs, si)
++VAR1 (UNOP, vcvtahu, si)
++VAR1 (UNOP, vcvtmhs, si)
++VAR1 (UNOP, vcvtmhu, si)
++VAR1 (UNOP, vcvtnhs, si)
++VAR1 (UNOP, vcvtnhu, si)
++VAR1 (UNOP, vcvtphs, si)
++VAR1 (UNOP, vcvtphu, si)
++VAR1 (UNOP, vrnd, hf)
++VAR1 (UNOP, vrnda, hf)
++VAR1 (UNOP, vrndi, hf)
++VAR1 (UNOP, vrndm, hf)
++VAR1 (UNOP, vrndn, hf)
++VAR1 (UNOP, vrndp, hf)
++VAR1 (UNOP, vrndx, hf)
++VAR1 (UNOP, vsqrt, hf)
++
++VAR2 (BINOP, vcvths_n, hf, si)
++VAR2 (BINOP, vcvthu_n, hf, si)
++VAR1 (BINOP, vmaxnm, hf)
++VAR1 (BINOP, vminnm, hf)
++
++VAR1 (TERNOP, vfma, hf)
++VAR1 (TERNOP, vfms, hf)
+--- a/src/gcc/config/arm/bpabi.h
++++ b/src/gcc/config/arm/bpabi.h
+@@ -75,6 +75,9 @@
+ |mcpu=cortex-a57.cortex-a53 \
+ |mcpu=cortex-a72 \
+ |mcpu=cortex-a72.cortex-a53 \
++ |mcpu=cortex-a73 \
++ |mcpu=cortex-a73.cortex-a35 \
++ |mcpu=cortex-a73.cortex-a53 \
+ |mcpu=exynos-m1 \
+ |mcpu=qdf24xx \
+ |mcpu=xgene1 \
+@@ -90,6 +93,11 @@
+ |march=armv8-a+crc \
+ |march=armv8.1-a \
+ |march=armv8.1-a+crc \
++ |march=armv8.2-a \
++ |march=armv8.2-a+fp16 \
++ |march=armv8-m.base|mcpu=cortex-m23 \
++ |march=armv8-m.main \
++ |march=armv8-m.main+dsp|mcpu=cortex-m33 \
+ :%{!r:--be8}}}"
+ #else
+ #define BE8_LINK_SPEC \
+@@ -105,6 +113,9 @@
+ |mcpu=cortex-a57.cortex-a53 \
+ |mcpu=cortex-a72 \
+ |mcpu=cortex-a72.cortex-a53 \
++ |mcpu=cortex-a73 \
++ |mcpu=cortex-a73.cortex-a35 \
++ |mcpu=cortex-a73.cortex-a53 \
+ |mcpu=exynos-m1 \
+ |mcpu=qdf24xx \
+ |mcpu=xgene1 \
+@@ -121,6 +132,11 @@
+ |march=armv8-a+crc \
+ |march=armv8.1-a \
+ |march=armv8.1-a+crc \
++ |march=armv8.2-a \
++ |march=armv8.2-a+fp16 \
++ |march=armv8-m.base|mcpu=cortex-m23 \
++ |march=armv8-m.main \
++ |march=armv8-m.main+dsp|mcpu=cortex-m33 \
+ :%{!r:--be8}}}"
+ #endif
+
+--- a/src/gcc/config/arm/constraints.md
++++ b/src/gcc/config/arm/constraints.md
+@@ -34,11 +34,13 @@
+ ;; in ARM/Thumb-2 state: Da, Db, Dc, Dd, Dn, Dl, DL, Do, Dv, Dy, Di, Dt, Dp, Dz
+ ;; in Thumb-1 state: Pa, Pb, Pc, Pd, Pe
+ ;; in Thumb-2 state: Pj, PJ, Ps, Pt, Pu, Pv, Pw, Px, Py
++;; in all states: Pf
+
+ ;; The following memory constraints have been used:
+-;; in ARM/Thumb-2 state: Q, Uh, Ut, Uv, Uy, Un, Um, Us
++;; in ARM/Thumb-2 state: Uh, Ut, Uv, Uy, Un, Um, Us
+ ;; in ARM state: Uq
+ ;; in Thumb state: Uu, Uw
++;; in all states: Q
+
+
+ (define_register_constraint "t" "TARGET_32BIT ? VFP_LO_REGS : NO_REGS"
+@@ -66,7 +68,7 @@
+
+ (define_constraint "j"
+ "A constant suitable for a MOVW instruction. (ARM/Thumb-2)"
+- (and (match_test "TARGET_32BIT && arm_arch_thumb2")
++ (and (match_test "TARGET_HAVE_MOVT")
+ (ior (and (match_code "high")
+ (match_test "arm_valid_symbolic_address_p (XEXP (op, 0))"))
+ (and (match_code "const_int")
+@@ -180,6 +182,13 @@
+ (and (match_code "const_int")
+ (match_test "TARGET_THUMB1 && ival >= 256 && ival <= 510")))
+
++(define_constraint "Pf"
++ "Memory models except relaxed, consume or release ones."
++ (and (match_code "const_int")
++ (match_test "!is_mm_relaxed (memmodel_from_int (ival))
++ && !is_mm_consume (memmodel_from_int (ival))
++ && !is_mm_release (memmodel_from_int (ival))")))
++
+ (define_constraint "Ps"
+ "@internal In Thumb-2 state a constant in the range -255 to +255"
+ (and (match_code "const_int")
+@@ -333,13 +342,13 @@
+ "@internal
+ In ARM/ Thumb2 a const_double which can be used with a vcvt.f32.s32 with fract bits operation"
+ (and (match_code "const_double")
+- (match_test "TARGET_32BIT && TARGET_VFP && vfp3_const_double_for_fract_bits (op)")))
++ (match_test "TARGET_32BIT && vfp3_const_double_for_fract_bits (op)")))
+
+ (define_constraint "Dp"
+ "@internal
+ In ARM/ Thumb2 a const_double which can be used with a vcvt.s32.f32 with bits operation"
+ (and (match_code "const_double")
+- (match_test "TARGET_32BIT && TARGET_VFP
++ (match_test "TARGET_32BIT
+ && vfp3_const_double_for_bits (op) > 0")))
+
+ (define_register_constraint "Ts" "(arm_restrict_it) ? LO_REGS : GENERAL_REGS"
+@@ -407,7 +416,7 @@
+
+ (define_memory_constraint "Q"
+ "@internal
+- In ARM/Thumb-2 state an address that is a single base register."
++ An address that is a single base register."
+ (and (match_code "mem")
+ (match_test "REG_P (XEXP (op, 0))")))
+
+--- a/src/gcc/config/arm/cortex-a53.md
++++ b/src/gcc/config/arm/cortex-a53.md
+@@ -30,6 +30,7 @@
+
+ (define_cpu_unit "cortex_a53_slot0" "cortex_a53")
+ (define_cpu_unit "cortex_a53_slot1" "cortex_a53")
++(final_presence_set "cortex_a53_slot1" "cortex_a53_slot0")
+
+ (define_reservation "cortex_a53_slot_any"
+ "cortex_a53_slot0\
+@@ -71,41 +72,43 @@
+
+ (define_insn_reservation "cortex_a53_shift" 2
+ (and (eq_attr "tune" "cortexa53")
+- (eq_attr "type" "adr,shift_imm,shift_reg,mov_imm,mvn_imm"))
++ (eq_attr "type" "adr,shift_imm,mov_imm,mvn_imm,mov_shift"))
+ "cortex_a53_slot_any")
+
+-(define_insn_reservation "cortex_a53_alu_rotate_imm" 2
++(define_insn_reservation "cortex_a53_shift_reg" 2
+ (and (eq_attr "tune" "cortexa53")
+- (eq_attr "type" "rotate_imm"))
+- "(cortex_a53_slot1)
+- | (cortex_a53_single_issue)")
++ (eq_attr "type" "shift_reg,mov_shift_reg"))
++ "cortex_a53_slot_any+cortex_a53_hazard")
+
+ (define_insn_reservation "cortex_a53_alu" 3
+ (and (eq_attr "tune" "cortexa53")
+ (eq_attr "type" "alu_imm,alus_imm,logic_imm,logics_imm,
+ alu_sreg,alus_sreg,logic_reg,logics_reg,
+ adc_imm,adcs_imm,adc_reg,adcs_reg,
+- bfm,csel,clz,rbit,rev,alu_dsp_reg,
+- mov_reg,mvn_reg,
+- mrs,multiple,no_insn"))
++ csel,clz,rbit,rev,alu_dsp_reg,
++ mov_reg,mvn_reg,mrs,multiple,no_insn"))
+ "cortex_a53_slot_any")
+
+ (define_insn_reservation "cortex_a53_alu_shift" 3
+ (and (eq_attr "tune" "cortexa53")
+ (eq_attr "type" "alu_shift_imm,alus_shift_imm,
+ crc,logic_shift_imm,logics_shift_imm,
+- alu_ext,alus_ext,
+- extend,mov_shift,mvn_shift"))
++ alu_ext,alus_ext,bfm,bfx,extend,mvn_shift"))
+ "cortex_a53_slot_any")
+
+ (define_insn_reservation "cortex_a53_alu_shift_reg" 3
+ (and (eq_attr "tune" "cortexa53")
+ (eq_attr "type" "alu_shift_reg,alus_shift_reg,
+ logic_shift_reg,logics_shift_reg,
+- mov_shift_reg,mvn_shift_reg"))
++ mvn_shift_reg"))
+ "cortex_a53_slot_any+cortex_a53_hazard")
+
+-(define_insn_reservation "cortex_a53_mul" 3
++(define_insn_reservation "cortex_a53_alu_extr" 3
++ (and (eq_attr "tune" "cortexa53")
++ (eq_attr "type" "rotate_imm"))
++ "cortex_a53_slot1|cortex_a53_single_issue")
++
++(define_insn_reservation "cortex_a53_mul" 4
+ (and (eq_attr "tune" "cortexa53")
+ (ior (eq_attr "mul32" "yes")
+ (eq_attr "mul64" "yes")))
+@@ -189,49 +192,43 @@
+ (define_insn_reservation "cortex_a53_branch" 0
+ (and (eq_attr "tune" "cortexa53")
+ (eq_attr "type" "branch,call"))
+- "cortex_a53_slot_any,cortex_a53_branch")
++ "cortex_a53_slot_any+cortex_a53_branch")
+
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; General-purpose register bypasses
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+-;; Model bypasses for unshifted operands to ALU instructions.
++;; Model bypasses for ALU to ALU instructions.
++
++(define_bypass 0 "cortex_a53_shift*"
++ "cortex_a53_alu")
+
+-(define_bypass 1 "cortex_a53_shift"
+- "cortex_a53_shift")
++(define_bypass 1 "cortex_a53_shift*"
++ "cortex_a53_shift*,cortex_a53_alu_*")
+
+-(define_bypass 1 "cortex_a53_alu,
+- cortex_a53_alu_shift*,
+- cortex_a53_alu_rotate_imm,
+- cortex_a53_shift"
++(define_bypass 1 "cortex_a53_alu*"
+ "cortex_a53_alu")
+
+-(define_bypass 2 "cortex_a53_alu,
+- cortex_a53_alu_shift*"
++(define_bypass 1 "cortex_a53_alu*"
+ "cortex_a53_alu_shift*"
+ "aarch_forward_to_shift_is_not_shifted_reg")
+
+-;; In our model, we allow any general-purpose register operation to
+-;; bypass to the accumulator operand of an integer MADD-like operation.
++(define_bypass 2 "cortex_a53_alu*"
++ "cortex_a53_alu_*,cortex_a53_shift*")
++
++;; Model a bypass from MUL/MLA to MLA instructions.
+
+-(define_bypass 1 "cortex_a53_alu*,
+- cortex_a53_load*,
+- cortex_a53_mul"
++(define_bypass 1 "cortex_a53_mul"
+ "cortex_a53_mul"
+ "aarch_accumulator_forwarding")
+
+-;; Model a bypass from MLA/MUL to many ALU instructions.
++;; Model a bypass from MUL/MLA to ALU instructions.
+
+ (define_bypass 2 "cortex_a53_mul"
+- "cortex_a53_alu,
+- cortex_a53_alu_shift*")
+-
+-;; We get neater schedules by allowing an MLA/MUL to feed an
+-;; early load address dependency to a load.
++ "cortex_a53_alu")
+
+-(define_bypass 2 "cortex_a53_mul"
+- "cortex_a53_load*"
+- "arm_early_load_addr_dep")
++(define_bypass 3 "cortex_a53_mul"
++ "cortex_a53_alu_*,cortex_a53_shift*")
+
+ ;; Model bypasses for loads which are to be consumed by the ALU.
+
+@@ -239,47 +236,46 @@
+ "cortex_a53_alu")
+
+ (define_bypass 3 "cortex_a53_load1"
+- "cortex_a53_alu_shift*")
++ "cortex_a53_alu_*,cortex_a53_shift*")
++
++(define_bypass 3 "cortex_a53_load2"
++ "cortex_a53_alu")
+
+ ;; Model a bypass for ALU instructions feeding stores.
+
+-(define_bypass 1 "cortex_a53_alu*"
+- "cortex_a53_store1,
+- cortex_a53_store2,
+- cortex_a53_store3plus"
++(define_bypass 0 "cortex_a53_alu*,cortex_a53_shift*"
++ "cortex_a53_store*"
+ "arm_no_early_store_addr_dep")
+
+ ;; Model a bypass for load and multiply instructions feeding stores.
+
+-(define_bypass 2 "cortex_a53_mul,
+- cortex_a53_load1,
+- cortex_a53_load2,
+- cortex_a53_load3plus"
+- "cortex_a53_store1,
+- cortex_a53_store2,
+- cortex_a53_store3plus"
++(define_bypass 1 "cortex_a53_mul,
++ cortex_a53_load*"
++ "cortex_a53_store*"
+ "arm_no_early_store_addr_dep")
+
+ ;; Model a GP->FP register move as similar to stores.
+
+-(define_bypass 1 "cortex_a53_alu*"
++(define_bypass 0 "cortex_a53_alu*,cortex_a53_shift*"
+ "cortex_a53_r2f")
+
+-(define_bypass 2 "cortex_a53_mul,
++(define_bypass 1 "cortex_a53_mul,
+ cortex_a53_load1,
+- cortex_a53_load2,
+- cortex_a53_load3plus"
++ cortex_a53_load2"
+ "cortex_a53_r2f")
+
+-;; Shifts feeding Load/Store addresses may not be ready in time.
++(define_bypass 2 "cortex_a53_alu*"
++ "cortex_a53_r2f_cvt")
+
+-(define_bypass 3 "cortex_a53_shift"
+- "cortex_a53_load*"
+- "arm_early_load_addr_dep")
++(define_bypass 3 "cortex_a53_mul,
++ cortex_a53_load1,
++ cortex_a53_load2"
++ "cortex_a53_r2f_cvt")
+
+-(define_bypass 3 "cortex_a53_shift"
+- "cortex_a53_store*"
+- "arm_early_store_addr_dep")
++;; Model flag forwarding to branches.
++
++(define_bypass 0 "cortex_a53_alu*,cortex_a53_shift*"
++ "cortex_a53_branch")
+
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Floating-point/Advanced SIMD.
+@@ -535,19 +531,25 @@
+ ;; Floating-point to/from core transfers.
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+-(define_insn_reservation "cortex_a53_r2f" 6
++(define_insn_reservation "cortex_a53_r2f" 2
+ (and (eq_attr "tune" "cortexa53")
+- (eq_attr "type" "f_mcr,f_mcrr,f_cvti2f,
+- neon_from_gp, neon_from_gp_q"))
+- "cortex_a53_slot_any,cortex_a53_store,
+- nothing,cortex_a53_fp_alu")
++ (eq_attr "type" "f_mcr,f_mcrr"))
++ "cortex_a53_slot_any,cortex_a53_fp_alu")
+
+-(define_insn_reservation "cortex_a53_f2r" 6
++(define_insn_reservation "cortex_a53_f2r" 4
+ (and (eq_attr "tune" "cortexa53")
+- (eq_attr "type" "f_mrc,f_mrrc,f_cvtf2i,
+- neon_to_gp, neon_to_gp_q"))
+- "cortex_a53_slot_any,cortex_a53_fp_alu,
+- nothing,cortex_a53_store")
++ (eq_attr "type" "f_mrc,f_mrrc"))
++ "cortex_a53_slot_any,cortex_a53_fp_alu")
++
++(define_insn_reservation "cortex_a53_r2f_cvt" 4
++ (and (eq_attr "tune" "cortexa53")
++ (eq_attr "type" "f_cvti2f, neon_from_gp, neon_from_gp_q"))
++ "cortex_a53_slot_any,cortex_a53_fp_alu")
++
++(define_insn_reservation "cortex_a53_f2r_cvt" 5
++ (and (eq_attr "tune" "cortexa53")
++ (eq_attr "type" "f_cvtf2i, neon_to_gp, neon_to_gp_q"))
++ "cortex_a53_slot_any,cortex_a53_fp_alu")
+
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Floating-point flag transfer.
+--- a/src/gcc/config/arm/cortex-a57.md
++++ b/src/gcc/config/arm/cortex-a57.md
+@@ -297,7 +297,7 @@
+ (eq_attr "type" "alu_imm,alus_imm,logic_imm,logics_imm,\
+ alu_sreg,alus_sreg,logic_reg,logics_reg,\
+ adc_imm,adcs_imm,adc_reg,adcs_reg,\
+- adr,bfm,clz,rbit,rev,alu_dsp_reg,\
++ adr,bfx,extend,clz,rbit,rev,alu_dsp_reg,\
+ rotate_imm,shift_imm,shift_reg,\
+ mov_imm,mov_reg,\
+ mvn_imm,mvn_reg,\
+@@ -307,7 +307,7 @@
+ ;; ALU ops with immediate shift
+ (define_insn_reservation "cortex_a57_alu_shift" 3
+ (and (eq_attr "tune" "cortexa57")
+- (eq_attr "type" "extend,\
++ (eq_attr "type" "bfm,\
+ alu_shift_imm,alus_shift_imm,\
+ crc,logic_shift_imm,logics_shift_imm,\
+ mov_shift,mvn_shift"))
+@@ -726,7 +726,7 @@
+
+ (define_insn_reservation "cortex_a57_fp_cpys" 4
+ (and (eq_attr "tune" "cortexa57")
+- (eq_attr "type" "fmov"))
++ (eq_attr "type" "fmov,fcsel"))
+ "(ca57_cx1|ca57_cx2)")
+
+ (define_insn_reservation "cortex_a57_fp_divs" 12
+--- a/src/gcc/config/arm/cortex-a8-neon.md
++++ b/src/gcc/config/arm/cortex-a8-neon.md
+@@ -357,30 +357,34 @@
+ (eq_attr "type" "fmuls"))
+ "cortex_a8_vfp,cortex_a8_vfplite*11")
+
++;; Don't model a reservation for more than 15 cycles as this explodes the
++;; state space of the automaton for little gain. It is unlikely that the
++;; scheduler will find enough instructions to hide the full latency of the
++;; instructions.
+ (define_insn_reservation "cortex_a8_vfp_muld" 17
+ (and (eq_attr "tune" "cortexa8")
+ (eq_attr "type" "fmuld"))
+- "cortex_a8_vfp,cortex_a8_vfplite*16")
++ "cortex_a8_vfp,cortex_a8_vfplite*15")
+
+ (define_insn_reservation "cortex_a8_vfp_macs" 21
+ (and (eq_attr "tune" "cortexa8")
+ (eq_attr "type" "fmacs,ffmas"))
+- "cortex_a8_vfp,cortex_a8_vfplite*20")
++ "cortex_a8_vfp,cortex_a8_vfplite*15")
+
+ (define_insn_reservation "cortex_a8_vfp_macd" 26
+ (and (eq_attr "tune" "cortexa8")
+ (eq_attr "type" "fmacd,ffmad"))
+- "cortex_a8_vfp,cortex_a8_vfplite*25")
++ "cortex_a8_vfp,cortex_a8_vfplite*15")
+
+ (define_insn_reservation "cortex_a8_vfp_divs" 37
+ (and (eq_attr "tune" "cortexa8")
+ (eq_attr "type" "fdivs, fsqrts"))
+- "cortex_a8_vfp,cortex_a8_vfplite*36")
++ "cortex_a8_vfp,cortex_a8_vfplite*15")
+
+ (define_insn_reservation "cortex_a8_vfp_divd" 65
+ (and (eq_attr "tune" "cortexa8")
+ (eq_attr "type" "fdivd, fsqrtd"))
+- "cortex_a8_vfp,cortex_a8_vfplite*64")
++ "cortex_a8_vfp,cortex_a8_vfplite*15")
+
+ ;; Comparisons can actually take 7 cycles sometimes instead of four,
+ ;; but given all the other instructions lumped into type=ffarith that
+--- a/src/gcc/config/arm/crypto.md
++++ b/src/gcc/config/arm/crypto.md
+@@ -18,14 +18,27 @@
+ ;; along with GCC; see the file COPYING3. If not see
+ ;; <http://www.gnu.org/licenses/>.
+
++
++;; When AES/AESMC fusion is enabled we want the register allocation to
++;; look like:
++;; AESE Vn, _
++;; AESMC Vn, Vn
++;; So prefer to tie operand 1 to operand 0 when fusing.
++
+ (define_insn "crypto_<crypto_pattern>"
+- [(set (match_operand:<crypto_mode> 0 "register_operand" "=w")
++ [(set (match_operand:<crypto_mode> 0 "register_operand" "=w,w")
+ (unspec:<crypto_mode> [(match_operand:<crypto_mode> 1
+- "register_operand" "w")]
++ "register_operand" "0,w")]
+ CRYPTO_UNARY))]
+ "TARGET_CRYPTO"
+ "<crypto_pattern>.<crypto_size_sfx>\\t%q0, %q1"
+- [(set_attr "type" "<crypto_type>")]
++ [(set_attr "type" "<crypto_type>")
++ (set_attr_alternative "enabled"
++ [(if_then_else (match_test
++ "arm_fusion_enabled_p (tune_params::FUSE_AES_AESMC)")
++ (const_string "yes" )
++ (const_string "no"))
++ (const_string "yes")])]
+ )
+
+ (define_insn "crypto_<crypto_pattern>"
+--- a/src/gcc/config/arm/driver-arm.c
++++ b/src/gcc/config/arm/driver-arm.c
+@@ -46,6 +46,12 @@ static struct vendor_cpu arm_cpu_table[] = {
+ {"0xc0d", "armv7ve", "cortex-a12"},
+ {"0xc0e", "armv7ve", "cortex-a17"},
+ {"0xc0f", "armv7ve", "cortex-a15"},
++ {"0xd01", "armv8-a+crc", "cortex-a32"},
++ {"0xd04", "armv8-a+crc", "cortex-a35"},
++ {"0xd03", "armv8-a+crc", "cortex-a53"},
++ {"0xd07", "armv8-a+crc", "cortex-a57"},
++ {"0xd08", "armv8-a+crc", "cortex-a72"},
++ {"0xd09", "armv8-a+crc", "cortex-a73"},
+ {"0xc14", "armv7-r", "cortex-r4"},
+ {"0xc15", "armv7-r", "cortex-r5"},
+ {"0xc20", "armv6-m", "cortex-m0"},
+--- a/src/gcc/config/arm/elf.h
++++ b/src/gcc/config/arm/elf.h
+@@ -75,16 +75,7 @@
+
+ /* We might need a ARM specific header to function declarations. */
+ #undef ASM_DECLARE_FUNCTION_NAME
+-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
+- do \
+- { \
+- ARM_DECLARE_FUNCTION_NAME (FILE, NAME, DECL); \
+- ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \
+- ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
+- ASM_OUTPUT_LABEL(FILE, NAME); \
+- ARM_OUTPUT_FN_UNWIND (FILE, TRUE); \
+- } \
+- while (0)
++#define ASM_DECLARE_FUNCTION_NAME arm_asm_declare_function_name
+
+ /* We might need an ARM specific trailer for function declarations. */
+ #undef ASM_DECLARE_FUNCTION_SIZE
+@@ -148,8 +139,9 @@
+ while (0)
+
+ /* Horrible hack: We want to prevent some libgcc routines being included
+- for some multilibs. */
+-#ifndef __ARM_ARCH_6M__
++ for some multilibs. The condition should match the one in
++ libgcc/config/arm/lib1funcs.S. */
++#if __ARM_ARCH_ISA_ARM || __ARM_ARCH_ISA_THUMB != 1
+ #undef L_fixdfsi
+ #undef L_fixunsdfsi
+ #undef L_truncdfsf2
+--- a/src/gcc/config/arm/exynos-m1.md
++++ b/src/gcc/config/arm/exynos-m1.md
+@@ -358,7 +358,7 @@
+ (eq_attr "type" "alu_imm, alus_imm, logic_imm, logics_imm,\
+ alu_sreg, alus_sreg, logic_reg, logics_reg,\
+ adc_imm, adcs_imm, adc_reg, adcs_reg,\
+- adr, bfm, clz, rbit, rev, csel, alu_dsp_reg,\
++ adr, bfm, bfx, clz, rbit, rev, csel, alu_dsp_reg,\
+ shift_imm, shift_reg, rotate_imm, extend,\
+ mov_imm, mov_reg,\
+ mvn_imm, mvn_reg,\
+@@ -372,7 +372,7 @@
+ (eq_attr "type" "alu_imm, alus_imm, logic_imm, logics_imm,\
+ alu_sreg, alus_sreg, logic_reg, logics_reg,\
+ adc_imm, adcs_imm, adc_reg, adcs_reg,\
+- adr, bfm, clz, rbit, rev, alu_dsp_reg,\
++ adr, bfm, bfx, clz, rbit, rev, alu_dsp_reg,\
+ shift_imm, shift_reg, rotate_imm, extend,\
+ mov_imm, mov_reg,\
+ mvn_imm, mvn_reg,\
+--- a/src/gcc/config/arm/iterators.md
++++ b/src/gcc/config/arm/iterators.md
+@@ -46,7 +46,7 @@
+ (define_mode_iterator SIDI [SI DI])
+
+ ;; A list of modes which the VFP unit can handle
+-(define_mode_iterator SDF [(SF "TARGET_VFP") (DF "TARGET_VFP_DOUBLE")])
++(define_mode_iterator SDF [(SF "") (DF "TARGET_VFP_DOUBLE")])
+
+ ;; Integer element sizes implemented by IWMMXT.
+ (define_mode_iterator VMMX [V2SI V4HI V8QI])
+@@ -119,6 +119,10 @@
+ ;; All supported vector modes (except those with 64-bit integer elements).
+ (define_mode_iterator VDQW [V8QI V16QI V4HI V8HI V2SI V4SI V2SF V4SF])
+
++;; All supported vector modes including 16-bit float modes.
++(define_mode_iterator VDQWH [V8QI V16QI V4HI V8HI V2SI V4SI V2SF V4SF
++ V8HF V4HF])
++
+ ;; Supported integer vector modes (not 64 bit elements).
+ (define_mode_iterator VDQIW [V8QI V16QI V4HI V8HI V2SI V4SI])
+
+@@ -141,6 +145,9 @@
+ ;; Vector modes form int->float conversions.
+ (define_mode_iterator VCVTI [V2SI V4SI])
+
++;; Vector modes for int->half conversions.
++(define_mode_iterator VCVTHI [V4HI V8HI])
++
+ ;; Vector modes for doubleword multiply-accumulate, etc. insns.
+ (define_mode_iterator VMD [V4HI V2SI V2SF])
+
+@@ -174,6 +181,9 @@
+ ;; Modes with 8-bit, 16-bit and 32-bit elements.
+ (define_mode_iterator VU [V16QI V8HI V4SI])
+
++;; Vector modes for 16-bit floating-point support.
++(define_mode_iterator VH [V8HF V4HF])
++
+ ;; Iterators used for fixed-point support.
+ (define_mode_iterator FIXED [QQ HQ SQ UQQ UHQ USQ HA SA UHA USA])
+
+@@ -192,14 +202,17 @@
+ ;; Code iterators
+ ;;----------------------------------------------------------------------------
+
+-;; A list of condition codes used in compare instructions where
+-;; the carry flag from the addition is used instead of doing the
++;; A list of condition codes used in compare instructions where
++;; the carry flag from the addition is used instead of doing the
+ ;; compare a second time.
+ (define_code_iterator LTUGEU [ltu geu])
+
+ ;; The signed gt, ge comparisons
+ (define_code_iterator GTGE [gt ge])
+
++;; The signed gt, ge, lt, le comparisons
++(define_code_iterator GLTE [gt ge lt le])
++
+ ;; The unsigned gt, ge comparisons
+ (define_code_iterator GTUGEU [gtu geu])
+
+@@ -228,6 +241,12 @@
+ ;; Binary operators whose second operand can be shifted.
+ (define_code_iterator SHIFTABLE_OPS [plus minus ior xor and])
+
++;; Operations on the sign of a number.
++(define_code_iterator ABSNEG [abs neg])
++
++;; Conversions.
++(define_code_iterator FCVT [unsigned_float float])
++
+ ;; plus and minus are the only SHIFTABLE_OPS for which Thumb2 allows
+ ;; a stack pointer opoerand. The minus operation is a candidate for an rsub
+ ;; and hence only plus is supported.
+@@ -251,10 +270,14 @@
+ (define_int_iterator VRINT [UNSPEC_VRINTZ UNSPEC_VRINTP UNSPEC_VRINTM
+ UNSPEC_VRINTR UNSPEC_VRINTX UNSPEC_VRINTA])
+
+-(define_int_iterator NEON_VCMP [UNSPEC_VCEQ UNSPEC_VCGT UNSPEC_VCGE UNSPEC_VCLT UNSPEC_VCLE])
++(define_int_iterator NEON_VCMP [UNSPEC_VCEQ UNSPEC_VCGT UNSPEC_VCGE
++ UNSPEC_VCLT UNSPEC_VCLE])
+
+ (define_int_iterator NEON_VACMP [UNSPEC_VCAGE UNSPEC_VCAGT])
+
++(define_int_iterator NEON_VAGLTE [UNSPEC_VCAGE UNSPEC_VCAGT
++ UNSPEC_VCALE UNSPEC_VCALT])
++
+ (define_int_iterator VCVT [UNSPEC_VRINTP UNSPEC_VRINTM UNSPEC_VRINTA])
+
+ (define_int_iterator NEON_VRINT [UNSPEC_NVRINTP UNSPEC_NVRINTZ UNSPEC_NVRINTM
+@@ -323,6 +346,22 @@
+
+ (define_int_iterator VCVT_US_N [UNSPEC_VCVT_S_N UNSPEC_VCVT_U_N])
+
++(define_int_iterator VCVT_HF_US_N [UNSPEC_VCVT_HF_S_N UNSPEC_VCVT_HF_U_N])
++
++(define_int_iterator VCVT_SI_US_N [UNSPEC_VCVT_SI_S_N UNSPEC_VCVT_SI_U_N])
++
++(define_int_iterator VCVT_HF_US [UNSPEC_VCVTA_S UNSPEC_VCVTA_U
++ UNSPEC_VCVTM_S UNSPEC_VCVTM_U
++ UNSPEC_VCVTN_S UNSPEC_VCVTN_U
++ UNSPEC_VCVTP_S UNSPEC_VCVTP_U])
++
++(define_int_iterator VCVTH_US [UNSPEC_VCVTH_S UNSPEC_VCVTH_U])
++
++;; Operators for FP16 instructions.
++(define_int_iterator FP16_RND [UNSPEC_VRND UNSPEC_VRNDA
++ UNSPEC_VRNDM UNSPEC_VRNDN
++ UNSPEC_VRNDP UNSPEC_VRNDX])
++
+ (define_int_iterator VQMOVN [UNSPEC_VQMOVN_S UNSPEC_VQMOVN_U])
+
+ (define_int_iterator VMOVL [UNSPEC_VMOVL_S UNSPEC_VMOVL_U])
+@@ -366,6 +405,8 @@
+
+ (define_int_iterator VQRDMLH_AS [UNSPEC_VQRDMLAH UNSPEC_VQRDMLSH])
+
++(define_int_iterator VFM_LANE_AS [UNSPEC_VFMA_LANE UNSPEC_VFMS_LANE])
++
+ ;;----------------------------------------------------------------------------
+ ;; Mode attributes
+ ;;----------------------------------------------------------------------------
+@@ -384,6 +425,10 @@
+ (define_mode_attr V_cvtto [(V2SI "v2sf") (V2SF "v2si")
+ (V4SI "v4sf") (V4SF "v4si")])
+
++;; (Opposite) mode to convert to/from for vector-half mode conversions.
++(define_mode_attr VH_CVTTO [(V4HI "V4HF") (V4HF "V4HI")
++ (V8HI "V8HF") (V8HF "V8HI")])
++
+ ;; Define element mode for each vector mode.
+ (define_mode_attr V_elem [(V8QI "QI") (V16QI "QI")
+ (V4HI "HI") (V8HI "HI")
+@@ -427,12 +472,13 @@
+
+ ;; Register width from element mode
+ (define_mode_attr V_reg [(V8QI "P") (V16QI "q")
+- (V4HI "P") (V8HI "q")
+- (V4HF "P") (V8HF "q")
+- (V2SI "P") (V4SI "q")
+- (V2SF "P") (V4SF "q")
+- (DI "P") (V2DI "q")
+- (SF "") (DF "P")])
++ (V4HI "P") (V8HI "q")
++ (V4HF "P") (V8HF "q")
++ (V2SI "P") (V4SI "q")
++ (V2SF "P") (V4SF "q")
++ (DI "P") (V2DI "q")
++ (SF "") (DF "P")
++ (HF "")])
+
+ ;; Wider modes with the same number of elements.
+ (define_mode_attr V_widen [(V8QI "V8HI") (V4HI "V4SI") (V2SI "V2DI")])
+@@ -448,7 +494,7 @@
+ (define_mode_attr V_HALF [(V16QI "V8QI") (V8HI "V4HI")
+ (V8HF "V4HF") (V4SI "V2SI")
+ (V4SF "V2SF") (V2DF "DF")
+- (V2DI "DI")])
++ (V2DI "DI") (V4HF "HF")])
+
+ ;; Same, but lower-case.
+ (define_mode_attr V_half [(V16QI "v8qi") (V8HI "v4hi")
+@@ -475,9 +521,10 @@
+ ;; Used for neon_vdup_lane, where the second operand is double-sized
+ ;; even when the first one is quad.
+ (define_mode_attr V_double_vector_mode [(V16QI "V8QI") (V8HI "V4HI")
+- (V4SI "V2SI") (V4SF "V2SF")
+- (V8QI "V8QI") (V4HI "V4HI")
+- (V2SI "V2SI") (V2SF "V2SF")])
++ (V4SI "V2SI") (V4SF "V2SF")
++ (V8QI "V8QI") (V4HI "V4HI")
++ (V2SI "V2SI") (V2SF "V2SF")
++ (V8HF "V4HF") (V4HF "V4HF")])
+
+ ;; Mode of result of comparison operations (and bit-select operand 1).
+ (define_mode_attr V_cmp_result [(V8QI "V8QI") (V16QI "V16QI")
+@@ -496,18 +543,22 @@
+ ;; Get element type from double-width mode, for operations where we
+ ;; don't care about signedness.
+ (define_mode_attr V_if_elem [(V8QI "i8") (V16QI "i8")
+- (V4HI "i16") (V8HI "i16")
+- (V2SI "i32") (V4SI "i32")
+- (DI "i64") (V2DI "i64")
+- (V2SF "f32") (V4SF "f32")
+- (SF "f32") (DF "f64")])
++ (V4HI "i16") (V8HI "i16")
++ (V2SI "i32") (V4SI "i32")
++ (DI "i64") (V2DI "i64")
++ (V2SF "f32") (V4SF "f32")
++ (SF "f32") (DF "f64")
++ (HF "f16") (V4HF "f16")
++ (V8HF "f16")])
+
+ ;; Same, but for operations which work on signed values.
+ (define_mode_attr V_s_elem [(V8QI "s8") (V16QI "s8")
+- (V4HI "s16") (V8HI "s16")
+- (V2SI "s32") (V4SI "s32")
+- (DI "s64") (V2DI "s64")
+- (V2SF "f32") (V4SF "f32")])
++ (V4HI "s16") (V8HI "s16")
++ (V2SI "s32") (V4SI "s32")
++ (DI "s64") (V2DI "s64")
++ (V2SF "f32") (V4SF "f32")
++ (HF "f16") (V4HF "f16")
++ (V8HF "f16")])
+
+ ;; Same, but for operations which work on unsigned values.
+ (define_mode_attr V_u_elem [(V8QI "u8") (V16QI "u8")
+@@ -524,17 +575,22 @@
+ (V2SF "32") (V4SF "32")])
+
+ (define_mode_attr V_sz_elem [(V8QI "8") (V16QI "8")
+- (V4HI "16") (V8HI "16")
+- (V2SI "32") (V4SI "32")
+- (DI "64") (V2DI "64")
++ (V4HI "16") (V8HI "16")
++ (V2SI "32") (V4SI "32")
++ (DI "64") (V2DI "64")
+ (V4HF "16") (V8HF "16")
+- (V2SF "32") (V4SF "32")])
++ (V2SF "32") (V4SF "32")])
+
+ (define_mode_attr V_elem_ch [(V8QI "b") (V16QI "b")
+- (V4HI "h") (V8HI "h")
+- (V2SI "s") (V4SI "s")
+- (DI "d") (V2DI "d")
+- (V2SF "s") (V4SF "s")])
++ (V4HI "h") (V8HI "h")
++ (V2SI "s") (V4SI "s")
++ (DI "d") (V2DI "d")
++ (V2SF "s") (V4SF "s")
++ (V2SF "s") (V4SF "s")])
++
++(define_mode_attr VH_elem_ch [(V4HI "s") (V8HI "s")
++ (V4HF "s") (V8HF "s")
++ (HF "s")])
+
+ ;; Element sizes for duplicating ARM registers to all elements of a vector.
+ (define_mode_attr VD_dup [(V8QI "8") (V4HI "16") (V2SI "32") (V2SF "32")])
+@@ -570,29 +626,30 @@
+ ;; This mode attribute is used to obtain the correct register constraints.
+
+ (define_mode_attr scalar_mul_constraint [(V4HI "x") (V2SI "t") (V2SF "t")
+- (V8HI "x") (V4SI "t") (V4SF "t")])
++ (V8HI "x") (V4SI "t") (V4SF "t")
++ (V8HF "x") (V4HF "x")])
+
+ ;; Predicates used for setting type for neon instructions
+
+ (define_mode_attr Is_float_mode [(V8QI "false") (V16QI "false")
+- (V4HI "false") (V8HI "false")
+- (V2SI "false") (V4SI "false")
+- (V4HF "true") (V8HF "true")
+- (V2SF "true") (V4SF "true")
+- (DI "false") (V2DI "false")])
++ (V4HI "false") (V8HI "false")
++ (V2SI "false") (V4SI "false")
++ (V4HF "true") (V8HF "true")
++ (V2SF "true") (V4SF "true")
++ (DI "false") (V2DI "false")])
+
+ (define_mode_attr Scalar_mul_8_16 [(V8QI "true") (V16QI "true")
+- (V4HI "true") (V8HI "true")
+- (V2SI "false") (V4SI "false")
+- (V2SF "false") (V4SF "false")
+- (DI "false") (V2DI "false")])
+-
++ (V4HI "true") (V8HI "true")
++ (V2SI "false") (V4SI "false")
++ (V2SF "false") (V4SF "false")
++ (DI "false") (V2DI "false")])
+
+ (define_mode_attr Is_d_reg [(V8QI "true") (V16QI "false")
+- (V4HI "true") (V8HI "false")
+- (V2SI "true") (V4SI "false")
+- (V2SF "true") (V4SF "false")
+- (DI "true") (V2DI "false")])
++ (V4HI "true") (V8HI "false")
++ (V2SI "true") (V4SI "false")
++ (V2SF "true") (V4SF "false")
++ (DI "true") (V2DI "false")
++ (V4HF "true") (V8HF "false")])
+
+ (define_mode_attr V_mode_nunits [(V8QI "8") (V16QI "16")
+ (V4HF "4") (V8HF "8")
+@@ -637,12 +694,14 @@
+
+ ;; Mode attribute used to build the "type" attribute.
+ (define_mode_attr q [(V8QI "") (V16QI "_q")
+- (V4HI "") (V8HI "_q")
+- (V2SI "") (V4SI "_q")
++ (V4HI "") (V8HI "_q")
++ (V2SI "") (V4SI "_q")
++ (V4HF "") (V8HF "_q")
++ (V2SF "") (V4SF "_q")
+ (V4HF "") (V8HF "_q")
+- (V2SF "") (V4SF "_q")
+- (DI "") (V2DI "_q")
+- (DF "") (V2DF "_q")])
++ (DI "") (V2DI "_q")
++ (DF "") (V2DF "_q")
++ (HF "")])
+
+ (define_mode_attr pf [(V8QI "p") (V16QI "p") (V2SF "f") (V4SF "f")])
+
+@@ -679,6 +738,16 @@
+ (define_code_attr shift [(ashiftrt "ashr") (lshiftrt "lshr")])
+ (define_code_attr shifttype [(ashiftrt "signed") (lshiftrt "unsigned")])
+
++;; String reprentations of operations on the sign of a number.
++(define_code_attr absneg_str [(abs "abs") (neg "neg")])
++
++;; Conversions.
++(define_code_attr FCVTI32typename [(unsigned_float "u32") (float "s32")])
++
++(define_code_attr float_sup [(unsigned_float "u") (float "s")])
++
++(define_code_attr float_SUP [(unsigned_float "U") (float "S")])
++
+ ;;----------------------------------------------------------------------------
+ ;; Int attributes
+ ;;----------------------------------------------------------------------------
+@@ -710,7 +779,13 @@
+ (UNSPEC_VPMAX "s") (UNSPEC_VPMAX_U "u")
+ (UNSPEC_VPMIN "s") (UNSPEC_VPMIN_U "u")
+ (UNSPEC_VCVT_S "s") (UNSPEC_VCVT_U "u")
++ (UNSPEC_VCVTA_S "s") (UNSPEC_VCVTA_U "u")
++ (UNSPEC_VCVTM_S "s") (UNSPEC_VCVTM_U "u")
++ (UNSPEC_VCVTN_S "s") (UNSPEC_VCVTN_U "u")
++ (UNSPEC_VCVTP_S "s") (UNSPEC_VCVTP_U "u")
+ (UNSPEC_VCVT_S_N "s") (UNSPEC_VCVT_U_N "u")
++ (UNSPEC_VCVT_HF_S_N "s") (UNSPEC_VCVT_HF_U_N "u")
++ (UNSPEC_VCVT_SI_S_N "s") (UNSPEC_VCVT_SI_U_N "u")
+ (UNSPEC_VQMOVN_S "s") (UNSPEC_VQMOVN_U "u")
+ (UNSPEC_VMOVL_S "s") (UNSPEC_VMOVL_U "u")
+ (UNSPEC_VSHL_S "s") (UNSPEC_VSHL_U "u")
+@@ -725,13 +800,30 @@
+ (UNSPEC_VSHLL_S_N "s") (UNSPEC_VSHLL_U_N "u")
+ (UNSPEC_VSRA_S_N "s") (UNSPEC_VSRA_U_N "u")
+ (UNSPEC_VRSRA_S_N "s") (UNSPEC_VRSRA_U_N "u")
+-
++ (UNSPEC_VCVTH_S "s") (UNSPEC_VCVTH_U "u")
+ ])
+
++(define_int_attr vcvth_op
++ [(UNSPEC_VCVTA_S "a") (UNSPEC_VCVTA_U "a")
++ (UNSPEC_VCVTM_S "m") (UNSPEC_VCVTM_U "m")
++ (UNSPEC_VCVTN_S "n") (UNSPEC_VCVTN_U "n")
++ (UNSPEC_VCVTP_S "p") (UNSPEC_VCVTP_U "p")])
++
++(define_int_attr fp16_rnd_str
++ [(UNSPEC_VRND "rnd") (UNSPEC_VRNDA "rnda")
++ (UNSPEC_VRNDM "rndm") (UNSPEC_VRNDN "rndn")
++ (UNSPEC_VRNDP "rndp") (UNSPEC_VRNDX "rndx")])
++
++(define_int_attr fp16_rnd_insn
++ [(UNSPEC_VRND "vrintz") (UNSPEC_VRNDA "vrinta")
++ (UNSPEC_VRNDM "vrintm") (UNSPEC_VRNDN "vrintn")
++ (UNSPEC_VRNDP "vrintp") (UNSPEC_VRNDX "vrintx")])
++
+ (define_int_attr cmp_op_unsp [(UNSPEC_VCEQ "eq") (UNSPEC_VCGT "gt")
+- (UNSPEC_VCGE "ge") (UNSPEC_VCLE "le")
+- (UNSPEC_VCLT "lt") (UNSPEC_VCAGE "ge")
+- (UNSPEC_VCAGT "gt")])
++ (UNSPEC_VCGE "ge") (UNSPEC_VCLE "le")
++ (UNSPEC_VCLT "lt") (UNSPEC_VCAGE "ge")
++ (UNSPEC_VCAGT "gt") (UNSPEC_VCALE "le")
++ (UNSPEC_VCALT "lt")])
+
+ (define_int_attr r [
+ (UNSPEC_VRHADD_S "r") (UNSPEC_VRHADD_U "r")
+@@ -847,3 +939,7 @@
+
+ ;; Attributes for VQRDMLAH/VQRDMLSH
+ (define_int_attr neon_rdma_as [(UNSPEC_VQRDMLAH "a") (UNSPEC_VQRDMLSH "s")])
++
++;; Attributes for VFMA_LANE/ VFMS_LANE
++(define_int_attr neon_vfm_lane_as
++ [(UNSPEC_VFMA_LANE "a") (UNSPEC_VFMS_LANE "s")])
+--- a/src/gcc/config/arm/neon-testgen.ml
++++ b/src//dev/null
+@@ -1,324 +0,0 @@
+-(* Auto-generate ARM Neon intrinsics tests.
+- Copyright (C) 2006-2016 Free Software Foundation, Inc.
+- Contributed by CodeSourcery.
+-
+- This file is part of GCC.
+-
+- GCC is free software; you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free
+- Software Foundation; either version 3, or (at your option) any later
+- version.
+-
+- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+- WARRANTY; without even the implied warranty of MERCHANTABILITY or
+- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+- for more details.
+-
+- You should have received a copy of the GNU General Public License
+- along with GCC; see the file COPYING3. If not see
+- <http://www.gnu.org/licenses/>.
+-
+- This is an O'Caml program. The O'Caml compiler is available from:
+-
+- http://caml.inria.fr/
+-
+- Or from your favourite OS's friendly packaging system. Tested with version
+- 3.09.2, though other versions will probably work too.
+-
+- Compile with:
+- ocamlc -c neon.ml
+- ocamlc -o neon-testgen neon.cmo neon-testgen.ml
+-
+- Run with:
+- cd /path/to/gcc/testsuite/gcc.target/arm/neon
+- /path/to/neon-testgen
+-*)
+-
+-open Neon
+-
+-type c_type_flags = Pointer | Const
+-
+-(* Open a test source file. *)
+-let open_test_file dir name =
+- try
+- open_out (dir ^ "/" ^ name ^ ".c")
+- with Sys_error str ->
+- failwith ("Could not create test source file " ^ name ^ ": " ^ str)
+-
+-(* Emit prologue code to a test source file. *)
+-let emit_prologue chan test_name effective_target compile_test_optim =
+- Printf.fprintf chan "/* Test the `%s' ARM Neon intrinsic. */\n" test_name;
+- Printf.fprintf chan "/* This file was autogenerated by neon-testgen. */\n\n";
+- Printf.fprintf chan "/* { dg-do assemble } */\n";
+- Printf.fprintf chan "/* { dg-require-effective-target %s_ok } */\n"
+- effective_target;
+- Printf.fprintf chan "/* { dg-options \"-save-temps %s\" } */\n" compile_test_optim;
+- Printf.fprintf chan "/* { dg-add-options %s } */\n" effective_target;
+- Printf.fprintf chan "\n#include \"arm_neon.h\"\n\n"
+-
+-(* Emit declarations of variables that are going to be passed
+- to an intrinsic, together with one to take a returned value if needed. *)
+-let emit_variables chan c_types features spaces =
+- let emit () =
+- ignore (
+- List.fold_left (fun arg_number -> fun (flags, ty) ->
+- let pointer_bit =
+- if List.mem Pointer flags then "*" else ""
+- in
+- (* Const arguments to builtins are directly
+- written in as constants. *)
+- if not (List.mem Const flags) then
+- Printf.fprintf chan "%s%s %sarg%d_%s;\n"
+- spaces ty pointer_bit arg_number ty;
+- arg_number + 1)
+- 0 (List.tl c_types))
+- in
+- match c_types with
+- (_, return_ty) :: tys ->
+- if return_ty <> "void" then begin
+- (* The intrinsic returns a value. We need to do explicit register
+- allocation for vget_low tests or they fail because of copy
+- elimination. *)
+- ((if List.mem Fixed_vector_reg features then
+- Printf.fprintf chan "%sregister %s out_%s asm (\"d18\");\n"
+- spaces return_ty return_ty
+- else if List.mem Fixed_core_reg features then
+- Printf.fprintf chan "%sregister %s out_%s asm (\"r0\");\n"
+- spaces return_ty return_ty
+- else
+- Printf.fprintf chan "%s%s out_%s;\n" spaces return_ty return_ty);
+- emit ())
+- end else
+- (* The intrinsic does not return a value. *)
+- emit ()
+- | _ -> assert false
+-
+-(* Emit code to call an intrinsic. *)
+-let emit_call chan const_valuator c_types name elt_ty =
+- (if snd (List.hd c_types) <> "void" then
+- Printf.fprintf chan " out_%s = " (snd (List.hd c_types))
+- else
+- Printf.fprintf chan " ");
+- Printf.fprintf chan "%s_%s (" (intrinsic_name name) (string_of_elt elt_ty);
+- let print_arg chan arg_number (flags, ty) =
+- (* If the argument is of const type, then directly write in the
+- constant now. *)
+- if List.mem Const flags then
+- match const_valuator with
+- None ->
+- if List.mem Pointer flags then
+- Printf.fprintf chan "0"
+- else
+- Printf.fprintf chan "1"
+- | Some f -> Printf.fprintf chan "%s" (string_of_int (f arg_number))
+- else
+- Printf.fprintf chan "arg%d_%s" arg_number ty
+- in
+- let rec print_args arg_number tys =
+- match tys with
+- [] -> ()
+- | [ty] -> print_arg chan arg_number ty
+- | ty::tys ->
+- print_arg chan arg_number ty;
+- Printf.fprintf chan ", ";
+- print_args (arg_number + 1) tys
+- in
+- print_args 0 (List.tl c_types);
+- Printf.fprintf chan ");\n"
+-
+-(* Emit epilogue code to a test source file. *)
+-let emit_epilogue chan features regexps =
+- let no_op = List.exists (fun feature -> feature = No_op) features in
+- Printf.fprintf chan "}\n\n";
+- if not no_op then
+- List.iter (fun regexp ->
+- Printf.fprintf chan
+- "/* { dg-final { scan-assembler \"%s\" } } */\n" regexp)
+- regexps
+- else
+- ()
+-
+-
+-(* Check a list of C types to determine which ones are pointers and which
+- ones are const. *)
+-let check_types tys =
+- let tys' =
+- List.map (fun ty ->
+- let len = String.length ty in
+- if len > 2 && String.get ty (len - 2) = ' '
+- && String.get ty (len - 1) = '*'
+- then ([Pointer], String.sub ty 0 (len - 2))
+- else ([], ty)) tys
+- in
+- List.map (fun (flags, ty) ->
+- if String.length ty > 6 && String.sub ty 0 6 = "const "
+- then (Const :: flags, String.sub ty 6 ((String.length ty) - 6))
+- else (flags, ty)) tys'
+-
+-(* Work out what the effective target should be. *)
+-let effective_target features =
+- try
+- match List.find (fun feature ->
+- match feature with Requires_feature _ -> true
+- | Requires_arch _ -> true
+- | Requires_FP_bit 1 -> true
+- | _ -> false)
+- features with
+- Requires_feature "FMA" -> "arm_neonv2"
+- | Requires_feature "CRYPTO" -> "arm_crypto"
+- | Requires_arch 8 -> "arm_v8_neon"
+- | Requires_FP_bit 1 -> "arm_neon_fp16"
+- | _ -> assert false
+- with Not_found -> "arm_neon"
+-
+-(* Work out what the testcase optimization level should be, default to -O0. *)
+-let compile_test_optim features =
+- try
+- match List.find (fun feature ->
+- match feature with Compiler_optim _ -> true
+- | _ -> false)
+- features with
+- Compiler_optim opt -> opt
+- | _ -> assert false
+- with Not_found -> "-O0"
+-
+-(* Given an intrinsic shape, produce a regexp that will match
+- the right-hand sides of instructions generated by an intrinsic of
+- that shape. *)
+-let rec analyze_shape shape =
+- let rec n_things n thing =
+- match n with
+- 0 -> []
+- | n -> thing :: (n_things (n - 1) thing)
+- in
+- let rec analyze_shape_elt elt =
+- match elt with
+- Dreg -> "\\[dD\\]\\[0-9\\]+"
+- | Qreg -> "\\[qQ\\]\\[0-9\\]+"
+- | Corereg -> "\\[rR\\]\\[0-9\\]+"
+- | Immed -> "#\\[0-9\\]+"
+- | VecArray (1, elt) ->
+- let elt_regexp = analyze_shape_elt elt in
+- "((\\\\\\{" ^ elt_regexp ^ "\\\\\\})|(" ^ elt_regexp ^ "))"
+- | VecArray (n, elt) ->
+- let elt_regexp = analyze_shape_elt elt in
+- let alt1 = elt_regexp ^ "-" ^ elt_regexp in
+- let alt2 = commas (fun x -> x) (n_things n elt_regexp) "" in
+- "\\\\\\{((" ^ alt1 ^ ")|(" ^ alt2 ^ "))\\\\\\}"
+- | (PtrTo elt | CstPtrTo elt) ->
+- "\\\\\\[" ^ (analyze_shape_elt elt) ^ "\\(:\\[0-9\\]+\\)?\\\\\\]"
+- | Element_of_dreg -> (analyze_shape_elt Dreg) ^ "\\\\\\[\\[0-9\\]+\\\\\\]"
+- | Element_of_qreg -> (analyze_shape_elt Qreg) ^ "\\\\\\[\\[0-9\\]+\\\\\\]"
+- | All_elements_of_dreg -> (analyze_shape_elt Dreg) ^ "\\\\\\[\\\\\\]"
+- | Alternatives (elts) -> "(" ^ (String.concat "|" (List.map analyze_shape_elt elts)) ^ ")"
+- in
+- match shape with
+- All (n, elt) -> commas analyze_shape_elt (n_things n elt) ""
+- | Long -> (analyze_shape_elt Qreg) ^ ", " ^ (analyze_shape_elt Dreg) ^
+- ", " ^ (analyze_shape_elt Dreg)
+- | Long_noreg elt -> (analyze_shape_elt elt) ^ ", " ^ (analyze_shape_elt elt)
+- | Wide -> (analyze_shape_elt Qreg) ^ ", " ^ (analyze_shape_elt Qreg) ^
+- ", " ^ (analyze_shape_elt Dreg)
+- | Wide_noreg elt -> analyze_shape (Long_noreg elt)
+- | Narrow -> (analyze_shape_elt Dreg) ^ ", " ^ (analyze_shape_elt Qreg) ^
+- ", " ^ (analyze_shape_elt Qreg)
+- | Use_operands elts -> commas analyze_shape_elt (Array.to_list elts) ""
+- | By_scalar Dreg ->
+- analyze_shape (Use_operands [| Dreg; Dreg; Element_of_dreg |])
+- | By_scalar Qreg ->
+- analyze_shape (Use_operands [| Qreg; Qreg; Element_of_dreg |])
+- | By_scalar _ -> assert false
+- | Wide_lane ->
+- analyze_shape (Use_operands [| Qreg; Dreg; Element_of_dreg |])
+- | Wide_scalar ->
+- analyze_shape (Use_operands [| Qreg; Dreg; Element_of_dreg |])
+- | Pair_result elt ->
+- let elt_regexp = analyze_shape_elt elt in
+- elt_regexp ^ ", " ^ elt_regexp
+- | Unary_scalar _ -> "FIXME Unary_scalar"
+- | Binary_imm elt -> analyze_shape (Use_operands [| elt; elt; Immed |])
+- | Narrow_imm -> analyze_shape (Use_operands [| Dreg; Qreg; Immed |])
+- | Long_imm -> analyze_shape (Use_operands [| Qreg; Dreg; Immed |])
+-
+-(* Generate tests for one intrinsic. *)
+-let test_intrinsic dir opcode features shape name munge elt_ty =
+- (* Open the test source file. *)
+- let test_name = name ^ (string_of_elt elt_ty) in
+- let chan = open_test_file dir test_name in
+- (* Work out what argument and return types the intrinsic has. *)
+- let c_arity, new_elt_ty = munge shape elt_ty in
+- let c_types = check_types (strings_of_arity c_arity) in
+- (* Extract any constant valuator (a function specifying what constant
+- values are to be written into the intrinsic call) from the features
+- list. *)
+- let const_valuator =
+- try
+- match (List.find (fun feature -> match feature with
+- Const_valuator _ -> true
+- | _ -> false) features) with
+- Const_valuator f -> Some f
+- | _ -> assert false
+- with Not_found -> None
+- in
+- (* Work out what instruction name(s) to expect. *)
+- let insns = get_insn_names features name in
+- let no_suffix = (new_elt_ty = NoElts) in
+- let insns =
+- if no_suffix then insns
+- else List.map (fun insn ->
+- let suffix = string_of_elt_dots new_elt_ty in
+- insn ^ "\\." ^ suffix) insns
+- in
+- (* Construct a regexp to match against the expected instruction name(s). *)
+- let insn_regexp =
+- match insns with
+- [] -> assert false
+- | [insn] -> insn
+- | _ ->
+- let rec calc_regexp insns cur_regexp =
+- match insns with
+- [] -> cur_regexp
+- | [insn] -> cur_regexp ^ "(" ^ insn ^ "))"
+- | insn::insns -> calc_regexp insns (cur_regexp ^ "(" ^ insn ^ ")|")
+- in calc_regexp insns "("
+- in
+- (* Construct regexps to match against the instructions that this
+- intrinsic expands to. Watch out for any writeback character and
+- comments after the instruction. *)
+- let regexps = List.map (fun regexp -> insn_regexp ^ "\\[ \t\\]+" ^ regexp ^
+- "!?\\(\\[ \t\\]+@\\[a-zA-Z0-9 \\]+\\)?\\n")
+- (analyze_all_shapes features shape analyze_shape)
+- in
+- let effective_target = effective_target features in
+- let compile_test_optim = compile_test_optim features
+- in
+- (* Emit file and function prologues. *)
+- emit_prologue chan test_name effective_target compile_test_optim;
+-
+- if (compare compile_test_optim "-O0") <> 0 then
+- (* Emit variable declarations. *)
+- emit_variables chan c_types features "";
+-
+- Printf.fprintf chan "void test_%s (void)\n{\n" test_name;
+-
+- if compare compile_test_optim "-O0" = 0 then
+- (* Emit variable declarations. *)
+- emit_variables chan c_types features " ";
+-
+- Printf.fprintf chan "\n";
+- (* Emit the call to the intrinsic. *)
+- emit_call chan const_valuator c_types name elt_ty;
+- (* Emit the function epilogue and the DejaGNU scan-assembler directives. *)
+- emit_epilogue chan features regexps;
+- (* Close the test file. *)
+- close_out chan
+-
+-(* Generate tests for one element of the "ops" table. *)
+-let test_intrinsic_group dir (opcode, features, shape, name, munge, types) =
+- List.iter (test_intrinsic dir opcode features shape name munge) types
+-
+-(* Program entry point. *)
+-let _ =
+- let directory = if Array.length Sys.argv <> 1 then Sys.argv.(1) else "." in
+- List.iter (test_intrinsic_group directory) (reinterp @ reinterpq @ ops)
+-
+--- a/src/gcc/config/arm/neon.md
++++ b/src/gcc/config/arm/neon.md
+@@ -406,7 +406,7 @@
+ (match_operand:SI 2 "immediate_operand" "")]
+ "TARGET_NEON"
+ {
+- HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]);
++ HOST_WIDE_INT elem = HOST_WIDE_INT_1 << INTVAL (operands[2]);
+ emit_insn (gen_vec_set<mode>_internal (operands[0], operands[1],
+ GEN_INT (elem), operands[0]));
+ DONE;
+@@ -505,6 +505,20 @@
+ (const_string "neon_add<q>")))]
+ )
+
++(define_insn "add<mode>3_fp16"
++ [(set
++ (match_operand:VH 0 "s_register_operand" "=w")
++ (plus:VH
++ (match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:VH 2 "s_register_operand" "w")))]
++ "TARGET_NEON_FP16INST"
++ "vadd.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set (attr "type")
++ (if_then_else (match_test "<Is_float_mode>")
++ (const_string "neon_fp_addsub_s<q>")
++ (const_string "neon_add<q>")))]
++)
++
+ (define_insn "adddi3_neon"
+ [(set (match_operand:DI 0 "s_register_operand" "=w,?&r,?&r,?w,?&r,?&r,?&r")
+ (plus:DI (match_operand:DI 1 "s_register_operand" "%w,0,0,w,r,0,r")
+@@ -543,6 +557,17 @@
+ (const_string "neon_sub<q>")))]
+ )
+
++(define_insn "sub<mode>3_fp16"
++ [(set
++ (match_operand:VH 0 "s_register_operand" "=w")
++ (minus:VH
++ (match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:VH 2 "s_register_operand" "w")))]
++ "TARGET_NEON_FP16INST"
++ "vsub.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_sub<q>")]
++)
++
+ (define_insn "subdi3_neon"
+ [(set (match_operand:DI 0 "s_register_operand" "=w,?&r,?&r,?&r,?w")
+ (minus:DI (match_operand:DI 1 "s_register_operand" "w,0,r,0,w")
+@@ -591,6 +616,16 @@
+ (const_string "neon_mla_<V_elem_ch><q>")))]
+ )
+
++(define_insn "mul<mode>3add<mode>_neon"
++ [(set (match_operand:VH 0 "s_register_operand" "=w")
++ (plus:VH (mult:VH (match_operand:VH 2 "s_register_operand" "w")
++ (match_operand:VH 3 "s_register_operand" "w"))
++ (match_operand:VH 1 "s_register_operand" "0")))]
++ "TARGET_NEON_FP16INST && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
++ "vmla.f16\t%<V_reg>0, %<V_reg>2, %<V_reg>3"
++ [(set_attr "type" "neon_fp_mla_s<q>")]
++)
++
+ (define_insn "mul<mode>3neg<mode>add<mode>_neon"
+ [(set (match_operand:VDQW 0 "s_register_operand" "=w")
+ (minus:VDQW (match_operand:VDQW 1 "s_register_operand" "0")
+@@ -629,6 +664,19 @@
+ [(set_attr "type" "neon_fp_mla_s<q>")]
+ )
+
++;; There is limited support for unsafe-math optimizations using the NEON FP16
++;; arithmetic instructions, so only the intrinsic is currently supported.
++(define_insn "fma<VH:mode>4_intrinsic"
++ [(set (match_operand:VH 0 "register_operand" "=w")
++ (fma:VH
++ (match_operand:VH 1 "register_operand" "w")
++ (match_operand:VH 2 "register_operand" "w")
++ (match_operand:VH 3 "register_operand" "0")))]
++ "TARGET_NEON_FP16INST"
++ "vfma.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_mla_s<q>")]
++)
++
+ (define_insn "*fmsub<VCVTF:mode>4"
+ [(set (match_operand:VCVTF 0 "register_operand" "=w")
+ (fma:VCVTF (neg:VCVTF (match_operand:VCVTF 1 "register_operand" "w"))
+@@ -640,13 +688,25 @@
+ )
+
+ (define_insn "fmsub<VCVTF:mode>4_intrinsic"
+- [(set (match_operand:VCVTF 0 "register_operand" "=w")
+- (fma:VCVTF (neg:VCVTF (match_operand:VCVTF 1 "register_operand" "w"))
+- (match_operand:VCVTF 2 "register_operand" "w")
+- (match_operand:VCVTF 3 "register_operand" "0")))]
+- "TARGET_NEON && TARGET_FMA"
+- "vfms%?.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
+- [(set_attr "type" "neon_fp_mla_s<q>")]
++ [(set (match_operand:VCVTF 0 "register_operand" "=w")
++ (fma:VCVTF
++ (neg:VCVTF (match_operand:VCVTF 1 "register_operand" "w"))
++ (match_operand:VCVTF 2 "register_operand" "w")
++ (match_operand:VCVTF 3 "register_operand" "0")))]
++ "TARGET_NEON && TARGET_FMA"
++ "vfms%?.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_mla_s<q>")]
++)
++
++(define_insn "fmsub<VH:mode>4_intrinsic"
++ [(set (match_operand:VH 0 "register_operand" "=w")
++ (fma:VH
++ (neg:VH (match_operand:VH 1 "register_operand" "w"))
++ (match_operand:VH 2 "register_operand" "w")
++ (match_operand:VH 3 "register_operand" "0")))]
++ "TARGET_NEON_FP16INST"
++ "vfms.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_mla_s<q>")]
+ )
+
+ (define_insn "neon_vrint<NEON_VRINT:nvrint_variant><VCVTF:mode>"
+@@ -860,6 +920,44 @@
+ ""
+ )
+
++(define_insn "<absneg_str><mode>2"
++ [(set (match_operand:VH 0 "s_register_operand" "=w")
++ (ABSNEG:VH (match_operand:VH 1 "s_register_operand" "w")))]
++ "TARGET_NEON_FP16INST"
++ "v<absneg_str>.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
++ [(set_attr "type" "neon_abs<q>")]
++)
++
++(define_expand "neon_v<absneg_str><mode>"
++ [(set
++ (match_operand:VH 0 "s_register_operand")
++ (ABSNEG:VH (match_operand:VH 1 "s_register_operand")))]
++ "TARGET_NEON_FP16INST"
++{
++ emit_insn (gen_<absneg_str><mode>2 (operands[0], operands[1]));
++ DONE;
++})
++
++(define_insn "neon_v<fp16_rnd_str><mode>"
++ [(set (match_operand:VH 0 "s_register_operand" "=w")
++ (unspec:VH
++ [(match_operand:VH 1 "s_register_operand" "w")]
++ FP16_RND))]
++ "TARGET_NEON_FP16INST"
++ "<fp16_rnd_insn>.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
++ [(set_attr "type" "neon_fp_round_s<q>")]
++)
++
++(define_insn "neon_vrsqrte<mode>"
++ [(set (match_operand:VH 0 "s_register_operand" "=w")
++ (unspec:VH
++ [(match_operand:VH 1 "s_register_operand" "w")]
++ UNSPEC_VRSQRTE))]
++ "TARGET_NEON_FP16INST"
++ "vrsqrte.f16\t%<V_reg>0, %<V_reg>1"
++ [(set_attr "type" "neon_fp_rsqrte_s<q>")]
++)
++
+ (define_insn "*umin<mode>3_neon"
+ [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
+ (umin:VDQIW (match_operand:VDQIW 1 "s_register_operand" "w")
+@@ -1208,16 +1306,133 @@
+
+ ;; Widening operations
+
++(define_expand "widen_ssum<mode>3"
++ [(set (match_operand:<V_double_width> 0 "s_register_operand" "")
++ (plus:<V_double_width>
++ (sign_extend:<V_double_width>
++ (match_operand:VQI 1 "s_register_operand" ""))
++ (match_operand:<V_double_width> 2 "s_register_operand" "")))]
++ "TARGET_NEON"
++ {
++ machine_mode mode = GET_MODE (operands[1]);
++ rtx p1, p2;
++
++ p1 = arm_simd_vect_par_cnst_half (mode, false);
++ p2 = arm_simd_vect_par_cnst_half (mode, true);
++
++ if (operands[0] != operands[2])
++ emit_move_insn (operands[0], operands[2]);
++
++ emit_insn (gen_vec_sel_widen_ssum_lo<mode><V_half>3 (operands[0],
++ operands[1],
++ p1,
++ operands[0]));
++ emit_insn (gen_vec_sel_widen_ssum_hi<mode><V_half>3 (operands[0],
++ operands[1],
++ p2,
++ operands[0]));
++ DONE;
++ }
++)
++
++(define_insn "vec_sel_widen_ssum_lo<VQI:mode><VW:mode>3"
++ [(set (match_operand:<VW:V_widen> 0 "s_register_operand" "=w")
++ (plus:<VW:V_widen>
++ (sign_extend:<VW:V_widen>
++ (vec_select:VW
++ (match_operand:VQI 1 "s_register_operand" "%w")
++ (match_operand:VQI 2 "vect_par_constant_low" "")))
++ (match_operand:<VW:V_widen> 3 "s_register_operand" "0")))]
++ "TARGET_NEON"
++{
++ return BYTES_BIG_ENDIAN ? "vaddw.<V_s_elem>\t%q0, %q3, %f1" :
++ "vaddw.<V_s_elem>\t%q0, %q3, %e1";
++}
++ [(set_attr "type" "neon_add_widen")])
++
++(define_insn "vec_sel_widen_ssum_hi<VQI:mode><VW:mode>3"
++ [(set (match_operand:<VW:V_widen> 0 "s_register_operand" "=w")
++ (plus:<VW:V_widen>
++ (sign_extend:<VW:V_widen>
++ (vec_select:VW (match_operand:VQI 1 "s_register_operand" "%w")
++ (match_operand:VQI 2 "vect_par_constant_high" "")))
++ (match_operand:<VW:V_widen> 3 "s_register_operand" "0")))]
++ "TARGET_NEON"
++{
++ return BYTES_BIG_ENDIAN ? "vaddw.<V_s_elem>\t%q0, %q3, %e1" :
++ "vaddw.<V_s_elem>\t%q0, %q3, %f1";
++}
++ [(set_attr "type" "neon_add_widen")])
++
+ (define_insn "widen_ssum<mode>3"
+ [(set (match_operand:<V_widen> 0 "s_register_operand" "=w")
+- (plus:<V_widen> (sign_extend:<V_widen>
+- (match_operand:VW 1 "s_register_operand" "%w"))
+- (match_operand:<V_widen> 2 "s_register_operand" "w")))]
++ (plus:<V_widen>
++ (sign_extend:<V_widen>
++ (match_operand:VW 1 "s_register_operand" "%w"))
++ (match_operand:<V_widen> 2 "s_register_operand" "w")))]
+ "TARGET_NEON"
+ "vaddw.<V_s_elem>\t%q0, %q2, %P1"
+ [(set_attr "type" "neon_add_widen")]
+ )
+
++(define_expand "widen_usum<mode>3"
++ [(set (match_operand:<V_double_width> 0 "s_register_operand" "")
++ (plus:<V_double_width>
++ (zero_extend:<V_double_width>
++ (match_operand:VQI 1 "s_register_operand" ""))
++ (match_operand:<V_double_width> 2 "s_register_operand" "")))]
++ "TARGET_NEON"
++ {
++ machine_mode mode = GET_MODE (operands[1]);
++ rtx p1, p2;
++
++ p1 = arm_simd_vect_par_cnst_half (mode, false);
++ p2 = arm_simd_vect_par_cnst_half (mode, true);
++
++ if (operands[0] != operands[2])
++ emit_move_insn (operands[0], operands[2]);
++
++ emit_insn (gen_vec_sel_widen_usum_lo<mode><V_half>3 (operands[0],
++ operands[1],
++ p1,
++ operands[0]));
++ emit_insn (gen_vec_sel_widen_usum_hi<mode><V_half>3 (operands[0],
++ operands[1],
++ p2,
++ operands[0]));
++ DONE;
++ }
++)
++
++(define_insn "vec_sel_widen_usum_lo<VQI:mode><VW:mode>3"
++ [(set (match_operand:<VW:V_widen> 0 "s_register_operand" "=w")
++ (plus:<VW:V_widen>
++ (zero_extend:<VW:V_widen>
++ (vec_select:VW
++ (match_operand:VQI 1 "s_register_operand" "%w")
++ (match_operand:VQI 2 "vect_par_constant_low" "")))
++ (match_operand:<VW:V_widen> 3 "s_register_operand" "0")))]
++ "TARGET_NEON"
++{
++ return BYTES_BIG_ENDIAN ? "vaddw.<V_u_elem>\t%q0, %q3, %f1" :
++ "vaddw.<V_u_elem>\t%q0, %q3, %e1";
++}
++ [(set_attr "type" "neon_add_widen")])
++
++(define_insn "vec_sel_widen_usum_hi<VQI:mode><VW:mode>3"
++ [(set (match_operand:<VW:V_widen> 0 "s_register_operand" "=w")
++ (plus:<VW:V_widen>
++ (zero_extend:<VW:V_widen>
++ (vec_select:VW (match_operand:VQI 1 "s_register_operand" "%w")
++ (match_operand:VQI 2 "vect_par_constant_high" "")))
++ (match_operand:<VW:V_widen> 3 "s_register_operand" "0")))]
++ "TARGET_NEON"
++{
++ return BYTES_BIG_ENDIAN ? "vaddw.<V_u_elem>\t%q0, %q3, %e1" :
++ "vaddw.<V_u_elem>\t%q0, %q3, %f1";
++}
++ [(set_attr "type" "neon_add_widen")])
++
+ (define_insn "widen_usum<mode>3"
+ [(set (match_operand:<V_widen> 0 "s_register_operand" "=w")
+ (plus:<V_widen> (zero_extend:<V_widen>
+@@ -1488,6 +1703,17 @@
+ (const_string "neon_reduc_add<q>")))]
+ )
+
++(define_insn "neon_vpaddv4hf"
++ [(set
++ (match_operand:V4HF 0 "s_register_operand" "=w")
++ (unspec:V4HF [(match_operand:V4HF 1 "s_register_operand" "w")
++ (match_operand:V4HF 2 "s_register_operand" "w")]
++ UNSPEC_VPADD))]
++ "TARGET_NEON_FP16INST"
++ "vpadd.f16\t%P0, %P1, %P2"
++ [(set_attr "type" "neon_reduc_add")]
++)
++
+ (define_insn "neon_vpsmin<mode>"
+ [(set (match_operand:VD 0 "s_register_operand" "=w")
+ (unspec:VD [(match_operand:VD 1 "s_register_operand" "w")
+@@ -1836,6 +2062,26 @@
+ DONE;
+ })
+
++(define_expand "neon_vadd<mode>"
++ [(match_operand:VH 0 "s_register_operand")
++ (match_operand:VH 1 "s_register_operand")
++ (match_operand:VH 2 "s_register_operand")]
++ "TARGET_NEON_FP16INST"
++{
++ emit_insn (gen_add<mode>3_fp16 (operands[0], operands[1], operands[2]));
++ DONE;
++})
++
++(define_expand "neon_vsub<mode>"
++ [(match_operand:VH 0 "s_register_operand")
++ (match_operand:VH 1 "s_register_operand")
++ (match_operand:VH 2 "s_register_operand")]
++ "TARGET_NEON_FP16INST"
++{
++ emit_insn (gen_sub<mode>3_fp16 (operands[0], operands[1], operands[2]));
++ DONE;
++})
++
+ ; Note that NEON operations don't support the full IEEE 754 standard: in
+ ; particular, denormal values are flushed to zero. This means that GCC cannot
+ ; use those instructions for autovectorization, etc. unless
+@@ -1927,6 +2173,17 @@
+ (const_string "neon_mul_<V_elem_ch><q>")))]
+ )
+
++(define_insn "neon_vmulf<mode>"
++ [(set
++ (match_operand:VH 0 "s_register_operand" "=w")
++ (mult:VH
++ (match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:VH 2 "s_register_operand" "w")))]
++ "TARGET_NEON_FP16INST"
++ "vmul.f16\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_mul_<VH_elem_ch><q>")]
++)
++
+ (define_expand "neon_vmla<mode>"
+ [(match_operand:VDQW 0 "s_register_operand" "=w")
+ (match_operand:VDQW 1 "s_register_operand" "0")
+@@ -1955,6 +2212,18 @@
+ DONE;
+ })
+
++(define_expand "neon_vfma<VH:mode>"
++ [(match_operand:VH 0 "s_register_operand")
++ (match_operand:VH 1 "s_register_operand")
++ (match_operand:VH 2 "s_register_operand")
++ (match_operand:VH 3 "s_register_operand")]
++ "TARGET_NEON_FP16INST"
++{
++ emit_insn (gen_fma<mode>4_intrinsic (operands[0], operands[2], operands[3],
++ operands[1]));
++ DONE;
++})
++
+ (define_expand "neon_vfms<VCVTF:mode>"
+ [(match_operand:VCVTF 0 "s_register_operand")
+ (match_operand:VCVTF 1 "s_register_operand")
+@@ -1967,6 +2236,18 @@
+ DONE;
+ })
+
++(define_expand "neon_vfms<VH:mode>"
++ [(match_operand:VH 0 "s_register_operand")
++ (match_operand:VH 1 "s_register_operand")
++ (match_operand:VH 2 "s_register_operand")
++ (match_operand:VH 3 "s_register_operand")]
++ "TARGET_NEON_FP16INST"
++{
++ emit_insn (gen_fmsub<mode>4_intrinsic (operands[0], operands[2], operands[3],
++ operands[1]));
++ DONE;
++})
++
+ ; Used for intrinsics when flag_unsafe_math_optimizations is false.
+
+ (define_insn "neon_vmla<mode>_unspec"
+@@ -2267,6 +2548,72 @@
+ [(set_attr "type" "neon_fp_compare_s<q>")]
+ )
+
++(define_expand "neon_vc<cmp_op><mode>"
++ [(match_operand:<V_cmp_result> 0 "s_register_operand")
++ (neg:<V_cmp_result>
++ (COMPARISONS:VH
++ (match_operand:VH 1 "s_register_operand")
++ (match_operand:VH 2 "reg_or_zero_operand")))]
++ "TARGET_NEON_FP16INST"
++{
++ /* For FP comparisons use UNSPECS unless -funsafe-math-optimizations
++ are enabled. */
++ if (GET_MODE_CLASS (<MODE>mode) == MODE_VECTOR_FLOAT
++ && !flag_unsafe_math_optimizations)
++ emit_insn
++ (gen_neon_vc<cmp_op><mode>_fp16insn_unspec
++ (operands[0], operands[1], operands[2]));
++ else
++ emit_insn
++ (gen_neon_vc<cmp_op><mode>_fp16insn
++ (operands[0], operands[1], operands[2]));
++ DONE;
++})
++
++(define_insn "neon_vc<cmp_op><mode>_fp16insn"
++ [(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w,w")
++ (neg:<V_cmp_result>
++ (COMPARISONS:<V_cmp_result>
++ (match_operand:VH 1 "s_register_operand" "w,w")
++ (match_operand:VH 2 "reg_or_zero_operand" "w,Dz"))))]
++ "TARGET_NEON_FP16INST
++ && !(GET_MODE_CLASS (<MODE>mode) == MODE_VECTOR_FLOAT
++ && !flag_unsafe_math_optimizations)"
++{
++ char pattern[100];
++ sprintf (pattern, "vc<cmp_op>.%s%%#<V_sz_elem>\t%%<V_reg>0,"
++ " %%<V_reg>1, %s",
++ GET_MODE_CLASS (<MODE>mode) == MODE_VECTOR_FLOAT
++ ? "f" : "<cmp_type>",
++ which_alternative == 0
++ ? "%<V_reg>2" : "#0");
++ output_asm_insn (pattern, operands);
++ return "";
++}
++ [(set (attr "type")
++ (if_then_else (match_operand 2 "zero_operand")
++ (const_string "neon_compare_zero<q>")
++ (const_string "neon_compare<q>")))])
++
++(define_insn "neon_vc<cmp_op_unsp><mode>_fp16insn_unspec"
++ [(set
++ (match_operand:<V_cmp_result> 0 "s_register_operand" "=w,w")
++ (unspec:<V_cmp_result>
++ [(match_operand:VH 1 "s_register_operand" "w,w")
++ (match_operand:VH 2 "reg_or_zero_operand" "w,Dz")]
++ NEON_VCMP))]
++ "TARGET_NEON_FP16INST"
++{
++ char pattern[100];
++ sprintf (pattern, "vc<cmp_op_unsp>.f%%#<V_sz_elem>\t%%<V_reg>0,"
++ " %%<V_reg>1, %s",
++ which_alternative == 0
++ ? "%<V_reg>2" : "#0");
++ output_asm_insn (pattern, operands);
++ return "";
++}
++ [(set_attr "type" "neon_fp_compare_s<q>")])
++
+ (define_insn "neon_vc<cmp_op>u<mode>"
+ [(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w")
+ (neg:<V_cmp_result>
+@@ -2318,6 +2665,60 @@
+ [(set_attr "type" "neon_fp_compare_s<q>")]
+ )
+
++(define_expand "neon_vca<cmp_op><mode>"
++ [(set
++ (match_operand:<V_cmp_result> 0 "s_register_operand")
++ (neg:<V_cmp_result>
++ (GLTE:<V_cmp_result>
++ (abs:VH (match_operand:VH 1 "s_register_operand"))
++ (abs:VH (match_operand:VH 2 "s_register_operand")))))]
++ "TARGET_NEON_FP16INST"
++{
++ if (flag_unsafe_math_optimizations)
++ emit_insn (gen_neon_vca<cmp_op><mode>_fp16insn
++ (operands[0], operands[1], operands[2]));
++ else
++ emit_insn (gen_neon_vca<cmp_op><mode>_fp16insn_unspec
++ (operands[0], operands[1], operands[2]));
++ DONE;
++})
++
++(define_insn "neon_vca<cmp_op><mode>_fp16insn"
++ [(set
++ (match_operand:<V_cmp_result> 0 "s_register_operand" "=w")
++ (neg:<V_cmp_result>
++ (GLTE:<V_cmp_result>
++ (abs:VH (match_operand:VH 1 "s_register_operand" "w"))
++ (abs:VH (match_operand:VH 2 "s_register_operand" "w")))))]
++ "TARGET_NEON_FP16INST && flag_unsafe_math_optimizations"
++ "vac<cmp_op>.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_compare_s<q>")]
++)
++
++(define_insn "neon_vca<cmp_op_unsp><mode>_fp16insn_unspec"
++ [(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w")
++ (unspec:<V_cmp_result>
++ [(match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:VH 2 "s_register_operand" "w")]
++ NEON_VAGLTE))]
++ "TARGET_NEON"
++ "vac<cmp_op_unsp>.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_compare_s<q>")]
++)
++
++(define_expand "neon_vc<cmp_op>z<mode>"
++ [(set
++ (match_operand:<V_cmp_result> 0 "s_register_operand")
++ (COMPARISONS:<V_cmp_result>
++ (match_operand:VH 1 "s_register_operand")
++ (const_int 0)))]
++ "TARGET_NEON_FP16INST"
++ {
++ emit_insn (gen_neon_vc<cmp_op><mode> (operands[0], operands[1],
++ CONST0_RTX (<MODE>mode)));
++ DONE;
++})
++
+ (define_insn "neon_vtst<mode>"
+ [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
+ (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
+@@ -2338,6 +2739,16 @@
+ [(set_attr "type" "neon_abd<q>")]
+ )
+
++(define_insn "neon_vabd<mode>"
++ [(set (match_operand:VH 0 "s_register_operand" "=w")
++ (unspec:VH [(match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:VH 2 "s_register_operand" "w")]
++ UNSPEC_VABD_F))]
++ "TARGET_NEON_FP16INST"
++ "vabd.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_abd<q>")]
++)
++
+ (define_insn "neon_vabdf<mode>"
+ [(set (match_operand:VCVTF 0 "s_register_operand" "=w")
+ (unspec:VCVTF [(match_operand:VCVTF 1 "s_register_operand" "w")
+@@ -2400,6 +2811,51 @@
+ [(set_attr "type" "neon_fp_minmax_s<q>")]
+ )
+
++(define_insn "neon_v<maxmin>f<mode>"
++ [(set (match_operand:VH 0 "s_register_operand" "=w")
++ (unspec:VH
++ [(match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:VH 2 "s_register_operand" "w")]
++ VMAXMINF))]
++ "TARGET_NEON_FP16INST"
++ "v<maxmin>.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_minmax_s<q>")]
++)
++
++(define_insn "neon_vp<maxmin>fv4hf"
++ [(set (match_operand:V4HF 0 "s_register_operand" "=w")
++ (unspec:V4HF
++ [(match_operand:V4HF 1 "s_register_operand" "w")
++ (match_operand:V4HF 2 "s_register_operand" "w")]
++ VPMAXMINF))]
++ "TARGET_NEON_FP16INST"
++ "vp<maxmin>.f16\t%P0, %P1, %P2"
++ [(set_attr "type" "neon_reduc_minmax")]
++)
++
++(define_insn "neon_<fmaxmin_op><mode>"
++ [(set
++ (match_operand:VH 0 "s_register_operand" "=w")
++ (unspec:VH
++ [(match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:VH 2 "s_register_operand" "w")]
++ VMAXMINFNM))]
++ "TARGET_NEON_FP16INST"
++ "<fmaxmin_op>.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_minmax_s<q>")]
++)
++
++;; v<maxmin>nm intrinsics.
++(define_insn "neon_<fmaxmin_op><mode>"
++ [(set (match_operand:VCVTF 0 "s_register_operand" "=w")
++ (unspec:VCVTF [(match_operand:VCVTF 1 "s_register_operand" "w")
++ (match_operand:VCVTF 2 "s_register_operand" "w")]
++ VMAXMINFNM))]
++ "TARGET_NEON && TARGET_FPU_ARMV8"
++ "<fmaxmin_op>.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_minmax_s<q>")]
++)
++
+ ;; Vector forms for the IEEE-754 fmax()/fmin() functions
+ (define_insn "<fmaxmin><mode>3"
+ [(set (match_operand:VCVTF 0 "s_register_operand" "=w")
+@@ -2471,6 +2927,17 @@
+ [(set_attr "type" "neon_fp_recps_s<q>")]
+ )
+
++(define_insn "neon_vrecps<mode>"
++ [(set
++ (match_operand:VH 0 "s_register_operand" "=w")
++ (unspec:VH [(match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:VH 2 "s_register_operand" "w")]
++ UNSPEC_VRECPS))]
++ "TARGET_NEON_FP16INST"
++ "vrecps.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_recps_s<q>")]
++)
++
+ (define_insn "neon_vrsqrts<mode>"
+ [(set (match_operand:VCVTF 0 "s_register_operand" "=w")
+ (unspec:VCVTF [(match_operand:VCVTF 1 "s_register_operand" "w")
+@@ -2481,6 +2948,17 @@
+ [(set_attr "type" "neon_fp_rsqrts_s<q>")]
+ )
+
++(define_insn "neon_vrsqrts<mode>"
++ [(set
++ (match_operand:VH 0 "s_register_operand" "=w")
++ (unspec:VH [(match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:VH 2 "s_register_operand" "w")]
++ UNSPEC_VRSQRTS))]
++ "TARGET_NEON_FP16INST"
++ "vrsqrts.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set_attr "type" "neon_fp_rsqrts_s<q>")]
++)
++
+ (define_expand "neon_vabs<mode>"
+ [(match_operand:VDQW 0 "s_register_operand" "")
+ (match_operand:VDQW 1 "s_register_operand" "")]
+@@ -2596,6 +3074,15 @@
+ })
+
+ (define_insn "neon_vrecpe<mode>"
++ [(set (match_operand:VH 0 "s_register_operand" "=w")
++ (unspec:VH [(match_operand:VH 1 "s_register_operand" "w")]
++ UNSPEC_VRECPE))]
++ "TARGET_NEON_FP16INST"
++ "vrecpe.f16\t%<V_reg>0, %<V_reg>1"
++ [(set_attr "type" "neon_fp_recpe_s<q>")]
++)
++
++(define_insn "neon_vrecpe<mode>"
+ [(set (match_operand:V32 0 "s_register_operand" "=w")
+ (unspec:V32 [(match_operand:V32 1 "s_register_operand" "w")]
+ UNSPEC_VRECPE))]
+@@ -2932,6 +3419,28 @@ if (BYTES_BIG_ENDIAN)
+ [(set_attr "type" "neon_dup<q>")]
+ )
+
++(define_insn "neon_vdup_lane<mode>_internal"
++ [(set (match_operand:VH 0 "s_register_operand" "=w")
++ (vec_duplicate:VH
++ (vec_select:<V_elem>
++ (match_operand:<V_double_vector_mode> 1 "s_register_operand" "w")
++ (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
++ "TARGET_NEON && TARGET_FP16"
++{
++ if (BYTES_BIG_ENDIAN)
++ {
++ int elt = INTVAL (operands[2]);
++ elt = GET_MODE_NUNITS (<V_double_vector_mode>mode) - 1 - elt;
++ operands[2] = GEN_INT (elt);
++ }
++ if (<Is_d_reg>)
++ return "vdup.<V_sz_elem>\t%P0, %P1[%c2]";
++ else
++ return "vdup.<V_sz_elem>\t%q0, %P1[%c2]";
++}
++ [(set_attr "type" "neon_dup<q>")]
++)
++
+ (define_expand "neon_vdup_lane<mode>"
+ [(match_operand:VDQW 0 "s_register_operand" "=w")
+ (match_operand:<V_double_vector_mode> 1 "s_register_operand" "w")
+@@ -2951,6 +3460,25 @@ if (BYTES_BIG_ENDIAN)
+ DONE;
+ })
+
++(define_expand "neon_vdup_lane<mode>"
++ [(match_operand:VH 0 "s_register_operand")
++ (match_operand:<V_double_vector_mode> 1 "s_register_operand")
++ (match_operand:SI 2 "immediate_operand")]
++ "TARGET_NEON && TARGET_FP16"
++{
++ if (BYTES_BIG_ENDIAN)
++ {
++ unsigned int elt = INTVAL (operands[2]);
++ unsigned int reg_nelts
++ = 64 / GET_MODE_UNIT_BITSIZE (<V_double_vector_mode>mode);
++ elt ^= reg_nelts - 1;
++ operands[2] = GEN_INT (elt);
++ }
++ emit_insn (gen_neon_vdup_lane<mode>_internal (operands[0], operands[1],
++ operands[2]));
++ DONE;
++})
++
+ ; Scalar index is ignored, since only zero is valid here.
+ (define_expand "neon_vdup_lanedi"
+ [(match_operand:DI 0 "s_register_operand" "=w")
+@@ -3097,6 +3625,28 @@ if (BYTES_BIG_ENDIAN)
+ [(set_attr "type" "neon_fp_cvt_narrow_s_q")]
+ )
+
++(define_insn "neon_vcvt<sup><mode>"
++ [(set
++ (match_operand:<VH_CVTTO> 0 "s_register_operand" "=w")
++ (unspec:<VH_CVTTO>
++ [(match_operand:VCVTHI 1 "s_register_operand" "w")]
++ VCVT_US))]
++ "TARGET_NEON_FP16INST"
++ "vcvt.f16.<sup>%#16\t%<V_reg>0, %<V_reg>1"
++ [(set_attr "type" "neon_int_to_fp_<VH_elem_ch><q>")]
++)
++
++(define_insn "neon_vcvt<sup><mode>"
++ [(set
++ (match_operand:<VH_CVTTO> 0 "s_register_operand" "=w")
++ (unspec:<VH_CVTTO>
++ [(match_operand:VH 1 "s_register_operand" "w")]
++ VCVT_US))]
++ "TARGET_NEON_FP16INST"
++ "vcvt.<sup>%#16.f16\t%<V_reg>0, %<V_reg>1"
++ [(set_attr "type" "neon_fp_to_int_<VH_elem_ch><q>")]
++)
++
+ (define_insn "neon_vcvt<sup>_n<mode>"
+ [(set (match_operand:<V_CVTTO> 0 "s_register_operand" "=w")
+ (unspec:<V_CVTTO> [(match_operand:VCVTF 1 "s_register_operand" "w")
+@@ -3111,6 +3661,20 @@ if (BYTES_BIG_ENDIAN)
+ )
+
+ (define_insn "neon_vcvt<sup>_n<mode>"
++ [(set (match_operand:<VH_CVTTO> 0 "s_register_operand" "=w")
++ (unspec:<VH_CVTTO>
++ [(match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ VCVT_US_N))]
++ "TARGET_NEON_FP16INST"
++{
++ neon_const_bounds (operands[2], 0, 17);
++ return "vcvt.<sup>%#16.f16\t%<V_reg>0, %<V_reg>1, %2";
++}
++ [(set_attr "type" "neon_fp_to_int_<VH_elem_ch><q>")]
++)
++
++(define_insn "neon_vcvt<sup>_n<mode>"
+ [(set (match_operand:<V_CVTTO> 0 "s_register_operand" "=w")
+ (unspec:<V_CVTTO> [(match_operand:VCVTI 1 "s_register_operand" "w")
+ (match_operand:SI 2 "immediate_operand" "i")]
+@@ -3123,6 +3687,31 @@ if (BYTES_BIG_ENDIAN)
+ [(set_attr "type" "neon_int_to_fp_<V_elem_ch><q>")]
+ )
+
++(define_insn "neon_vcvt<sup>_n<mode>"
++ [(set (match_operand:<VH_CVTTO> 0 "s_register_operand" "=w")
++ (unspec:<VH_CVTTO>
++ [(match_operand:VCVTHI 1 "s_register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ VCVT_US_N))]
++ "TARGET_NEON_FP16INST"
++{
++ neon_const_bounds (operands[2], 0, 17);
++ return "vcvt.f16.<sup>%#16\t%<V_reg>0, %<V_reg>1, %2";
++}
++ [(set_attr "type" "neon_int_to_fp_<VH_elem_ch><q>")]
++)
++
++(define_insn "neon_vcvt<vcvth_op><sup><mode>"
++ [(set
++ (match_operand:<VH_CVTTO> 0 "s_register_operand" "=w")
++ (unspec:<VH_CVTTO>
++ [(match_operand:VH 1 "s_register_operand" "w")]
++ VCVT_HF_US))]
++ "TARGET_NEON_FP16INST"
++ "vcvt<vcvth_op>.<sup>%#16.f16\t%<V_reg>0, %<V_reg>1"
++ [(set_attr "type" "neon_fp_to_int_<VH_elem_ch><q>")]
++)
++
+ (define_insn "neon_vmovn<mode>"
+ [(set (match_operand:<V_narrow> 0 "s_register_operand" "=w")
+ (unspec:<V_narrow> [(match_operand:VN 1 "s_register_operand" "w")]
+@@ -3193,6 +3782,18 @@ if (BYTES_BIG_ENDIAN)
+ (const_string "neon_mul_<V_elem_ch>_scalar<q>")))]
+ )
+
++(define_insn "neon_vmul_lane<mode>"
++ [(set (match_operand:VH 0 "s_register_operand" "=w")
++ (unspec:VH [(match_operand:VH 1 "s_register_operand" "w")
++ (match_operand:V4HF 2 "s_register_operand"
++ "<scalar_mul_constraint>")
++ (match_operand:SI 3 "immediate_operand" "i")]
++ UNSPEC_VMUL_LANE))]
++ "TARGET_NEON_FP16INST"
++ "vmul.f16\t%<V_reg>0, %<V_reg>1, %P2[%c3]"
++ [(set_attr "type" "neon_fp_mul_s_scalar<q>")]
++)
++
+ (define_insn "neon_vmull<sup>_lane<mode>"
+ [(set (match_operand:<V_widen> 0 "s_register_operand" "=w")
+ (unspec:<V_widen> [(match_operand:VMDI 1 "s_register_operand" "w")
+@@ -3447,6 +4048,19 @@ if (BYTES_BIG_ENDIAN)
+ DONE;
+ })
+
++(define_expand "neon_vmul_n<mode>"
++ [(match_operand:VH 0 "s_register_operand")
++ (match_operand:VH 1 "s_register_operand")
++ (match_operand:<V_elem> 2 "s_register_operand")]
++ "TARGET_NEON_FP16INST"
++{
++ rtx tmp = gen_reg_rtx (V4HFmode);
++ emit_insn (gen_neon_vset_lanev4hf (tmp, operands[2], tmp, const0_rtx));
++ emit_insn (gen_neon_vmul_lane<mode> (operands[0], operands[1], tmp,
++ const0_rtx));
++ DONE;
++})
++
+ (define_expand "neon_vmulls_n<mode>"
+ [(match_operand:<V_widen> 0 "s_register_operand" "")
+ (match_operand:VMDI 1 "s_register_operand" "")
+@@ -4168,25 +4782,25 @@ if (BYTES_BIG_ENDIAN)
+
+ (define_expand "neon_vtrn<mode>_internal"
+ [(parallel
+- [(set (match_operand:VDQW 0 "s_register_operand" "")
+- (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "")
+- (match_operand:VDQW 2 "s_register_operand" "")]
++ [(set (match_operand:VDQWH 0 "s_register_operand")
++ (unspec:VDQWH [(match_operand:VDQWH 1 "s_register_operand")
++ (match_operand:VDQWH 2 "s_register_operand")]
+ UNSPEC_VTRN1))
+- (set (match_operand:VDQW 3 "s_register_operand" "")
+- (unspec:VDQW [(match_dup 1) (match_dup 2)] UNSPEC_VTRN2))])]
++ (set (match_operand:VDQWH 3 "s_register_operand")
++ (unspec:VDQWH [(match_dup 1) (match_dup 2)] UNSPEC_VTRN2))])]
+ "TARGET_NEON"
+ ""
+ )
+
+ ;; Note: Different operand numbering to handle tied registers correctly.
+ (define_insn "*neon_vtrn<mode>_insn"
+- [(set (match_operand:VDQW 0 "s_register_operand" "=&w")
+- (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
+- (match_operand:VDQW 3 "s_register_operand" "2")]
+- UNSPEC_VTRN1))
+- (set (match_operand:VDQW 2 "s_register_operand" "=&w")
+- (unspec:VDQW [(match_dup 1) (match_dup 3)]
+- UNSPEC_VTRN2))]
++ [(set (match_operand:VDQWH 0 "s_register_operand" "=&w")
++ (unspec:VDQWH [(match_operand:VDQWH 1 "s_register_operand" "0")
++ (match_operand:VDQWH 3 "s_register_operand" "2")]
++ UNSPEC_VTRN1))
++ (set (match_operand:VDQWH 2 "s_register_operand" "=&w")
++ (unspec:VDQWH [(match_dup 1) (match_dup 3)]
++ UNSPEC_VTRN2))]
+ "TARGET_NEON"
+ "vtrn.<V_sz_elem>\t%<V_reg>0, %<V_reg>2"
+ [(set_attr "type" "neon_permute<q>")]
+@@ -4194,25 +4808,25 @@ if (BYTES_BIG_ENDIAN)
+
+ (define_expand "neon_vzip<mode>_internal"
+ [(parallel
+- [(set (match_operand:VDQW 0 "s_register_operand" "")
+- (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "")
+- (match_operand:VDQW 2 "s_register_operand" "")]
+- UNSPEC_VZIP1))
+- (set (match_operand:VDQW 3 "s_register_operand" "")
+- (unspec:VDQW [(match_dup 1) (match_dup 2)] UNSPEC_VZIP2))])]
++ [(set (match_operand:VDQWH 0 "s_register_operand")
++ (unspec:VDQWH [(match_operand:VDQWH 1 "s_register_operand")
++ (match_operand:VDQWH 2 "s_register_operand")]
++ UNSPEC_VZIP1))
++ (set (match_operand:VDQWH 3 "s_register_operand")
++ (unspec:VDQWH [(match_dup 1) (match_dup 2)] UNSPEC_VZIP2))])]
+ "TARGET_NEON"
+ ""
+ )
+
+ ;; Note: Different operand numbering to handle tied registers correctly.
+ (define_insn "*neon_vzip<mode>_insn"
+- [(set (match_operand:VDQW 0 "s_register_operand" "=&w")
+- (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
+- (match_operand:VDQW 3 "s_register_operand" "2")]
+- UNSPEC_VZIP1))
+- (set (match_operand:VDQW 2 "s_register_operand" "=&w")
+- (unspec:VDQW [(match_dup 1) (match_dup 3)]
+- UNSPEC_VZIP2))]
++ [(set (match_operand:VDQWH 0 "s_register_operand" "=&w")
++ (unspec:VDQWH [(match_operand:VDQWH 1 "s_register_operand" "0")
++ (match_operand:VDQWH 3 "s_register_operand" "2")]
++ UNSPEC_VZIP1))
++ (set (match_operand:VDQWH 2 "s_register_operand" "=&w")
++ (unspec:VDQWH [(match_dup 1) (match_dup 3)]
++ UNSPEC_VZIP2))]
+ "TARGET_NEON"
+ "vzip.<V_sz_elem>\t%<V_reg>0, %<V_reg>2"
+ [(set_attr "type" "neon_zip<q>")]
+@@ -4220,25 +4834,25 @@ if (BYTES_BIG_ENDIAN)
+
+ (define_expand "neon_vuzp<mode>_internal"
+ [(parallel
+- [(set (match_operand:VDQW 0 "s_register_operand" "")
+- (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "")
+- (match_operand:VDQW 2 "s_register_operand" "")]
++ [(set (match_operand:VDQWH 0 "s_register_operand")
++ (unspec:VDQWH [(match_operand:VDQWH 1 "s_register_operand")
++ (match_operand:VDQWH 2 "s_register_operand")]
+ UNSPEC_VUZP1))
+- (set (match_operand:VDQW 3 "s_register_operand" "")
+- (unspec:VDQW [(match_dup 1) (match_dup 2)] UNSPEC_VUZP2))])]
++ (set (match_operand:VDQWH 3 "s_register_operand" "")
++ (unspec:VDQWH [(match_dup 1) (match_dup 2)] UNSPEC_VUZP2))])]
+ "TARGET_NEON"
+ ""
+ )
+
+ ;; Note: Different operand numbering to handle tied registers correctly.
+ (define_insn "*neon_vuzp<mode>_insn"
+- [(set (match_operand:VDQW 0 "s_register_operand" "=&w")
+- (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
+- (match_operand:VDQW 3 "s_register_operand" "2")]
+- UNSPEC_VUZP1))
+- (set (match_operand:VDQW 2 "s_register_operand" "=&w")
+- (unspec:VDQW [(match_dup 1) (match_dup 3)]
+- UNSPEC_VUZP2))]
++ [(set (match_operand:VDQWH 0 "s_register_operand" "=&w")
++ (unspec:VDQWH [(match_operand:VDQWH 1 "s_register_operand" "0")
++ (match_operand:VDQWH 3 "s_register_operand" "2")]
++ UNSPEC_VUZP1))
++ (set (match_operand:VDQWH 2 "s_register_operand" "=&w")
++ (unspec:VDQWH [(match_dup 1) (match_dup 3)]
++ UNSPEC_VUZP2))]
+ "TARGET_NEON"
+ "vuzp.<V_sz_elem>\t%<V_reg>0, %<V_reg>2"
+ [(set_attr "type" "neon_zip<q>")]
+--- a/src/gcc/config/arm/neon.ml
++++ b/src//dev/null
+@@ -1,2357 +0,0 @@
+-(* Common code for ARM NEON header file, documentation and test case
+- generators.
+-
+- Copyright (C) 2006-2016 Free Software Foundation, Inc.
+- Contributed by CodeSourcery.
+-
+- This file is part of GCC.
+-
+- GCC is free software; you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free
+- Software Foundation; either version 3, or (at your option) any later
+- version.
+-
+- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+- WARRANTY; without even the implied warranty of MERCHANTABILITY or
+- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+- for more details.
+-
+- You should have received a copy of the GNU General Public License
+- along with GCC; see the file COPYING3. If not see
+- <http://www.gnu.org/licenses/>. *)
+-
+-(* Shorthand types for vector elements. *)
+-type elts = S8 | S16 | S32 | S64 | F16 | F32 | U8 | U16 | U32 | U64 | P8 | P16
+- | P64 | P128 | I8 | I16 | I32 | I64 | B8 | B16 | B32 | B64 | Conv of elts * elts
+- | Cast of elts * elts | NoElts
+-
+-type eltclass = Signed | Unsigned | Float | Poly | Int | Bits
+- | ConvClass of eltclass * eltclass | NoType
+-
+-(* These vector types correspond directly to C types. *)
+-type vectype = T_int8x8 | T_int8x16
+- | T_int16x4 | T_int16x8
+- | T_int32x2 | T_int32x4
+- | T_int64x1 | T_int64x2
+- | T_uint8x8 | T_uint8x16
+- | T_uint16x4 | T_uint16x8
+- | T_uint32x2 | T_uint32x4
+- | T_uint64x1 | T_uint64x2
+- | T_float16x4
+- | T_float32x2 | T_float32x4
+- | T_poly8x8 | T_poly8x16
+- | T_poly16x4 | T_poly16x8
+- | T_immediate of int * int
+- | T_int8 | T_int16
+- | T_int32 | T_int64
+- | T_uint8 | T_uint16
+- | T_uint32 | T_uint64
+- | T_poly8 | T_poly16
+- | T_poly64 | T_poly64x1
+- | T_poly64x2 | T_poly128
+- | T_float16 | T_float32
+- | T_arrayof of int * vectype
+- | T_ptrto of vectype | T_const of vectype
+- | T_void | T_intQI
+- | T_intHI | T_intSI
+- | T_intDI | T_intTI
+- | T_floatHF | T_floatSF
+-
+-(* The meanings of the following are:
+- TImode : "Tetra", two registers (four words).
+- EImode : "hExa", three registers (six words).
+- OImode : "Octa", four registers (eight words).
+- CImode : "dodeCa", six registers (twelve words).
+- XImode : "heXadeca", eight registers (sixteen words).
+-*)
+-
+-type inttype = B_TImode | B_EImode | B_OImode | B_CImode | B_XImode
+-
+-type shape_elt = Dreg | Qreg | Corereg | Immed | VecArray of int * shape_elt
+- | PtrTo of shape_elt | CstPtrTo of shape_elt
+- (* These next ones are used only in the test generator. *)
+- | Element_of_dreg (* Used for "lane" variants. *)
+- | Element_of_qreg (* Likewise. *)
+- | All_elements_of_dreg (* Used for "dup" variants. *)
+- | Alternatives of shape_elt list (* Used for multiple valid operands *)
+-
+-type shape_form = All of int * shape_elt
+- | Long
+- | Long_noreg of shape_elt
+- | Wide
+- | Wide_noreg of shape_elt
+- | Narrow
+- | Long_imm
+- | Narrow_imm
+- | Binary_imm of shape_elt
+- | Use_operands of shape_elt array
+- | By_scalar of shape_elt
+- | Unary_scalar of shape_elt
+- | Wide_lane
+- | Wide_scalar
+- | Pair_result of shape_elt
+-
+-type arity = Arity0 of vectype
+- | Arity1 of vectype * vectype
+- | Arity2 of vectype * vectype * vectype
+- | Arity3 of vectype * vectype * vectype * vectype
+- | Arity4 of vectype * vectype * vectype * vectype * vectype
+-
+-type vecmode = V8QI | V4HI | V4HF |V2SI | V2SF | DI
+- | V16QI | V8HI | V4SI | V4SF | V2DI | TI
+- | QI | HI | SI | SF
+-
+-type opcode =
+- (* Binary ops. *)
+- Vadd
+- | Vmul
+- | Vmla
+- | Vmls
+- | Vfma
+- | Vfms
+- | Vsub
+- | Vceq
+- | Vcge
+- | Vcgt
+- | Vcle
+- | Vclt
+- | Vcage
+- | Vcagt
+- | Vcale
+- | Vcalt
+- | Vtst
+- | Vabd
+- | Vaba
+- | Vmax
+- | Vmin
+- | Vpadd
+- | Vpada
+- | Vpmax
+- | Vpmin
+- | Vrecps
+- | Vrsqrts
+- | Vshl
+- | Vshr_n
+- | Vshl_n
+- | Vsra_n
+- | Vsri
+- | Vsli
+- (* Logic binops. *)
+- | Vand
+- | Vorr
+- | Veor
+- | Vbic
+- | Vorn
+- | Vbsl
+- (* Ops with scalar. *)
+- | Vmul_lane
+- | Vmla_lane
+- | Vmls_lane
+- | Vmul_n
+- | Vmla_n
+- | Vmls_n
+- | Vmull_n
+- | Vmull_lane
+- | Vqdmull_n
+- | Vqdmull_lane
+- | Vqdmulh_n
+- | Vqdmulh_lane
+- (* Unary ops. *)
+- | Vrintn
+- | Vrinta
+- | Vrintp
+- | Vrintm
+- | Vrintz
+- | Vabs
+- | Vneg
+- | Vcls
+- | Vclz
+- | Vcnt
+- | Vrecpe
+- | Vrsqrte
+- | Vmvn
+- (* Vector extract. *)
+- | Vext
+- (* Reverse elements. *)
+- | Vrev64
+- | Vrev32
+- | Vrev16
+- (* Transposition ops. *)
+- | Vtrn
+- | Vzip
+- | Vuzp
+- (* Loads and stores (VLD1/VST1/VLD2...), elements and structures. *)
+- | Vldx of int
+- | Vstx of int
+- | Vldx_lane of int
+- | Vldx_dup of int
+- | Vstx_lane of int
+- (* Set/extract lanes from a vector. *)
+- | Vget_lane
+- | Vset_lane
+- (* Initialize vector from bit pattern. *)
+- | Vcreate
+- (* Set all lanes to same value. *)
+- | Vdup_n
+- | Vmov_n (* Is this the same? *)
+- (* Duplicate scalar to all lanes of vector. *)
+- | Vdup_lane
+- (* Combine vectors. *)
+- | Vcombine
+- (* Get quadword high/low parts. *)
+- | Vget_high
+- | Vget_low
+- (* Convert vectors. *)
+- | Vcvt
+- | Vcvt_n
+- (* Narrow/lengthen vectors. *)
+- | Vmovn
+- | Vmovl
+- (* Table lookup. *)
+- | Vtbl of int
+- | Vtbx of int
+- (* Reinterpret casts. *)
+- | Vreinterp
+-
+-let rev_elems revsize elsize nelts _ =
+- let mask = (revsize / elsize) - 1 in
+- let arr = Array.init nelts
+- (fun i -> i lxor mask) in
+- Array.to_list arr
+-
+-let permute_range i stride nelts increment =
+- let rec build i = function
+- 0 -> []
+- | nelts -> i :: (i + stride) :: build (i + increment) (pred nelts) in
+- build i nelts
+-
+-(* Generate a list of integers suitable for vzip. *)
+-let zip_range i stride nelts = permute_range i stride nelts 1
+-
+-(* Generate a list of integers suitable for vunzip. *)
+-let uzip_range i stride nelts = permute_range i stride nelts 4
+-
+-(* Generate a list of integers suitable for trn. *)
+-let trn_range i stride nelts = permute_range i stride nelts 2
+-
+-let zip_elems _ nelts part =
+- match part with
+- `lo -> zip_range 0 nelts (nelts / 2)
+- | `hi -> zip_range (nelts / 2) nelts (nelts / 2)
+-
+-let uzip_elems _ nelts part =
+- match part with
+- `lo -> uzip_range 0 2 (nelts / 2)
+- | `hi -> uzip_range 1 2 (nelts / 2)
+-
+-let trn_elems _ nelts part =
+- match part with
+- `lo -> trn_range 0 nelts (nelts / 2)
+- | `hi -> trn_range 1 nelts (nelts / 2)
+-
+-(* Features used for documentation, to distinguish between some instruction
+- variants, and to signal special requirements (e.g. swapping arguments). *)
+-
+-type features =
+- Halving
+- | Rounding
+- | Saturating
+- | Dst_unsign
+- | High_half
+- | Doubling
+- | Flipped of string (* Builtin name to use with flipped arguments. *)
+- | InfoWord (* Pass an extra word for signage/rounding etc. (always passed
+- for All _, Long, Wide, Narrow shape_forms. *)
+- (* Implement builtin as shuffle. The parameter is a function which returns
+- masks suitable for __builtin_shuffle: arguments are (element size,
+- number of elements, high/low part selector). *)
+- | Use_shuffle of (int -> int -> [`lo|`hi] -> int list)
+- (* A specification as to the shape of instruction expected upon
+- disassembly, used if it differs from the shape used to build the
+- intrinsic prototype. Multiple entries in the constructor's argument
+- indicate that the intrinsic expands to more than one assembly
+- instruction, each with a corresponding shape specified here. *)
+- | Disassembles_as of shape_form list
+- | Builtin_name of string (* Override the name of the builtin. *)
+- (* Override the name of the instruction. If more than one name
+- is specified, it means that the instruction can have any of those
+- names. *)
+- | Instruction_name of string list
+- (* Mark that the intrinsic yields no instructions, or expands to yield
+- behavior that the test generator cannot test. *)
+- | No_op
+- (* Mark that the intrinsic has constant arguments that cannot be set
+- to the defaults (zero for pointers and one otherwise) in the test
+- cases. The function supplied must return the integer to be written
+- into the testcase for the argument number (0-based) supplied to it. *)
+- | Const_valuator of (int -> int)
+- | Fixed_vector_reg
+- | Fixed_core_reg
+- (* Mark that the intrinsic requires __ARM_FEATURE_string to be defined. *)
+- | Requires_feature of string
+- (* Mark that the intrinsic requires a particular architecture version. *)
+- | Requires_arch of int
+- (* Mark that the intrinsic requires a particular bit in __ARM_FP to
+- be set. *)
+- | Requires_FP_bit of int
+- (* Compiler optimization level for the test. *)
+- | Compiler_optim of string
+-
+-exception MixedMode of elts * elts
+-
+-let rec elt_width = function
+- S8 | U8 | P8 | I8 | B8 -> 8
+- | S16 | U16 | P16 | I16 | B16 | F16 -> 16
+- | S32 | F32 | U32 | I32 | B32 -> 32
+- | S64 | U64 | P64 | I64 | B64 -> 64
+- | P128 -> 128
+- | Conv (a, b) ->
+- let wa = elt_width a and wb = elt_width b in
+- if wa = wb then wa else raise (MixedMode (a, b))
+- | Cast (a, b) -> raise (MixedMode (a, b))
+- | NoElts -> failwith "No elts"
+-
+-let rec elt_class = function
+- S8 | S16 | S32 | S64 -> Signed
+- | U8 | U16 | U32 | U64 -> Unsigned
+- | P8 | P16 | P64 | P128 -> Poly
+- | F16 | F32 -> Float
+- | I8 | I16 | I32 | I64 -> Int
+- | B8 | B16 | B32 | B64 -> Bits
+- | Conv (a, b) | Cast (a, b) -> ConvClass (elt_class a, elt_class b)
+- | NoElts -> NoType
+-
+-let elt_of_class_width c w =
+- match c, w with
+- Signed, 8 -> S8
+- | Signed, 16 -> S16
+- | Signed, 32 -> S32
+- | Signed, 64 -> S64
+- | Float, 16 -> F16
+- | Float, 32 -> F32
+- | Unsigned, 8 -> U8
+- | Unsigned, 16 -> U16
+- | Unsigned, 32 -> U32
+- | Unsigned, 64 -> U64
+- | Poly, 8 -> P8
+- | Poly, 16 -> P16
+- | Poly, 64 -> P64
+- | Poly, 128 -> P128
+- | Int, 8 -> I8
+- | Int, 16 -> I16
+- | Int, 32 -> I32
+- | Int, 64 -> I64
+- | Bits, 8 -> B8
+- | Bits, 16 -> B16
+- | Bits, 32 -> B32
+- | Bits, 64 -> B64
+- | _ -> failwith "Bad element type"
+-
+-(* Return unsigned integer element the same width as argument. *)
+-let unsigned_of_elt elt =
+- elt_of_class_width Unsigned (elt_width elt)
+-
+-let signed_of_elt elt =
+- elt_of_class_width Signed (elt_width elt)
+-
+-(* Return untyped bits element the same width as argument. *)
+-let bits_of_elt elt =
+- elt_of_class_width Bits (elt_width elt)
+-
+-let non_signed_variant = function
+- S8 -> I8
+- | S16 -> I16
+- | S32 -> I32
+- | S64 -> I64
+- | U8 -> I8
+- | U16 -> I16
+- | U32 -> I32
+- | U64 -> I64
+- | x -> x
+-
+-let poly_unsigned_variant v =
+- let elclass = match elt_class v with
+- Poly -> Unsigned
+- | x -> x in
+- elt_of_class_width elclass (elt_width v)
+-
+-let widen_elt elt =
+- let w = elt_width elt
+- and c = elt_class elt in
+- elt_of_class_width c (w * 2)
+-
+-let narrow_elt elt =
+- let w = elt_width elt
+- and c = elt_class elt in
+- elt_of_class_width c (w / 2)
+-
+-(* If we're trying to find a mode from a "Use_operands" instruction, use the
+- last vector operand as the dominant mode used to invoke the correct builtin.
+- We must stick to this rule in neon.md. *)
+-let find_key_operand operands =
+- let rec scan opno =
+- match operands.(opno) with
+- Qreg -> Qreg
+- | Dreg -> Dreg
+- | VecArray (_, Qreg) -> Qreg
+- | VecArray (_, Dreg) -> Dreg
+- | _ -> scan (opno-1)
+- in
+- scan ((Array.length operands) - 1)
+-
+-(* Find a vecmode from a shape_elt ELT for an instruction with shape_form
+- SHAPE. For a Use_operands shape, if ARGPOS is passed then return the mode
+- for the given argument position, else determine which argument to return a
+- mode for automatically. *)
+-
+-let rec mode_of_elt ?argpos elt shape =
+- let flt = match elt_class elt with
+- Float | ConvClass(_, Float) -> true | _ -> false in
+- let idx =
+- match elt_width elt with
+- 8 -> 0 | 16 -> 1 | 32 -> 2 | 64 -> 3 | 128 -> 4
+- | _ -> failwith "Bad element width"
+- in match shape with
+- All (_, Dreg) | By_scalar Dreg | Pair_result Dreg | Unary_scalar Dreg
+- | Binary_imm Dreg | Long_noreg Dreg | Wide_noreg Dreg ->
+- if flt then
+- [| V8QI; V4HF; V2SF; DI |].(idx)
+- else
+- [| V8QI; V4HI; V2SI; DI |].(idx)
+- | All (_, Qreg) | By_scalar Qreg | Pair_result Qreg | Unary_scalar Qreg
+- | Binary_imm Qreg | Long_noreg Qreg | Wide_noreg Qreg ->
+- [| V16QI; V8HI; if flt then V4SF else V4SI; V2DI; TI|].(idx)
+- | All (_, (Corereg | PtrTo _ | CstPtrTo _)) ->
+- [| QI; HI; if flt then SF else SI; DI |].(idx)
+- | Long | Wide | Wide_lane | Wide_scalar
+- | Long_imm ->
+- [| V8QI; V4HI; V2SI; DI |].(idx)
+- | Narrow | Narrow_imm -> [| V16QI; V8HI; V4SI; V2DI |].(idx)
+- | Use_operands ops ->
+- begin match argpos with
+- None -> mode_of_elt ?argpos elt (All (0, (find_key_operand ops)))
+- | Some pos -> mode_of_elt ?argpos elt (All (0, ops.(pos)))
+- end
+- | _ -> failwith "invalid shape"
+-
+-(* Modify an element type dependent on the shape of the instruction and the
+- operand number. *)
+-
+-let shapemap shape no =
+- let ident = fun x -> x in
+- match shape with
+- All _ | Use_operands _ | By_scalar _ | Pair_result _ | Unary_scalar _
+- | Binary_imm _ -> ident
+- | Long | Long_noreg _ | Wide_scalar | Long_imm ->
+- [| widen_elt; ident; ident |].(no)
+- | Wide | Wide_noreg _ -> [| widen_elt; widen_elt; ident |].(no)
+- | Wide_lane -> [| widen_elt; ident; ident; ident |].(no)
+- | Narrow | Narrow_imm -> [| narrow_elt; ident; ident |].(no)
+-
+-(* Register type (D/Q) of an operand, based on shape and operand number. *)
+-
+-let regmap shape no =
+- match shape with
+- All (_, reg) | Long_noreg reg | Wide_noreg reg -> reg
+- | Long -> [| Qreg; Dreg; Dreg |].(no)
+- | Wide -> [| Qreg; Qreg; Dreg |].(no)
+- | Narrow -> [| Dreg; Qreg; Qreg |].(no)
+- | Wide_lane -> [| Qreg; Dreg; Dreg; Immed |].(no)
+- | Wide_scalar -> [| Qreg; Dreg; Corereg |].(no)
+- | By_scalar reg -> [| reg; reg; Dreg; Immed |].(no)
+- | Unary_scalar reg -> [| reg; Dreg; Immed |].(no)
+- | Pair_result reg -> [| VecArray (2, reg); reg; reg |].(no)
+- | Binary_imm reg -> [| reg; reg; Immed |].(no)
+- | Long_imm -> [| Qreg; Dreg; Immed |].(no)
+- | Narrow_imm -> [| Dreg; Qreg; Immed |].(no)
+- | Use_operands these -> these.(no)
+-
+-let type_for_elt shape elt no =
+- let elt = (shapemap shape no) elt in
+- let reg = regmap shape no in
+- let rec type_for_reg_elt reg elt =
+- match reg with
+- Dreg ->
+- begin match elt with
+- S8 -> T_int8x8
+- | S16 -> T_int16x4
+- | S32 -> T_int32x2
+- | S64 -> T_int64x1
+- | U8 -> T_uint8x8
+- | U16 -> T_uint16x4
+- | U32 -> T_uint32x2
+- | U64 -> T_uint64x1
+- | P64 -> T_poly64x1
+- | P128 -> T_poly128
+- | F16 -> T_float16x4
+- | F32 -> T_float32x2
+- | P8 -> T_poly8x8
+- | P16 -> T_poly16x4
+- | _ -> failwith "Bad elt type for Dreg"
+- end
+- | Qreg ->
+- begin match elt with
+- S8 -> T_int8x16
+- | S16 -> T_int16x8
+- | S32 -> T_int32x4
+- | S64 -> T_int64x2
+- | U8 -> T_uint8x16
+- | U16 -> T_uint16x8
+- | U32 -> T_uint32x4
+- | U64 -> T_uint64x2
+- | F32 -> T_float32x4
+- | P8 -> T_poly8x16
+- | P16 -> T_poly16x8
+- | P64 -> T_poly64x2
+- | P128 -> T_poly128
+- | _ -> failwith "Bad elt type for Qreg"
+- end
+- | Corereg ->
+- begin match elt with
+- S8 -> T_int8
+- | S16 -> T_int16
+- | S32 -> T_int32
+- | S64 -> T_int64
+- | U8 -> T_uint8
+- | U16 -> T_uint16
+- | U32 -> T_uint32
+- | U64 -> T_uint64
+- | P8 -> T_poly8
+- | P16 -> T_poly16
+- | P64 -> T_poly64
+- | P128 -> T_poly128
+- | F32 -> T_float32
+- | _ -> failwith "Bad elt type for Corereg"
+- end
+- | Immed ->
+- T_immediate (0, 0)
+- | VecArray (num, sub) ->
+- T_arrayof (num, type_for_reg_elt sub elt)
+- | PtrTo x ->
+- T_ptrto (type_for_reg_elt x elt)
+- | CstPtrTo x ->
+- T_ptrto (T_const (type_for_reg_elt x elt))
+- (* Anything else is solely for the use of the test generator. *)
+- | _ -> assert false
+- in
+- type_for_reg_elt reg elt
+-
+-(* Return size of a vector type, in bits. *)
+-let vectype_size = function
+- T_int8x8 | T_int16x4 | T_int32x2 | T_int64x1
+- | T_uint8x8 | T_uint16x4 | T_uint32x2 | T_uint64x1
+- | T_float32x2 | T_poly8x8 | T_poly64x1 | T_poly16x4 | T_float16x4 -> 64
+- | T_int8x16 | T_int16x8 | T_int32x4 | T_int64x2
+- | T_uint8x16 | T_uint16x8 | T_uint32x4 | T_uint64x2
+- | T_float32x4 | T_poly8x16 | T_poly64x2 | T_poly16x8 -> 128
+- | _ -> raise Not_found
+-
+-let inttype_for_array num elttype =
+- let eltsize = vectype_size elttype in
+- let numwords = (num * eltsize) / 32 in
+- match numwords with
+- 4 -> B_TImode
+- | 6 -> B_EImode
+- | 8 -> B_OImode
+- | 12 -> B_CImode
+- | 16 -> B_XImode
+- | _ -> failwith ("no int type for size " ^ string_of_int numwords)
+-
+-(* These functions return pairs of (internal, external) types, where "internal"
+- types are those seen by GCC, and "external" are those seen by the assembler.
+- These types aren't necessarily the same, since the intrinsics can munge more
+- than one C type into each assembler opcode. *)
+-
+-let make_sign_invariant func shape elt =
+- let arity, elt' = func shape elt in
+- arity, non_signed_variant elt'
+-
+-(* Don't restrict any types. *)
+-
+-let elts_same make_arity shape elt =
+- let vtype = type_for_elt shape elt in
+- make_arity vtype, elt
+-
+-(* As sign_invar_*, but when sign matters. *)
+-let elts_same_io_lane =
+- elts_same (fun vtype -> Arity4 (vtype 0, vtype 0, vtype 1, vtype 2, vtype 3))
+-
+-let elts_same_io =
+- elts_same (fun vtype -> Arity3 (vtype 0, vtype 0, vtype 1, vtype 2))
+-
+-let elts_same_2_lane =
+- elts_same (fun vtype -> Arity3 (vtype 0, vtype 1, vtype 2, vtype 3))
+-
+-let elts_same_3 = elts_same_2_lane
+-
+-let elts_same_2 =
+- elts_same (fun vtype -> Arity2 (vtype 0, vtype 1, vtype 2))
+-
+-let elts_same_1 =
+- elts_same (fun vtype -> Arity1 (vtype 0, vtype 1))
+-
+-(* Use for signed/unsigned invariant operations (i.e. where the operation
+- doesn't depend on the sign of the data. *)
+-
+-let sign_invar_io_lane = make_sign_invariant elts_same_io_lane
+-let sign_invar_io = make_sign_invariant elts_same_io
+-let sign_invar_2_lane = make_sign_invariant elts_same_2_lane
+-let sign_invar_2 = make_sign_invariant elts_same_2
+-let sign_invar_1 = make_sign_invariant elts_same_1
+-
+-(* Sign-sensitive comparison. *)
+-
+-let cmp_sign_matters shape elt =
+- let vtype = type_for_elt shape elt
+- and rtype = type_for_elt shape (unsigned_of_elt elt) 0 in
+- Arity2 (rtype, vtype 1, vtype 2), elt
+-
+-(* Signed/unsigned invariant comparison. *)
+-
+-let cmp_sign_invar shape elt =
+- let shape', elt' = cmp_sign_matters shape elt in
+- let elt'' =
+- match non_signed_variant elt' with
+- P8 -> I8
+- | x -> x
+- in
+- shape', elt''
+-
+-(* Comparison (VTST) where only the element width matters. *)
+-
+-let cmp_bits shape elt =
+- let vtype = type_for_elt shape elt
+- and rtype = type_for_elt shape (unsigned_of_elt elt) 0
+- and bits_only = bits_of_elt elt in
+- Arity2 (rtype, vtype 1, vtype 2), bits_only
+-
+-let reg_shift shape elt =
+- let vtype = type_for_elt shape elt
+- and op2type = type_for_elt shape (signed_of_elt elt) 2 in
+- Arity2 (vtype 0, vtype 1, op2type), elt
+-
+-(* Genericised constant-shift type-generating function. *)
+-
+-let const_shift mkimm ?arity ?result shape elt =
+- let op2type = (shapemap shape 2) elt in
+- let op2width = elt_width op2type in
+- let op2 = mkimm op2width
+- and op1 = type_for_elt shape elt 1
+- and r_elt =
+- match result with
+- None -> elt
+- | Some restriction -> restriction elt in
+- let rtype = type_for_elt shape r_elt 0 in
+- match arity with
+- None -> Arity2 (rtype, op1, op2), elt
+- | Some mkarity -> mkarity rtype op1 op2, elt
+-
+-(* Use for immediate right-shifts. *)
+-
+-let shift_right shape elt =
+- const_shift (fun imm -> T_immediate (1, imm)) shape elt
+-
+-let shift_right_acc shape elt =
+- const_shift (fun imm -> T_immediate (1, imm))
+- ~arity:(fun dst op1 op2 -> Arity3 (dst, dst, op1, op2)) shape elt
+-
+-(* Use for immediate right-shifts when the operation doesn't care about
+- signedness. *)
+-
+-let shift_right_sign_invar =
+- make_sign_invariant shift_right
+-
+-(* Immediate right-shift; result is unsigned even when operand is signed. *)
+-
+-let shift_right_to_uns shape elt =
+- const_shift (fun imm -> T_immediate (1, imm)) ~result:unsigned_of_elt
+- shape elt
+-
+-(* Immediate left-shift. *)
+-
+-let shift_left shape elt =
+- const_shift (fun imm -> T_immediate (0, imm - 1)) shape elt
+-
+-(* Immediate left-shift, unsigned result. *)
+-
+-let shift_left_to_uns shape elt =
+- const_shift (fun imm -> T_immediate (0, imm - 1)) ~result:unsigned_of_elt
+- shape elt
+-
+-(* Immediate left-shift, don't care about signs. *)
+-
+-let shift_left_sign_invar =
+- make_sign_invariant shift_left
+-
+-(* Shift left/right and insert: only element size matters. *)
+-
+-let shift_insert shape elt =
+- let arity, elt =
+- const_shift (fun imm -> T_immediate (1, imm))
+- ~arity:(fun dst op1 op2 -> Arity3 (dst, dst, op1, op2)) shape elt in
+- arity, bits_of_elt elt
+-
+-(* Get/set lane. *)
+-
+-let get_lane shape elt =
+- let vtype = type_for_elt shape elt in
+- Arity2 (vtype 0, vtype 1, vtype 2),
+- (match elt with P8 -> U8 | P16 -> U16 | S32 | U32 | F32 -> B32 | x -> x)
+-
+-let set_lane shape elt =
+- let vtype = type_for_elt shape elt in
+- Arity3 (vtype 0, vtype 1, vtype 2, vtype 3), bits_of_elt elt
+-
+-let set_lane_notype shape elt =
+- let vtype = type_for_elt shape elt in
+- Arity3 (vtype 0, vtype 1, vtype 2, vtype 3), NoElts
+-
+-let create_vector shape elt =
+- let vtype = type_for_elt shape U64 1
+- and rtype = type_for_elt shape elt 0 in
+- Arity1 (rtype, vtype), elt
+-
+-let conv make_arity shape elt =
+- let edest, esrc = match elt with
+- Conv (edest, esrc) | Cast (edest, esrc) -> edest, esrc
+- | _ -> failwith "Non-conversion element in conversion" in
+- let vtype = type_for_elt shape esrc
+- and rtype = type_for_elt shape edest 0 in
+- make_arity rtype vtype, elt
+-
+-let conv_1 = conv (fun rtype vtype -> Arity1 (rtype, vtype 1))
+-let conv_2 = conv (fun rtype vtype -> Arity2 (rtype, vtype 1, vtype 2))
+-
+-(* Operation has an unsigned result even if operands are signed. *)
+-
+-let dst_unsign make_arity shape elt =
+- let vtype = type_for_elt shape elt
+- and rtype = type_for_elt shape (unsigned_of_elt elt) 0 in
+- make_arity rtype vtype, elt
+-
+-let dst_unsign_1 = dst_unsign (fun rtype vtype -> Arity1 (rtype, vtype 1))
+-
+-let make_bits_only func shape elt =
+- let arity, elt' = func shape elt in
+- arity, bits_of_elt elt'
+-
+-(* Extend operation. *)
+-
+-let extend shape elt =
+- let vtype = type_for_elt shape elt in
+- Arity3 (vtype 0, vtype 1, vtype 2, vtype 3), bits_of_elt elt
+-
+-(* Table look-up operations. Operand 2 is signed/unsigned for signed/unsigned
+- integer ops respectively, or unsigned for polynomial ops. *)
+-
+-let table mkarity shape elt =
+- let vtype = type_for_elt shape elt in
+- let op2 = type_for_elt shape (poly_unsigned_variant elt) 2 in
+- mkarity vtype op2, bits_of_elt elt
+-
+-let table_2 = table (fun vtype op2 -> Arity2 (vtype 0, vtype 1, op2))
+-let table_io = table (fun vtype op2 -> Arity3 (vtype 0, vtype 0, vtype 1, op2))
+-
+-(* Operations where only bits matter. *)
+-
+-let bits_1 = make_bits_only elts_same_1
+-let bits_2 = make_bits_only elts_same_2
+-let bits_3 = make_bits_only elts_same_3
+-
+-(* Store insns. *)
+-let store_1 shape elt =
+- let vtype = type_for_elt shape elt in
+- Arity2 (T_void, vtype 0, vtype 1), bits_of_elt elt
+-
+-let store_3 shape elt =
+- let vtype = type_for_elt shape elt in
+- Arity3 (T_void, vtype 0, vtype 1, vtype 2), bits_of_elt elt
+-
+-let make_notype func shape elt =
+- let arity, _ = func shape elt in
+- arity, NoElts
+-
+-let notype_1 = make_notype elts_same_1
+-let notype_2 = make_notype elts_same_2
+-let notype_3 = make_notype elts_same_3
+-
+-(* Bit-select operations (first operand is unsigned int). *)
+-
+-let bit_select shape elt =
+- let vtype = type_for_elt shape elt
+- and itype = type_for_elt shape (unsigned_of_elt elt) in
+- Arity3 (vtype 0, itype 1, vtype 2, vtype 3), NoElts
+-
+-(* Common lists of supported element types. *)
+-
+-let s_8_32 = [S8; S16; S32]
+-let u_8_32 = [U8; U16; U32]
+-let su_8_32 = [S8; S16; S32; U8; U16; U32]
+-let su_8_64 = S64 :: U64 :: su_8_32
+-let su_16_64 = [S16; S32; S64; U16; U32; U64]
+-let pf_su_8_16 = [P8; P16; S8; S16; U8; U16]
+-let pf_su_8_32 = P8 :: P16 :: F32 :: su_8_32
+-let pf_su_8_64 = P8 :: P16 :: F32 :: su_8_64
+-let suf_32 = [S32; U32; F32]
+-
+-let ops =
+- [
+- (* Addition. *)
+- Vadd, [], All (3, Dreg), "vadd", sign_invar_2, F32 :: su_8_32;
+- Vadd, [No_op], All (3, Dreg), "vadd", sign_invar_2, [S64; U64];
+- Vadd, [], All (3, Qreg), "vaddQ", sign_invar_2, F32 :: su_8_64;
+- Vadd, [], Long, "vaddl", elts_same_2, su_8_32;
+- Vadd, [], Wide, "vaddw", elts_same_2, su_8_32;
+- Vadd, [Halving], All (3, Dreg), "vhadd", elts_same_2, su_8_32;
+- Vadd, [Halving], All (3, Qreg), "vhaddQ", elts_same_2, su_8_32;
+- Vadd, [Instruction_name ["vrhadd"]; Rounding; Halving],
+- All (3, Dreg), "vRhadd", elts_same_2, su_8_32;
+- Vadd, [Instruction_name ["vrhadd"]; Rounding; Halving],
+- All (3, Qreg), "vRhaddQ", elts_same_2, su_8_32;
+- Vadd, [Saturating], All (3, Dreg), "vqadd", elts_same_2, su_8_64;
+- Vadd, [Saturating], All (3, Qreg), "vqaddQ", elts_same_2, su_8_64;
+- Vadd, [High_half], Narrow, "vaddhn", sign_invar_2, su_16_64;
+- Vadd, [Instruction_name ["vraddhn"]; Rounding; High_half],
+- Narrow, "vRaddhn", sign_invar_2, su_16_64;
+-
+- (* Multiplication. *)
+- Vmul, [], All (3, Dreg), "vmul", sign_invar_2, P8 :: F32 :: su_8_32;
+- Vmul, [], All (3, Qreg), "vmulQ", sign_invar_2, P8 :: F32 :: su_8_32;
+- Vmul, [Saturating; Doubling; High_half], All (3, Dreg), "vqdmulh",
+- elts_same_2, [S16; S32];
+- Vmul, [Saturating; Doubling; High_half], All (3, Qreg), "vqdmulhQ",
+- elts_same_2, [S16; S32];
+- Vmul,
+- [Saturating; Rounding; Doubling; High_half;
+- Instruction_name ["vqrdmulh"]],
+- All (3, Dreg), "vqRdmulh",
+- elts_same_2, [S16; S32];
+- Vmul,
+- [Saturating; Rounding; Doubling; High_half;
+- Instruction_name ["vqrdmulh"]],
+- All (3, Qreg), "vqRdmulhQ",
+- elts_same_2, [S16; S32];
+- Vmul, [], Long, "vmull", elts_same_2, P8 :: su_8_32;
+- Vmul, [Saturating; Doubling], Long, "vqdmull", elts_same_2, [S16; S32];
+-
+- (* Multiply-accumulate. *)
+- Vmla, [], All (3, Dreg), "vmla", sign_invar_io, F32 :: su_8_32;
+- Vmla, [], All (3, Qreg), "vmlaQ", sign_invar_io, F32 :: su_8_32;
+- Vmla, [], Long, "vmlal", elts_same_io, su_8_32;
+- Vmla, [Saturating; Doubling], Long, "vqdmlal", elts_same_io, [S16; S32];
+-
+- (* Multiply-subtract. *)
+- Vmls, [], All (3, Dreg), "vmls", sign_invar_io, F32 :: su_8_32;
+- Vmls, [], All (3, Qreg), "vmlsQ", sign_invar_io, F32 :: su_8_32;
+- Vmls, [], Long, "vmlsl", elts_same_io, su_8_32;
+- Vmls, [Saturating; Doubling], Long, "vqdmlsl", elts_same_io, [S16; S32];
+-
+- (* Fused-multiply-accumulate. *)
+- Vfma, [Requires_feature "FMA"], All (3, Dreg), "vfma", elts_same_io, [F32];
+- Vfma, [Requires_feature "FMA"], All (3, Qreg), "vfmaQ", elts_same_io, [F32];
+- Vfms, [Requires_feature "FMA"], All (3, Dreg), "vfms", elts_same_io, [F32];
+- Vfms, [Requires_feature "FMA"], All (3, Qreg), "vfmsQ", elts_same_io, [F32];
+-
+- (* Round to integral. *)
+- Vrintn, [Builtin_name "vrintn"; Requires_arch 8], Use_operands [| Dreg; Dreg |],
+- "vrndn", elts_same_1, [F32];
+- Vrintn, [Builtin_name "vrintn"; Requires_arch 8], Use_operands [| Qreg; Qreg |],
+- "vrndqn", elts_same_1, [F32];
+- Vrinta, [Builtin_name "vrinta"; Requires_arch 8], Use_operands [| Dreg; Dreg |],
+- "vrnda", elts_same_1, [F32];
+- Vrinta, [Builtin_name "vrinta"; Requires_arch 8], Use_operands [| Qreg; Qreg |],
+- "vrndqa", elts_same_1, [F32];
+- Vrintp, [Builtin_name "vrintp"; Requires_arch 8], Use_operands [| Dreg; Dreg |],
+- "vrndp", elts_same_1, [F32];
+- Vrintp, [Builtin_name "vrintp"; Requires_arch 8], Use_operands [| Qreg; Qreg |],
+- "vrndqp", elts_same_1, [F32];
+- Vrintm, [Builtin_name "vrintm"; Requires_arch 8], Use_operands [| Dreg; Dreg |],
+- "vrndm", elts_same_1, [F32];
+- Vrintm, [Builtin_name "vrintm"; Requires_arch 8], Use_operands [| Qreg; Qreg |],
+- "vrndqm", elts_same_1, [F32];
+- Vrintz, [Builtin_name "vrintz"; Requires_arch 8], Use_operands [| Dreg; Dreg |],
+- "vrnd", elts_same_1, [F32];
+- Vrintz, [Builtin_name "vrintz"; Requires_arch 8], Use_operands [| Qreg; Qreg |],
+- "vrndq", elts_same_1, [F32];
+- (* Subtraction. *)
+- Vsub, [], All (3, Dreg), "vsub", sign_invar_2, F32 :: su_8_32;
+- Vsub, [No_op], All (3, Dreg), "vsub", sign_invar_2, [S64; U64];
+- Vsub, [], All (3, Qreg), "vsubQ", sign_invar_2, F32 :: su_8_64;
+- Vsub, [], Long, "vsubl", elts_same_2, su_8_32;
+- Vsub, [], Wide, "vsubw", elts_same_2, su_8_32;
+- Vsub, [Halving], All (3, Dreg), "vhsub", elts_same_2, su_8_32;
+- Vsub, [Halving], All (3, Qreg), "vhsubQ", elts_same_2, su_8_32;
+- Vsub, [Saturating], All (3, Dreg), "vqsub", elts_same_2, su_8_64;
+- Vsub, [Saturating], All (3, Qreg), "vqsubQ", elts_same_2, su_8_64;
+- Vsub, [High_half], Narrow, "vsubhn", sign_invar_2, su_16_64;
+- Vsub, [Instruction_name ["vrsubhn"]; Rounding; High_half],
+- Narrow, "vRsubhn", sign_invar_2, su_16_64;
+-
+- (* Comparison, equal. *)
+- Vceq, [], All (3, Dreg), "vceq", cmp_sign_invar, P8 :: F32 :: su_8_32;
+- Vceq, [], All (3, Qreg), "vceqQ", cmp_sign_invar, P8 :: F32 :: su_8_32;
+-
+- (* Comparison, greater-than or equal. *)
+- Vcge, [], All (3, Dreg), "vcge", cmp_sign_matters, F32 :: s_8_32;
+- Vcge, [Instruction_name ["vcge"]; Builtin_name "vcgeu"],
+- All (3, Dreg), "vcge", cmp_sign_matters,
+- u_8_32;
+- Vcge, [], All (3, Qreg), "vcgeQ", cmp_sign_matters, F32 :: s_8_32;
+- Vcge, [Instruction_name ["vcge"]; Builtin_name "vcgeu"],
+- All (3, Qreg), "vcgeQ", cmp_sign_matters,
+- u_8_32;
+-
+- (* Comparison, less-than or equal. *)
+- Vcle, [Flipped "vcge"], All (3, Dreg), "vcle", cmp_sign_matters,
+- F32 :: s_8_32;
+- Vcle, [Instruction_name ["vcge"]; Flipped "vcgeu"],
+- All (3, Dreg), "vcle", cmp_sign_matters,
+- u_8_32;
+- Vcle, [Instruction_name ["vcge"]; Flipped "vcgeQ"],
+- All (3, Qreg), "vcleQ", cmp_sign_matters,
+- F32 :: s_8_32;
+- Vcle, [Instruction_name ["vcge"]; Flipped "vcgeuQ"],
+- All (3, Qreg), "vcleQ", cmp_sign_matters,
+- u_8_32;
+-
+- (* Comparison, greater-than. *)
+- Vcgt, [], All (3, Dreg), "vcgt", cmp_sign_matters, F32 :: s_8_32;
+- Vcgt, [Instruction_name ["vcgt"]; Builtin_name "vcgtu"],
+- All (3, Dreg), "vcgt", cmp_sign_matters,
+- u_8_32;
+- Vcgt, [], All (3, Qreg), "vcgtQ", cmp_sign_matters, F32 :: s_8_32;
+- Vcgt, [Instruction_name ["vcgt"]; Builtin_name "vcgtu"],
+- All (3, Qreg), "vcgtQ", cmp_sign_matters,
+- u_8_32;
+-
+- (* Comparison, less-than. *)
+- Vclt, [Flipped "vcgt"], All (3, Dreg), "vclt", cmp_sign_matters,
+- F32 :: s_8_32;
+- Vclt, [Instruction_name ["vcgt"]; Flipped "vcgtu"],
+- All (3, Dreg), "vclt", cmp_sign_matters,
+- u_8_32;
+- Vclt, [Instruction_name ["vcgt"]; Flipped "vcgtQ"],
+- All (3, Qreg), "vcltQ", cmp_sign_matters,
+- F32 :: s_8_32;
+- Vclt, [Instruction_name ["vcgt"]; Flipped "vcgtuQ"],
+- All (3, Qreg), "vcltQ", cmp_sign_matters,
+- u_8_32;
+-
+- (* Compare absolute greater-than or equal. *)
+- Vcage, [Instruction_name ["vacge"]],
+- All (3, Dreg), "vcage", cmp_sign_matters, [F32];
+- Vcage, [Instruction_name ["vacge"]],
+- All (3, Qreg), "vcageQ", cmp_sign_matters, [F32];
+-
+- (* Compare absolute less-than or equal. *)
+- Vcale, [Instruction_name ["vacge"]; Flipped "vcage"],
+- All (3, Dreg), "vcale", cmp_sign_matters, [F32];
+- Vcale, [Instruction_name ["vacge"]; Flipped "vcageQ"],
+- All (3, Qreg), "vcaleQ", cmp_sign_matters, [F32];
+-
+- (* Compare absolute greater-than or equal. *)
+- Vcagt, [Instruction_name ["vacgt"]],
+- All (3, Dreg), "vcagt", cmp_sign_matters, [F32];
+- Vcagt, [Instruction_name ["vacgt"]],
+- All (3, Qreg), "vcagtQ", cmp_sign_matters, [F32];
+-
+- (* Compare absolute less-than or equal. *)
+- Vcalt, [Instruction_name ["vacgt"]; Flipped "vcagt"],
+- All (3, Dreg), "vcalt", cmp_sign_matters, [F32];
+- Vcalt, [Instruction_name ["vacgt"]; Flipped "vcagtQ"],
+- All (3, Qreg), "vcaltQ", cmp_sign_matters, [F32];
+-
+- (* Test bits. *)
+- Vtst, [], All (3, Dreg), "vtst", cmp_bits, P8 :: su_8_32;
+- Vtst, [], All (3, Qreg), "vtstQ", cmp_bits, P8 :: su_8_32;
+-
+- (* Absolute difference. *)
+- Vabd, [], All (3, Dreg), "vabd", elts_same_2, F32 :: su_8_32;
+- Vabd, [], All (3, Qreg), "vabdQ", elts_same_2, F32 :: su_8_32;
+- Vabd, [], Long, "vabdl", elts_same_2, su_8_32;
+-
+- (* Absolute difference and accumulate. *)
+- Vaba, [], All (3, Dreg), "vaba", elts_same_io, su_8_32;
+- Vaba, [], All (3, Qreg), "vabaQ", elts_same_io, su_8_32;
+- Vaba, [], Long, "vabal", elts_same_io, su_8_32;
+-
+- (* Max. *)
+- Vmax, [], All (3, Dreg), "vmax", elts_same_2, F32 :: su_8_32;
+- Vmax, [], All (3, Qreg), "vmaxQ", elts_same_2, F32 :: su_8_32;
+-
+- (* Min. *)
+- Vmin, [], All (3, Dreg), "vmin", elts_same_2, F32 :: su_8_32;
+- Vmin, [], All (3, Qreg), "vminQ", elts_same_2, F32 :: su_8_32;
+-
+- (* Pairwise add. *)
+- Vpadd, [], All (3, Dreg), "vpadd", sign_invar_2, F32 :: su_8_32;
+- Vpadd, [], Long_noreg Dreg, "vpaddl", elts_same_1, su_8_32;
+- Vpadd, [], Long_noreg Qreg, "vpaddlQ", elts_same_1, su_8_32;
+-
+- (* Pairwise add, widen and accumulate. *)
+- Vpada, [], Wide_noreg Dreg, "vpadal", elts_same_2, su_8_32;
+- Vpada, [], Wide_noreg Qreg, "vpadalQ", elts_same_2, su_8_32;
+-
+- (* Folding maximum, minimum. *)
+- Vpmax, [], All (3, Dreg), "vpmax", elts_same_2, F32 :: su_8_32;
+- Vpmin, [], All (3, Dreg), "vpmin", elts_same_2, F32 :: su_8_32;
+-
+- (* Reciprocal step. *)
+- Vrecps, [], All (3, Dreg), "vrecps", elts_same_2, [F32];
+- Vrecps, [], All (3, Qreg), "vrecpsQ", elts_same_2, [F32];
+- Vrsqrts, [], All (3, Dreg), "vrsqrts", elts_same_2, [F32];
+- Vrsqrts, [], All (3, Qreg), "vrsqrtsQ", elts_same_2, [F32];
+-
+- (* Vector shift left. *)
+- Vshl, [], All (3, Dreg), "vshl", reg_shift, su_8_64;
+- Vshl, [], All (3, Qreg), "vshlQ", reg_shift, su_8_64;
+- Vshl, [Instruction_name ["vrshl"]; Rounding],
+- All (3, Dreg), "vRshl", reg_shift, su_8_64;
+- Vshl, [Instruction_name ["vrshl"]; Rounding],
+- All (3, Qreg), "vRshlQ", reg_shift, su_8_64;
+- Vshl, [Saturating], All (3, Dreg), "vqshl", reg_shift, su_8_64;
+- Vshl, [Saturating], All (3, Qreg), "vqshlQ", reg_shift, su_8_64;
+- Vshl, [Instruction_name ["vqrshl"]; Saturating; Rounding],
+- All (3, Dreg), "vqRshl", reg_shift, su_8_64;
+- Vshl, [Instruction_name ["vqrshl"]; Saturating; Rounding],
+- All (3, Qreg), "vqRshlQ", reg_shift, su_8_64;
+-
+- (* Vector shift right by constant. *)
+- Vshr_n, [], Binary_imm Dreg, "vshr_n", shift_right, su_8_64;
+- Vshr_n, [], Binary_imm Qreg, "vshrQ_n", shift_right, su_8_64;
+- Vshr_n, [Instruction_name ["vrshr"]; Rounding], Binary_imm Dreg,
+- "vRshr_n", shift_right, su_8_64;
+- Vshr_n, [Instruction_name ["vrshr"]; Rounding], Binary_imm Qreg,
+- "vRshrQ_n", shift_right, su_8_64;
+- Vshr_n, [], Narrow_imm, "vshrn_n", shift_right_sign_invar, su_16_64;
+- Vshr_n, [Instruction_name ["vrshrn"]; Rounding], Narrow_imm, "vRshrn_n",
+- shift_right_sign_invar, su_16_64;
+- Vshr_n, [Saturating], Narrow_imm, "vqshrn_n", shift_right, su_16_64;
+- Vshr_n, [Instruction_name ["vqrshrn"]; Saturating; Rounding], Narrow_imm,
+- "vqRshrn_n", shift_right, su_16_64;
+- Vshr_n, [Saturating; Dst_unsign], Narrow_imm, "vqshrun_n",
+- shift_right_to_uns, [S16; S32; S64];
+- Vshr_n, [Instruction_name ["vqrshrun"]; Saturating; Dst_unsign; Rounding],
+- Narrow_imm, "vqRshrun_n", shift_right_to_uns, [S16; S32; S64];
+-
+- (* Vector shift left by constant. *)
+- Vshl_n, [], Binary_imm Dreg, "vshl_n", shift_left_sign_invar, su_8_64;
+- Vshl_n, [], Binary_imm Qreg, "vshlQ_n", shift_left_sign_invar, su_8_64;
+- Vshl_n, [Saturating], Binary_imm Dreg, "vqshl_n", shift_left, su_8_64;
+- Vshl_n, [Saturating], Binary_imm Qreg, "vqshlQ_n", shift_left, su_8_64;
+- Vshl_n, [Saturating; Dst_unsign], Binary_imm Dreg, "vqshlu_n",
+- shift_left_to_uns, [S8; S16; S32; S64];
+- Vshl_n, [Saturating; Dst_unsign], Binary_imm Qreg, "vqshluQ_n",
+- shift_left_to_uns, [S8; S16; S32; S64];
+- Vshl_n, [], Long_imm, "vshll_n", shift_left, su_8_32;
+-
+- (* Vector shift right by constant and accumulate. *)
+- Vsra_n, [], Binary_imm Dreg, "vsra_n", shift_right_acc, su_8_64;
+- Vsra_n, [], Binary_imm Qreg, "vsraQ_n", shift_right_acc, su_8_64;
+- Vsra_n, [Instruction_name ["vrsra"]; Rounding], Binary_imm Dreg,
+- "vRsra_n", shift_right_acc, su_8_64;
+- Vsra_n, [Instruction_name ["vrsra"]; Rounding], Binary_imm Qreg,
+- "vRsraQ_n", shift_right_acc, su_8_64;
+-
+- (* Vector shift right and insert. *)
+- Vsri, [Requires_feature "CRYPTO"], Use_operands [| Dreg; Dreg; Immed |], "vsri_n", shift_insert,
+- [P64];
+- Vsri, [], Use_operands [| Dreg; Dreg; Immed |], "vsri_n", shift_insert,
+- P8 :: P16 :: su_8_64;
+- Vsri, [Requires_feature "CRYPTO"], Use_operands [| Qreg; Qreg; Immed |], "vsriQ_n", shift_insert,
+- [P64];
+- Vsri, [], Use_operands [| Qreg; Qreg; Immed |], "vsriQ_n", shift_insert,
+- P8 :: P16 :: su_8_64;
+-
+- (* Vector shift left and insert. *)
+- Vsli, [Requires_feature "CRYPTO"], Use_operands [| Dreg; Dreg; Immed |], "vsli_n", shift_insert,
+- [P64];
+- Vsli, [], Use_operands [| Dreg; Dreg; Immed |], "vsli_n", shift_insert,
+- P8 :: P16 :: su_8_64;
+- Vsli, [Requires_feature "CRYPTO"], Use_operands [| Qreg; Qreg; Immed |], "vsliQ_n", shift_insert,
+- [P64];
+- Vsli, [], Use_operands [| Qreg; Qreg; Immed |], "vsliQ_n", shift_insert,
+- P8 :: P16 :: su_8_64;
+-
+- (* Absolute value. *)
+- Vabs, [], All (2, Dreg), "vabs", elts_same_1, [S8; S16; S32; F32];
+- Vabs, [], All (2, Qreg), "vabsQ", elts_same_1, [S8; S16; S32; F32];
+- Vabs, [Saturating], All (2, Dreg), "vqabs", elts_same_1, [S8; S16; S32];
+- Vabs, [Saturating], All (2, Qreg), "vqabsQ", elts_same_1, [S8; S16; S32];
+-
+- (* Negate. *)
+- Vneg, [], All (2, Dreg), "vneg", elts_same_1, [S8; S16; S32; F32];
+- Vneg, [], All (2, Qreg), "vnegQ", elts_same_1, [S8; S16; S32; F32];
+- Vneg, [Saturating], All (2, Dreg), "vqneg", elts_same_1, [S8; S16; S32];
+- Vneg, [Saturating], All (2, Qreg), "vqnegQ", elts_same_1, [S8; S16; S32];
+-
+- (* Bitwise not. *)
+- Vmvn, [], All (2, Dreg), "vmvn", notype_1, P8 :: su_8_32;
+- Vmvn, [], All (2, Qreg), "vmvnQ", notype_1, P8 :: su_8_32;
+-
+- (* Count leading sign bits. *)
+- Vcls, [], All (2, Dreg), "vcls", elts_same_1, [S8; S16; S32];
+- Vcls, [], All (2, Qreg), "vclsQ", elts_same_1, [S8; S16; S32];
+-
+- (* Count leading zeros. *)
+- Vclz, [], All (2, Dreg), "vclz", sign_invar_1, su_8_32;
+- Vclz, [], All (2, Qreg), "vclzQ", sign_invar_1, su_8_32;
+-
+- (* Count number of set bits. *)
+- Vcnt, [], All (2, Dreg), "vcnt", bits_1, [P8; S8; U8];
+- Vcnt, [], All (2, Qreg), "vcntQ", bits_1, [P8; S8; U8];
+-
+- (* Reciprocal estimate. *)
+- Vrecpe, [], All (2, Dreg), "vrecpe", elts_same_1, [U32; F32];
+- Vrecpe, [], All (2, Qreg), "vrecpeQ", elts_same_1, [U32; F32];
+-
+- (* Reciprocal square-root estimate. *)
+- Vrsqrte, [], All (2, Dreg), "vrsqrte", elts_same_1, [U32; F32];
+- Vrsqrte, [], All (2, Qreg), "vrsqrteQ", elts_same_1, [U32; F32];
+-
+- (* Get lanes from a vector. *)
+- Vget_lane,
+- [InfoWord; Disassembles_as [Use_operands [| Corereg; Element_of_dreg |]];
+- Instruction_name ["vmov"]],
+- Use_operands [| Corereg; Dreg; Immed |],
+- "vget_lane", get_lane, pf_su_8_32;
+- Vget_lane,
+- [No_op;
+- InfoWord;
+- Disassembles_as [Use_operands [| Corereg; Corereg; Dreg |]];
+- Instruction_name ["vmov"]; Const_valuator (fun _ -> 0)],
+- Use_operands [| Corereg; Dreg; Immed |],
+- "vget_lane", notype_2, [S64; U64];
+- Vget_lane,
+- [InfoWord; Disassembles_as [Use_operands [| Corereg; Element_of_dreg |]];
+- Instruction_name ["vmov"]],
+- Use_operands [| Corereg; Qreg; Immed |],
+- "vgetQ_lane", get_lane, pf_su_8_32;
+- Vget_lane,
+- [InfoWord;
+- Disassembles_as [Use_operands [| Corereg; Corereg; Dreg |]];
+- Instruction_name ["vmov"; "fmrrd"]; Const_valuator (fun _ -> 0);
+- Fixed_core_reg],
+- Use_operands [| Corereg; Qreg; Immed |],
+- "vgetQ_lane", notype_2, [S64; U64];
+-
+- (* Set lanes in a vector. *)
+- Vset_lane, [Disassembles_as [Use_operands [| Element_of_dreg; Corereg |]];
+- Instruction_name ["vmov"]],
+- Use_operands [| Dreg; Corereg; Dreg; Immed |], "vset_lane",
+- set_lane, pf_su_8_32;
+- Vset_lane, [No_op;
+- Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]];
+- Instruction_name ["vmov"]; Const_valuator (fun _ -> 0)],
+- Use_operands [| Dreg; Corereg; Dreg; Immed |], "vset_lane",
+- set_lane_notype, [S64; U64];
+- Vset_lane, [Disassembles_as [Use_operands [| Element_of_dreg; Corereg |]];
+- Instruction_name ["vmov"]],
+- Use_operands [| Qreg; Corereg; Qreg; Immed |], "vsetQ_lane",
+- set_lane, pf_su_8_32;
+- Vset_lane, [Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]];
+- Instruction_name ["vmov"]; Const_valuator (fun _ -> 0)],
+- Use_operands [| Qreg; Corereg; Qreg; Immed |], "vsetQ_lane",
+- set_lane_notype, [S64; U64];
+-
+- (* Create vector from literal bit pattern. *)
+- Vcreate,
+- [Requires_feature "CRYPTO"; No_op], (* Not really, but it can yield various things that are too
+- hard for the test generator at this time. *)
+- Use_operands [| Dreg; Corereg |], "vcreate", create_vector,
+- [P64];
+- Vcreate,
+- [No_op], (* Not really, but it can yield various things that are too
+- hard for the test generator at this time. *)
+- Use_operands [| Dreg; Corereg |], "vcreate", create_vector,
+- pf_su_8_64;
+-
+- (* Set all lanes to the same value. *)
+- Vdup_n,
+- [Disassembles_as [Use_operands [| Dreg;
+- Alternatives [ Corereg;
+- Element_of_dreg ] |]]],
+- Use_operands [| Dreg; Corereg |], "vdup_n", bits_1,
+- pf_su_8_32;
+- Vdup_n,
+- [No_op; Requires_feature "CRYPTO";
+- Instruction_name ["vmov"];
+- Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]],
+- Use_operands [| Dreg; Corereg |], "vdup_n", notype_1,
+- [P64];
+- Vdup_n,
+- [No_op;
+- Instruction_name ["vmov"];
+- Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]],
+- Use_operands [| Dreg; Corereg |], "vdup_n", notype_1,
+- [S64; U64];
+- Vdup_n,
+- [No_op; Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| Qreg;
+- Alternatives [ Corereg;
+- Element_of_dreg ] |]]],
+- Use_operands [| Qreg; Corereg |], "vdupQ_n", bits_1,
+- [P64];
+- Vdup_n,
+- [Disassembles_as [Use_operands [| Qreg;
+- Alternatives [ Corereg;
+- Element_of_dreg ] |]]],
+- Use_operands [| Qreg; Corereg |], "vdupQ_n", bits_1,
+- pf_su_8_32;
+- Vdup_n,
+- [No_op;
+- Instruction_name ["vmov"];
+- Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |];
+- Use_operands [| Dreg; Corereg; Corereg |]]],
+- Use_operands [| Qreg; Corereg |], "vdupQ_n", notype_1,
+- [S64; U64];
+-
+- (* These are just aliases for the above. *)
+- Vmov_n,
+- [Builtin_name "vdup_n";
+- Disassembles_as [Use_operands [| Dreg;
+- Alternatives [ Corereg;
+- Element_of_dreg ] |]]],
+- Use_operands [| Dreg; Corereg |],
+- "vmov_n", bits_1, pf_su_8_32;
+- Vmov_n,
+- [No_op;
+- Builtin_name "vdup_n";
+- Instruction_name ["vmov"];
+- Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]],
+- Use_operands [| Dreg; Corereg |],
+- "vmov_n", notype_1, [S64; U64];
+- Vmov_n,
+- [Builtin_name "vdupQ_n";
+- Disassembles_as [Use_operands [| Qreg;
+- Alternatives [ Corereg;
+- Element_of_dreg ] |]]],
+- Use_operands [| Qreg; Corereg |],
+- "vmovQ_n", bits_1, pf_su_8_32;
+- Vmov_n,
+- [No_op;
+- Builtin_name "vdupQ_n";
+- Instruction_name ["vmov"];
+- Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |];
+- Use_operands [| Dreg; Corereg; Corereg |]]],
+- Use_operands [| Qreg; Corereg |],
+- "vmovQ_n", notype_1, [S64; U64];
+-
+- (* Duplicate, lane version. We can't use Use_operands here because the
+- rightmost register (always Dreg) would be picked up by find_key_operand,
+- when we want the leftmost register to be used in this case (otherwise
+- the modes are indistinguishable in neon.md, etc. *)
+- Vdup_lane,
+- [Disassembles_as [Use_operands [| Dreg; Element_of_dreg |]]],
+- Unary_scalar Dreg, "vdup_lane", bits_2, pf_su_8_32;
+- Vdup_lane,
+- [No_op; Requires_feature "CRYPTO"; Const_valuator (fun _ -> 0)],
+- Unary_scalar Dreg, "vdup_lane", bits_2, [P64];
+- Vdup_lane,
+- [No_op; Const_valuator (fun _ -> 0)],
+- Unary_scalar Dreg, "vdup_lane", bits_2, [S64; U64];
+- Vdup_lane,
+- [Disassembles_as [Use_operands [| Qreg; Element_of_dreg |]]],
+- Unary_scalar Qreg, "vdupQ_lane", bits_2, pf_su_8_32;
+- Vdup_lane,
+- [No_op; Requires_feature "CRYPTO"; Const_valuator (fun _ -> 0)],
+- Unary_scalar Qreg, "vdupQ_lane", bits_2, [P64];
+- Vdup_lane,
+- [No_op; Const_valuator (fun _ -> 0)],
+- Unary_scalar Qreg, "vdupQ_lane", bits_2, [S64; U64];
+-
+- (* Combining vectors. *)
+- Vcombine, [Requires_feature "CRYPTO"; No_op],
+- Use_operands [| Qreg; Dreg; Dreg |], "vcombine", notype_2,
+- [P64];
+- Vcombine, [No_op],
+- Use_operands [| Qreg; Dreg; Dreg |], "vcombine", notype_2,
+- pf_su_8_64;
+-
+- (* Splitting vectors. *)
+- Vget_high, [Requires_feature "CRYPTO"; No_op],
+- Use_operands [| Dreg; Qreg |], "vget_high",
+- notype_1, [P64];
+- Vget_high, [No_op],
+- Use_operands [| Dreg; Qreg |], "vget_high",
+- notype_1, pf_su_8_64;
+- Vget_low, [Instruction_name ["vmov"];
+- Disassembles_as [Use_operands [| Dreg; Dreg |]];
+- Fixed_vector_reg],
+- Use_operands [| Dreg; Qreg |], "vget_low",
+- notype_1, pf_su_8_32;
+- Vget_low, [Requires_feature "CRYPTO"; No_op],
+- Use_operands [| Dreg; Qreg |], "vget_low",
+- notype_1, [P64];
+- Vget_low, [No_op],
+- Use_operands [| Dreg; Qreg |], "vget_low",
+- notype_1, [S64; U64];
+-
+- (* Conversions. *)
+- Vcvt, [InfoWord], All (2, Dreg), "vcvt", conv_1,
+- [Conv (S32, F32); Conv (U32, F32); Conv (F32, S32); Conv (F32, U32)];
+- Vcvt, [InfoWord], All (2, Qreg), "vcvtQ", conv_1,
+- [Conv (S32, F32); Conv (U32, F32); Conv (F32, S32); Conv (F32, U32)];
+- Vcvt, [Builtin_name "vcvt" ; Requires_FP_bit 1],
+- Use_operands [| Dreg; Qreg; |], "vcvt", conv_1, [Conv (F16, F32)];
+- Vcvt, [Builtin_name "vcvt" ; Requires_FP_bit 1],
+- Use_operands [| Qreg; Dreg; |], "vcvt", conv_1, [Conv (F32, F16)];
+- Vcvt_n, [InfoWord], Use_operands [| Dreg; Dreg; Immed |], "vcvt_n", conv_2,
+- [Conv (S32, F32); Conv (U32, F32); Conv (F32, S32); Conv (F32, U32)];
+- Vcvt_n, [InfoWord], Use_operands [| Qreg; Qreg; Immed |], "vcvtQ_n", conv_2,
+- [Conv (S32, F32); Conv (U32, F32); Conv (F32, S32); Conv (F32, U32)];
+-
+- (* Move, narrowing. *)
+- Vmovn, [Disassembles_as [Use_operands [| Dreg; Qreg |]]],
+- Narrow, "vmovn", sign_invar_1, su_16_64;
+- Vmovn, [Disassembles_as [Use_operands [| Dreg; Qreg |]]; Saturating],
+- Narrow, "vqmovn", elts_same_1, su_16_64;
+- Vmovn,
+- [Disassembles_as [Use_operands [| Dreg; Qreg |]]; Saturating; Dst_unsign],
+- Narrow, "vqmovun", dst_unsign_1,
+- [S16; S32; S64];
+-
+- (* Move, long. *)
+- Vmovl, [Disassembles_as [Use_operands [| Qreg; Dreg |]]],
+- Long, "vmovl", elts_same_1, su_8_32;
+-
+- (* Table lookup. *)
+- Vtbl 1,
+- [Instruction_name ["vtbl"];
+- Disassembles_as [Use_operands [| Dreg; VecArray (1, Dreg); Dreg |]]],
+- Use_operands [| Dreg; Dreg; Dreg |], "vtbl1", table_2, [U8; S8; P8];
+- Vtbl 2, [Instruction_name ["vtbl"]],
+- Use_operands [| Dreg; VecArray (2, Dreg); Dreg |], "vtbl2", table_2,
+- [U8; S8; P8];
+- Vtbl 3, [Instruction_name ["vtbl"]],
+- Use_operands [| Dreg; VecArray (3, Dreg); Dreg |], "vtbl3", table_2,
+- [U8; S8; P8];
+- Vtbl 4, [Instruction_name ["vtbl"]],
+- Use_operands [| Dreg; VecArray (4, Dreg); Dreg |], "vtbl4", table_2,
+- [U8; S8; P8];
+-
+- (* Extended table lookup. *)
+- Vtbx 1,
+- [Instruction_name ["vtbx"];
+- Disassembles_as [Use_operands [| Dreg; VecArray (1, Dreg); Dreg |]]],
+- Use_operands [| Dreg; Dreg; Dreg |], "vtbx1", table_io, [U8; S8; P8];
+- Vtbx 2, [Instruction_name ["vtbx"]],
+- Use_operands [| Dreg; VecArray (2, Dreg); Dreg |], "vtbx2", table_io,
+- [U8; S8; P8];
+- Vtbx 3, [Instruction_name ["vtbx"]],
+- Use_operands [| Dreg; VecArray (3, Dreg); Dreg |], "vtbx3", table_io,
+- [U8; S8; P8];
+- Vtbx 4, [Instruction_name ["vtbx"]],
+- Use_operands [| Dreg; VecArray (4, Dreg); Dreg |], "vtbx4", table_io,
+- [U8; S8; P8];
+-
+- (* Multiply, lane. (note: these were undocumented at the time of
+- writing). *)
+- Vmul_lane, [], By_scalar Dreg, "vmul_lane", sign_invar_2_lane,
+- [S16; S32; U16; U32; F32];
+- Vmul_lane, [], By_scalar Qreg, "vmulQ_lane", sign_invar_2_lane,
+- [S16; S32; U16; U32; F32];
+-
+- (* Multiply-accumulate, lane. *)
+- Vmla_lane, [], By_scalar Dreg, "vmla_lane", sign_invar_io_lane,
+- [S16; S32; U16; U32; F32];
+- Vmla_lane, [], By_scalar Qreg, "vmlaQ_lane", sign_invar_io_lane,
+- [S16; S32; U16; U32; F32];
+- Vmla_lane, [], Wide_lane, "vmlal_lane", elts_same_io_lane,
+- [S16; S32; U16; U32];
+- Vmla_lane, [Saturating; Doubling], Wide_lane, "vqdmlal_lane",
+- elts_same_io_lane, [S16; S32];
+-
+- (* Multiply-subtract, lane. *)
+- Vmls_lane, [], By_scalar Dreg, "vmls_lane", sign_invar_io_lane,
+- [S16; S32; U16; U32; F32];
+- Vmls_lane, [], By_scalar Qreg, "vmlsQ_lane", sign_invar_io_lane,
+- [S16; S32; U16; U32; F32];
+- Vmls_lane, [], Wide_lane, "vmlsl_lane", elts_same_io_lane,
+- [S16; S32; U16; U32];
+- Vmls_lane, [Saturating; Doubling], Wide_lane, "vqdmlsl_lane",
+- elts_same_io_lane, [S16; S32];
+-
+- (* Long multiply, lane. *)
+- Vmull_lane, [],
+- Wide_lane, "vmull_lane", elts_same_2_lane, [S16; S32; U16; U32];
+-
+- (* Saturating doubling long multiply, lane. *)
+- Vqdmull_lane, [Saturating; Doubling],
+- Wide_lane, "vqdmull_lane", elts_same_2_lane, [S16; S32];
+-
+- (* Saturating doubling long multiply high, lane. *)
+- Vqdmulh_lane, [Saturating; Halving],
+- By_scalar Qreg, "vqdmulhQ_lane", elts_same_2_lane, [S16; S32];
+- Vqdmulh_lane, [Saturating; Halving],
+- By_scalar Dreg, "vqdmulh_lane", elts_same_2_lane, [S16; S32];
+- Vqdmulh_lane, [Saturating; Halving; Rounding;
+- Instruction_name ["vqrdmulh"]],
+- By_scalar Qreg, "vqRdmulhQ_lane", elts_same_2_lane, [S16; S32];
+- Vqdmulh_lane, [Saturating; Halving; Rounding;
+- Instruction_name ["vqrdmulh"]],
+- By_scalar Dreg, "vqRdmulh_lane", elts_same_2_lane, [S16; S32];
+-
+- (* Vector multiply by scalar. *)
+- Vmul_n, [InfoWord;
+- Disassembles_as [Use_operands [| Dreg; Dreg; Element_of_dreg |]]],
+- Use_operands [| Dreg; Dreg; Corereg |], "vmul_n",
+- sign_invar_2, [S16; S32; U16; U32; F32];
+- Vmul_n, [InfoWord;
+- Disassembles_as [Use_operands [| Qreg; Qreg; Element_of_dreg |]]],
+- Use_operands [| Qreg; Qreg; Corereg |], "vmulQ_n",
+- sign_invar_2, [S16; S32; U16; U32; F32];
+-
+- (* Vector long multiply by scalar. *)
+- Vmull_n, [Instruction_name ["vmull"];
+- Disassembles_as [Use_operands [| Qreg; Dreg; Element_of_dreg |]]],
+- Wide_scalar, "vmull_n",
+- elts_same_2, [S16; S32; U16; U32];
+-
+- (* Vector saturating doubling long multiply by scalar. *)
+- Vqdmull_n, [Saturating; Doubling;
+- Disassembles_as [Use_operands [| Qreg; Dreg;
+- Element_of_dreg |]]],
+- Wide_scalar, "vqdmull_n",
+- elts_same_2, [S16; S32];
+-
+- (* Vector saturating doubling long multiply high by scalar. *)
+- Vqdmulh_n,
+- [Saturating; Halving; InfoWord;
+- Disassembles_as [Use_operands [| Qreg; Qreg; Element_of_dreg |]]],
+- Use_operands [| Qreg; Qreg; Corereg |],
+- "vqdmulhQ_n", elts_same_2, [S16; S32];
+- Vqdmulh_n,
+- [Saturating; Halving; InfoWord;
+- Disassembles_as [Use_operands [| Dreg; Dreg; Element_of_dreg |]]],
+- Use_operands [| Dreg; Dreg; Corereg |],
+- "vqdmulh_n", elts_same_2, [S16; S32];
+- Vqdmulh_n,
+- [Saturating; Halving; Rounding; InfoWord;
+- Instruction_name ["vqrdmulh"];
+- Disassembles_as [Use_operands [| Qreg; Qreg; Element_of_dreg |]]],
+- Use_operands [| Qreg; Qreg; Corereg |],
+- "vqRdmulhQ_n", elts_same_2, [S16; S32];
+- Vqdmulh_n,
+- [Saturating; Halving; Rounding; InfoWord;
+- Instruction_name ["vqrdmulh"];
+- Disassembles_as [Use_operands [| Dreg; Dreg; Element_of_dreg |]]],
+- Use_operands [| Dreg; Dreg; Corereg |],
+- "vqRdmulh_n", elts_same_2, [S16; S32];
+-
+- (* Vector multiply-accumulate by scalar. *)
+- Vmla_n, [InfoWord;
+- Disassembles_as [Use_operands [| Dreg; Dreg; Element_of_dreg |]]],
+- Use_operands [| Dreg; Dreg; Corereg |], "vmla_n",
+- sign_invar_io, [S16; S32; U16; U32; F32];
+- Vmla_n, [InfoWord;
+- Disassembles_as [Use_operands [| Qreg; Qreg; Element_of_dreg |]]],
+- Use_operands [| Qreg; Qreg; Corereg |], "vmlaQ_n",
+- sign_invar_io, [S16; S32; U16; U32; F32];
+- Vmla_n, [], Wide_scalar, "vmlal_n", elts_same_io, [S16; S32; U16; U32];
+- Vmla_n, [Saturating; Doubling], Wide_scalar, "vqdmlal_n", elts_same_io,
+- [S16; S32];
+-
+- (* Vector multiply subtract by scalar. *)
+- Vmls_n, [InfoWord;
+- Disassembles_as [Use_operands [| Dreg; Dreg; Element_of_dreg |]]],
+- Use_operands [| Dreg; Dreg; Corereg |], "vmls_n",
+- sign_invar_io, [S16; S32; U16; U32; F32];
+- Vmls_n, [InfoWord;
+- Disassembles_as [Use_operands [| Qreg; Qreg; Element_of_dreg |]]],
+- Use_operands [| Qreg; Qreg; Corereg |], "vmlsQ_n",
+- sign_invar_io, [S16; S32; U16; U32; F32];
+- Vmls_n, [], Wide_scalar, "vmlsl_n", elts_same_io, [S16; S32; U16; U32];
+- Vmls_n, [Saturating; Doubling], Wide_scalar, "vqdmlsl_n", elts_same_io,
+- [S16; S32];
+-
+- (* Vector extract. *)
+- Vext, [Requires_feature "CRYPTO"; Const_valuator (fun _ -> 0)],
+- Use_operands [| Dreg; Dreg; Dreg; Immed |], "vext", extend,
+- [P64];
+- Vext, [Const_valuator (fun _ -> 0)],
+- Use_operands [| Dreg; Dreg; Dreg; Immed |], "vext", extend,
+- pf_su_8_64;
+- Vext, [Requires_feature "CRYPTO"; Const_valuator (fun _ -> 0)],
+- Use_operands [| Qreg; Qreg; Qreg; Immed |], "vextQ", extend,
+- [P64];
+- Vext, [Const_valuator (fun _ -> 0)],
+- Use_operands [| Qreg; Qreg; Qreg; Immed |], "vextQ", extend,
+- pf_su_8_64;
+-
+- (* Reverse elements. *)
+- Vrev64, [Use_shuffle (rev_elems 64)], All (2, Dreg), "vrev64", bits_1,
+- P8 :: P16 :: F32 :: su_8_32;
+- Vrev64, [Use_shuffle (rev_elems 64)], All (2, Qreg), "vrev64Q", bits_1,
+- P8 :: P16 :: F32 :: su_8_32;
+- Vrev32, [Use_shuffle (rev_elems 32)], All (2, Dreg), "vrev32", bits_1,
+- [P8; P16; S8; U8; S16; U16];
+- Vrev32, [Use_shuffle (rev_elems 32)], All (2, Qreg), "vrev32Q", bits_1,
+- [P8; P16; S8; U8; S16; U16];
+- Vrev16, [Use_shuffle (rev_elems 16)], All (2, Dreg), "vrev16", bits_1,
+- [P8; S8; U8];
+- Vrev16, [Use_shuffle (rev_elems 16)], All (2, Qreg), "vrev16Q", bits_1,
+- [P8; S8; U8];
+-
+- (* Bit selection. *)
+- Vbsl,
+- [Requires_feature "CRYPTO"; Instruction_name ["vbsl"; "vbit"; "vbif"];
+- Disassembles_as [Use_operands [| Dreg; Dreg; Dreg |]]],
+- Use_operands [| Dreg; Dreg; Dreg; Dreg |], "vbsl", bit_select,
+- [P64];
+- Vbsl,
+- [Instruction_name ["vbsl"; "vbit"; "vbif"];
+- Disassembles_as [Use_operands [| Dreg; Dreg; Dreg |]]],
+- Use_operands [| Dreg; Dreg; Dreg; Dreg |], "vbsl", bit_select,
+- pf_su_8_64;
+- Vbsl,
+- [Requires_feature "CRYPTO"; Instruction_name ["vbsl"; "vbit"; "vbif"];
+- Disassembles_as [Use_operands [| Qreg; Qreg; Qreg |]]],
+- Use_operands [| Qreg; Qreg; Qreg; Qreg |], "vbslQ", bit_select,
+- [P64];
+- Vbsl,
+- [Instruction_name ["vbsl"; "vbit"; "vbif"];
+- Disassembles_as [Use_operands [| Qreg; Qreg; Qreg |]]],
+- Use_operands [| Qreg; Qreg; Qreg; Qreg |], "vbslQ", bit_select,
+- pf_su_8_64;
+-
+- Vtrn, [Use_shuffle trn_elems], Pair_result Dreg, "vtrn", bits_2, pf_su_8_16;
+- Vtrn, [Use_shuffle trn_elems; Instruction_name ["vuzp"]], Pair_result Dreg, "vtrn", bits_2, suf_32;
+- Vtrn, [Use_shuffle trn_elems], Pair_result Qreg, "vtrnQ", bits_2, pf_su_8_32;
+- (* Zip elements. *)
+- Vzip, [Use_shuffle zip_elems], Pair_result Dreg, "vzip", bits_2, pf_su_8_16;
+- Vzip, [Use_shuffle zip_elems; Instruction_name ["vuzp"]], Pair_result Dreg, "vzip", bits_2, suf_32;
+- Vzip, [Use_shuffle zip_elems], Pair_result Qreg, "vzipQ", bits_2, pf_su_8_32;
+-
+- (* Unzip elements. *)
+- Vuzp, [Use_shuffle uzip_elems], Pair_result Dreg, "vuzp", bits_2,
+- pf_su_8_32;
+- Vuzp, [Use_shuffle uzip_elems], Pair_result Qreg, "vuzpQ", bits_2,
+- pf_su_8_32;
+-
+- (* Element/structure loads. VLD1 variants. *)
+- Vldx 1,
+- [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Dreg; CstPtrTo Corereg |], "vld1", bits_1,
+- [P64];
+- Vldx 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Dreg; CstPtrTo Corereg |], "vld1", bits_1,
+- pf_su_8_64;
+- Vldx 1, [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (2, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Qreg; CstPtrTo Corereg |], "vld1Q", bits_1,
+- [P64];
+- Vldx 1, [Disassembles_as [Use_operands [| VecArray (2, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Qreg; CstPtrTo Corereg |], "vld1Q", bits_1,
+- pf_su_8_64;
+-
+- Vldx_lane 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Dreg; CstPtrTo Corereg; Dreg; Immed |],
+- "vld1_lane", bits_3, pf_su_8_32;
+- Vldx_lane 1,
+- [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]];
+- Const_valuator (fun _ -> 0)],
+- Use_operands [| Dreg; CstPtrTo Corereg; Dreg; Immed |],
+- "vld1_lane", bits_3, [P64];
+- Vldx_lane 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]];
+- Const_valuator (fun _ -> 0)],
+- Use_operands [| Dreg; CstPtrTo Corereg; Dreg; Immed |],
+- "vld1_lane", bits_3, [S64; U64];
+- Vldx_lane 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Qreg; CstPtrTo Corereg; Qreg; Immed |],
+- "vld1Q_lane", bits_3, pf_su_8_32;
+- Vldx_lane 1,
+- [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Qreg; CstPtrTo Corereg; Qreg; Immed |],
+- "vld1Q_lane", bits_3, [P64];
+- Vldx_lane 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Qreg; CstPtrTo Corereg; Qreg; Immed |],
+- "vld1Q_lane", bits_3, [S64; U64];
+-
+- Vldx_dup 1,
+- [Disassembles_as [Use_operands [| VecArray (1, All_elements_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Dreg; CstPtrTo Corereg |], "vld1_dup",
+- bits_1, pf_su_8_32;
+- Vldx_dup 1,
+- [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Dreg; CstPtrTo Corereg |], "vld1_dup",
+- bits_1, [P64];
+- Vldx_dup 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Dreg; CstPtrTo Corereg |], "vld1_dup",
+- bits_1, [S64; U64];
+- Vldx_dup 1,
+- [Disassembles_as [Use_operands [| VecArray (2, All_elements_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Qreg; CstPtrTo Corereg |], "vld1Q_dup",
+- bits_1, pf_su_8_32;
+- (* Treated identically to vld1_dup above as we now
+- do a single load followed by a duplicate. *)
+- Vldx_dup 1,
+- [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Qreg; CstPtrTo Corereg |], "vld1Q_dup",
+- bits_1, [P64];
+- Vldx_dup 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| Qreg; CstPtrTo Corereg |], "vld1Q_dup",
+- bits_1, [S64; U64];
+-
+- (* VST1 variants. *)
+- Vstx 1, [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; Dreg |], "vst1",
+- store_1, [P64];
+- Vstx 1, [Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; Dreg |], "vst1",
+- store_1, pf_su_8_64;
+- Vstx 1, [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (2, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; Qreg |], "vst1Q",
+- store_1, [P64];
+- Vstx 1, [Disassembles_as [Use_operands [| VecArray (2, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; Qreg |], "vst1Q",
+- store_1, pf_su_8_64;
+-
+- Vstx_lane 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; Dreg; Immed |],
+- "vst1_lane", store_3, pf_su_8_32;
+- Vstx_lane 1,
+- [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]];
+- Const_valuator (fun _ -> 0)],
+- Use_operands [| PtrTo Corereg; Dreg; Immed |],
+- "vst1_lane", store_3, [P64];
+- Vstx_lane 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]];
+- Const_valuator (fun _ -> 0)],
+- Use_operands [| PtrTo Corereg; Dreg; Immed |],
+- "vst1_lane", store_3, [U64; S64];
+- Vstx_lane 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; Qreg; Immed |],
+- "vst1Q_lane", store_3, pf_su_8_32;
+- Vstx_lane 1,
+- [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; Qreg; Immed |],
+- "vst1Q_lane", store_3, [P64];
+- Vstx_lane 1,
+- [Disassembles_as [Use_operands [| VecArray (1, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; Qreg; Immed |],
+- "vst1Q_lane", store_3, [U64; S64];
+-
+- (* VLD2 variants. *)
+- Vldx 2, [], Use_operands [| VecArray (2, Dreg); CstPtrTo Corereg |],
+- "vld2", bits_1, pf_su_8_32;
+- Vldx 2, [Requires_feature "CRYPTO"; Instruction_name ["vld1"]],
+- Use_operands [| VecArray (2, Dreg); CstPtrTo Corereg |],
+- "vld2", bits_1, [P64];
+- Vldx 2, [Instruction_name ["vld1"]],
+- Use_operands [| VecArray (2, Dreg); CstPtrTo Corereg |],
+- "vld2", bits_1, [S64; U64];
+- Vldx 2, [Disassembles_as [Use_operands [| VecArray (2, Dreg);
+- CstPtrTo Corereg |];
+- Use_operands [| VecArray (2, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (2, Qreg); CstPtrTo Corereg |],
+- "vld2Q", bits_1, pf_su_8_32;
+-
+- Vldx_lane 2,
+- [Disassembles_as [Use_operands
+- [| VecArray (2, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (2, Dreg); CstPtrTo Corereg;
+- VecArray (2, Dreg); Immed |],
+- "vld2_lane", bits_3, P8 :: P16 :: F32 :: su_8_32;
+- Vldx_lane 2,
+- [Disassembles_as [Use_operands
+- [| VecArray (2, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (2, Qreg); CstPtrTo Corereg;
+- VecArray (2, Qreg); Immed |],
+- "vld2Q_lane", bits_3, [P16; F32; U16; U32; S16; S32];
+-
+- Vldx_dup 2,
+- [Disassembles_as [Use_operands
+- [| VecArray (2, All_elements_of_dreg); CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (2, Dreg); CstPtrTo Corereg |],
+- "vld2_dup", bits_1, pf_su_8_32;
+- Vldx_dup 2,
+- [Requires_feature "CRYPTO";
+- Instruction_name ["vld1"]; Disassembles_as [Use_operands
+- [| VecArray (2, Dreg); CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (2, Dreg); CstPtrTo Corereg |],
+- "vld2_dup", bits_1, [P64];
+- Vldx_dup 2,
+- [Instruction_name ["vld1"]; Disassembles_as [Use_operands
+- [| VecArray (2, Dreg); CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (2, Dreg); CstPtrTo Corereg |],
+- "vld2_dup", bits_1, [S64; U64];
+-
+- (* VST2 variants. *)
+- Vstx 2, [Disassembles_as [Use_operands [| VecArray (2, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (2, Dreg) |], "vst2",
+- store_1, pf_su_8_32;
+- Vstx 2, [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (2, Dreg);
+- PtrTo Corereg |]];
+- Instruction_name ["vst1"]],
+- Use_operands [| PtrTo Corereg; VecArray (2, Dreg) |], "vst2",
+- store_1, [P64];
+- Vstx 2, [Disassembles_as [Use_operands [| VecArray (2, Dreg);
+- PtrTo Corereg |]];
+- Instruction_name ["vst1"]],
+- Use_operands [| PtrTo Corereg; VecArray (2, Dreg) |], "vst2",
+- store_1, [S64; U64];
+- Vstx 2, [Disassembles_as [Use_operands [| VecArray (2, Dreg);
+- PtrTo Corereg |];
+- Use_operands [| VecArray (2, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (2, Qreg) |], "vst2Q",
+- store_1, pf_su_8_32;
+-
+- Vstx_lane 2,
+- [Disassembles_as [Use_operands
+- [| VecArray (2, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (2, Dreg); Immed |], "vst2_lane",
+- store_3, P8 :: P16 :: F32 :: su_8_32;
+- Vstx_lane 2,
+- [Disassembles_as [Use_operands
+- [| VecArray (2, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (2, Qreg); Immed |], "vst2Q_lane",
+- store_3, [P16; F32; U16; U32; S16; S32];
+-
+- (* VLD3 variants. *)
+- Vldx 3, [], Use_operands [| VecArray (3, Dreg); CstPtrTo Corereg |],
+- "vld3", bits_1, pf_su_8_32;
+- Vldx 3, [Requires_feature "CRYPTO"; Instruction_name ["vld1"]],
+- Use_operands [| VecArray (3, Dreg); CstPtrTo Corereg |],
+- "vld3", bits_1, [P64];
+- Vldx 3, [Instruction_name ["vld1"]],
+- Use_operands [| VecArray (3, Dreg); CstPtrTo Corereg |],
+- "vld3", bits_1, [S64; U64];
+- Vldx 3, [Disassembles_as [Use_operands [| VecArray (3, Dreg);
+- CstPtrTo Corereg |];
+- Use_operands [| VecArray (3, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (3, Qreg); CstPtrTo Corereg |],
+- "vld3Q", bits_1, P8 :: P16 :: F32 :: su_8_32;
+-
+- Vldx_lane 3,
+- [Disassembles_as [Use_operands
+- [| VecArray (3, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (3, Dreg); CstPtrTo Corereg;
+- VecArray (3, Dreg); Immed |],
+- "vld3_lane", bits_3, P8 :: P16 :: F32 :: su_8_32;
+- Vldx_lane 3,
+- [Disassembles_as [Use_operands
+- [| VecArray (3, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (3, Qreg); CstPtrTo Corereg;
+- VecArray (3, Qreg); Immed |],
+- "vld3Q_lane", bits_3, [P16; F32; U16; U32; S16; S32];
+-
+- Vldx_dup 3,
+- [Disassembles_as [Use_operands
+- [| VecArray (3, All_elements_of_dreg); CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (3, Dreg); CstPtrTo Corereg |],
+- "vld3_dup", bits_1, pf_su_8_32;
+- Vldx_dup 3,
+- [Requires_feature "CRYPTO";
+- Instruction_name ["vld1"]; Disassembles_as [Use_operands
+- [| VecArray (3, Dreg); CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (3, Dreg); CstPtrTo Corereg |],
+- "vld3_dup", bits_1, [P64];
+- Vldx_dup 3,
+- [Instruction_name ["vld1"]; Disassembles_as [Use_operands
+- [| VecArray (3, Dreg); CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (3, Dreg); CstPtrTo Corereg |],
+- "vld3_dup", bits_1, [S64; U64];
+-
+- (* VST3 variants. *)
+- Vstx 3, [Disassembles_as [Use_operands [| VecArray (4, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (3, Dreg) |], "vst3",
+- store_1, pf_su_8_32;
+- Vstx 3, [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (4, Dreg);
+- PtrTo Corereg |]];
+- Instruction_name ["vst1"]],
+- Use_operands [| PtrTo Corereg; VecArray (3, Dreg) |], "vst3",
+- store_1, [P64];
+- Vstx 3, [Disassembles_as [Use_operands [| VecArray (4, Dreg);
+- PtrTo Corereg |]];
+- Instruction_name ["vst1"]],
+- Use_operands [| PtrTo Corereg; VecArray (3, Dreg) |], "vst3",
+- store_1, [S64; U64];
+- Vstx 3, [Disassembles_as [Use_operands [| VecArray (3, Dreg);
+- PtrTo Corereg |];
+- Use_operands [| VecArray (3, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (3, Qreg) |], "vst3Q",
+- store_1, pf_su_8_32;
+-
+- Vstx_lane 3,
+- [Disassembles_as [Use_operands
+- [| VecArray (3, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (3, Dreg); Immed |], "vst3_lane",
+- store_3, P8 :: P16 :: F32 :: su_8_32;
+- Vstx_lane 3,
+- [Disassembles_as [Use_operands
+- [| VecArray (3, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (3, Qreg); Immed |], "vst3Q_lane",
+- store_3, [P16; F32; U16; U32; S16; S32];
+-
+- (* VLD4/VST4 variants. *)
+- Vldx 4, [], Use_operands [| VecArray (4, Dreg); CstPtrTo Corereg |],
+- "vld4", bits_1, pf_su_8_32;
+- Vldx 4, [Requires_feature "CRYPTO"; Instruction_name ["vld1"]],
+- Use_operands [| VecArray (4, Dreg); CstPtrTo Corereg |],
+- "vld4", bits_1, [P64];
+- Vldx 4, [Instruction_name ["vld1"]],
+- Use_operands [| VecArray (4, Dreg); CstPtrTo Corereg |],
+- "vld4", bits_1, [S64; U64];
+- Vldx 4, [Disassembles_as [Use_operands [| VecArray (4, Dreg);
+- CstPtrTo Corereg |];
+- Use_operands [| VecArray (4, Dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (4, Qreg); CstPtrTo Corereg |],
+- "vld4Q", bits_1, P8 :: P16 :: F32 :: su_8_32;
+-
+- Vldx_lane 4,
+- [Disassembles_as [Use_operands
+- [| VecArray (4, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (4, Dreg); CstPtrTo Corereg;
+- VecArray (4, Dreg); Immed |],
+- "vld4_lane", bits_3, P8 :: P16 :: F32 :: su_8_32;
+- Vldx_lane 4,
+- [Disassembles_as [Use_operands
+- [| VecArray (4, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (4, Qreg); CstPtrTo Corereg;
+- VecArray (4, Qreg); Immed |],
+- "vld4Q_lane", bits_3, [P16; F32; U16; U32; S16; S32];
+-
+- Vldx_dup 4,
+- [Disassembles_as [Use_operands
+- [| VecArray (4, All_elements_of_dreg); CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (4, Dreg); CstPtrTo Corereg |],
+- "vld4_dup", bits_1, pf_su_8_32;
+- Vldx_dup 4,
+- [Requires_feature "CRYPTO";
+- Instruction_name ["vld1"]; Disassembles_as [Use_operands
+- [| VecArray (4, Dreg); CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (4, Dreg); CstPtrTo Corereg |],
+- "vld4_dup", bits_1, [P64];
+- Vldx_dup 4,
+- [Instruction_name ["vld1"]; Disassembles_as [Use_operands
+- [| VecArray (4, Dreg); CstPtrTo Corereg |]]],
+- Use_operands [| VecArray (4, Dreg); CstPtrTo Corereg |],
+- "vld4_dup", bits_1, [S64; U64];
+-
+- Vstx 4, [Disassembles_as [Use_operands [| VecArray (4, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (4, Dreg) |], "vst4",
+- store_1, pf_su_8_32;
+- Vstx 4, [Requires_feature "CRYPTO";
+- Disassembles_as [Use_operands [| VecArray (4, Dreg);
+- PtrTo Corereg |]];
+- Instruction_name ["vst1"]],
+- Use_operands [| PtrTo Corereg; VecArray (4, Dreg) |], "vst4",
+- store_1, [P64];
+- Vstx 4, [Disassembles_as [Use_operands [| VecArray (4, Dreg);
+- PtrTo Corereg |]];
+- Instruction_name ["vst1"]],
+- Use_operands [| PtrTo Corereg; VecArray (4, Dreg) |], "vst4",
+- store_1, [S64; U64];
+- Vstx 4, [Disassembles_as [Use_operands [| VecArray (4, Dreg);
+- PtrTo Corereg |];
+- Use_operands [| VecArray (4, Dreg);
+- PtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (4, Qreg) |], "vst4Q",
+- store_1, pf_su_8_32;
+-
+- Vstx_lane 4,
+- [Disassembles_as [Use_operands
+- [| VecArray (4, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (4, Dreg); Immed |], "vst4_lane",
+- store_3, P8 :: P16 :: F32 :: su_8_32;
+- Vstx_lane 4,
+- [Disassembles_as [Use_operands
+- [| VecArray (4, Element_of_dreg);
+- CstPtrTo Corereg |]]],
+- Use_operands [| PtrTo Corereg; VecArray (4, Qreg); Immed |], "vst4Q_lane",
+- store_3, [P16; F32; U16; U32; S16; S32];
+-
+- (* Logical operations. And. *)
+- Vand, [], All (3, Dreg), "vand", notype_2, su_8_32;
+- Vand, [No_op], All (3, Dreg), "vand", notype_2, [S64; U64];
+- Vand, [], All (3, Qreg), "vandQ", notype_2, su_8_64;
+-
+- (* Or. *)
+- Vorr, [], All (3, Dreg), "vorr", notype_2, su_8_32;
+- Vorr, [No_op], All (3, Dreg), "vorr", notype_2, [S64; U64];
+- Vorr, [], All (3, Qreg), "vorrQ", notype_2, su_8_64;
+-
+- (* Eor. *)
+- Veor, [], All (3, Dreg), "veor", notype_2, su_8_32;
+- Veor, [No_op], All (3, Dreg), "veor", notype_2, [S64; U64];
+- Veor, [], All (3, Qreg), "veorQ", notype_2, su_8_64;
+-
+- (* Bic (And-not). *)
+- Vbic, [Compiler_optim "-O2"], All (3, Dreg), "vbic", notype_2, su_8_32;
+- Vbic, [No_op; Compiler_optim "-O2"], All (3, Dreg), "vbic", notype_2, [S64; U64];
+- Vbic, [Compiler_optim "-O2"], All (3, Qreg), "vbicQ", notype_2, su_8_64;
+-
+- (* Or-not. *)
+- Vorn, [Compiler_optim "-O2"], All (3, Dreg), "vorn", notype_2, su_8_32;
+- Vorn, [No_op; Compiler_optim "-O2"], All (3, Dreg), "vorn", notype_2, [S64; U64];
+- Vorn, [Compiler_optim "-O2"], All (3, Qreg), "vornQ", notype_2, su_8_64;
+- ]
+-
+-let type_in_crypto_only t
+- = (t == P64) || (t == P128)
+-
+-let cross_product s1 s2
+- = List.filter (fun (e, e') -> e <> e')
+- (List.concat (List.map (fun e1 -> List.map (fun e2 -> (e1,e2)) s1) s2))
+-
+-let reinterp =
+- let elems = P8 :: P16 :: F32 :: P64 :: su_8_64 in
+- let casts = cross_product elems elems in
+- List.map
+- (fun (convto, convfrom) ->
+- Vreinterp, (if (type_in_crypto_only convto) || (type_in_crypto_only convfrom)
+- then [Requires_feature "CRYPTO"] else []) @ [No_op], Use_operands [| Dreg; Dreg |],
+- "vreinterpret", conv_1, [Cast (convto, convfrom)])
+- casts
+-
+-let reinterpq =
+- let elems = P8 :: P16 :: F32 :: P64 :: P128 :: su_8_64 in
+- let casts = cross_product elems elems in
+- List.map
+- (fun (convto, convfrom) ->
+- Vreinterp, (if (type_in_crypto_only convto) || (type_in_crypto_only convfrom)
+- then [Requires_feature "CRYPTO"] else []) @ [No_op], Use_operands [| Qreg; Qreg |],
+- "vreinterpretQ", conv_1, [Cast (convto, convfrom)])
+- casts
+-
+-(* Output routines. *)
+-
+-let rec string_of_elt = function
+- S8 -> "s8" | S16 -> "s16" | S32 -> "s32" | S64 -> "s64"
+- | U8 -> "u8" | U16 -> "u16" | U32 -> "u32" | U64 -> "u64"
+- | I8 -> "i8" | I16 -> "i16" | I32 -> "i32" | I64 -> "i64"
+- | B8 -> "8" | B16 -> "16" | B32 -> "32" | B64 -> "64"
+- | F16 -> "f16" | F32 -> "f32" | P8 -> "p8" | P16 -> "p16"
+- | P64 -> "p64" | P128 -> "p128"
+- | Conv (a, b) | Cast (a, b) -> string_of_elt a ^ "_" ^ string_of_elt b
+- | NoElts -> failwith "No elts"
+-
+-let string_of_elt_dots elt =
+- match elt with
+- Conv (a, b) | Cast (a, b) -> string_of_elt a ^ "." ^ string_of_elt b
+- | _ -> string_of_elt elt
+-
+-let string_of_vectype vt =
+- let rec name affix = function
+- T_int8x8 -> affix "int8x8"
+- | T_int8x16 -> affix "int8x16"
+- | T_int16x4 -> affix "int16x4"
+- | T_int16x8 -> affix "int16x8"
+- | T_int32x2 -> affix "int32x2"
+- | T_int32x4 -> affix "int32x4"
+- | T_int64x1 -> affix "int64x1"
+- | T_int64x2 -> affix "int64x2"
+- | T_uint8x8 -> affix "uint8x8"
+- | T_uint8x16 -> affix "uint8x16"
+- | T_uint16x4 -> affix "uint16x4"
+- | T_uint16x8 -> affix "uint16x8"
+- | T_uint32x2 -> affix "uint32x2"
+- | T_uint32x4 -> affix "uint32x4"
+- | T_uint64x1 -> affix "uint64x1"
+- | T_uint64x2 -> affix "uint64x2"
+- | T_float16x4 -> affix "float16x4"
+- | T_float32x2 -> affix "float32x2"
+- | T_float32x4 -> affix "float32x4"
+- | T_poly8x8 -> affix "poly8x8"
+- | T_poly8x16 -> affix "poly8x16"
+- | T_poly16x4 -> affix "poly16x4"
+- | T_poly16x8 -> affix "poly16x8"
+- | T_int8 -> affix "int8"
+- | T_int16 -> affix "int16"
+- | T_int32 -> affix "int32"
+- | T_int64 -> affix "int64"
+- | T_uint8 -> affix "uint8"
+- | T_uint16 -> affix "uint16"
+- | T_uint32 -> affix "uint32"
+- | T_uint64 -> affix "uint64"
+- | T_poly8 -> affix "poly8"
+- | T_poly16 -> affix "poly16"
+- | T_poly64 -> affix "poly64"
+- | T_poly64x1 -> affix "poly64x1"
+- | T_poly64x2 -> affix "poly64x2"
+- | T_poly128 -> affix "poly128"
+- | T_float16 -> affix "float16"
+- | T_float32 -> affix "float32"
+- | T_immediate _ -> "const int"
+- | T_void -> "void"
+- | T_intQI -> "__builtin_neon_qi"
+- | T_intHI -> "__builtin_neon_hi"
+- | T_intSI -> "__builtin_neon_si"
+- | T_intDI -> "__builtin_neon_di"
+- | T_intTI -> "__builtin_neon_ti"
+- | T_floatHF -> "__builtin_neon_hf"
+- | T_floatSF -> "__builtin_neon_sf"
+- | T_arrayof (num, base) ->
+- let basename = name (fun x -> x) base in
+- affix (Printf.sprintf "%sx%d" basename num)
+- | T_ptrto x ->
+- let basename = name affix x in
+- Printf.sprintf "%s *" basename
+- | T_const x ->
+- let basename = name affix x in
+- Printf.sprintf "const %s" basename
+- in
+- name (fun x -> x ^ "_t") vt
+-
+-let string_of_inttype = function
+- B_TImode -> "__builtin_neon_ti"
+- | B_EImode -> "__builtin_neon_ei"
+- | B_OImode -> "__builtin_neon_oi"
+- | B_CImode -> "__builtin_neon_ci"
+- | B_XImode -> "__builtin_neon_xi"
+-
+-let string_of_mode = function
+- V8QI -> "v8qi" | V4HI -> "v4hi" | V4HF -> "v4hf" | V2SI -> "v2si"
+- | V2SF -> "v2sf" | DI -> "di" | V16QI -> "v16qi" | V8HI -> "v8hi"
+- | V4SI -> "v4si" | V4SF -> "v4sf" | V2DI -> "v2di" | QI -> "qi"
+- | HI -> "hi" | SI -> "si" | SF -> "sf" | TI -> "ti"
+-
+-(* Use uppercase chars for letters which form part of the intrinsic name, but
+- should be omitted from the builtin name (the info is passed in an extra
+- argument, instead). *)
+-let intrinsic_name name = String.lowercase name
+-
+-(* Allow the name of the builtin to be overridden by things (e.g. Flipped)
+- found in the features list. *)
+-let builtin_name features name =
+- let name = List.fold_right
+- (fun el name ->
+- match el with
+- Flipped x | Builtin_name x -> x
+- | _ -> name)
+- features name in
+- let islower x = let str = String.make 1 x in (String.lowercase str) = str
+- and buf = Buffer.create (String.length name) in
+- String.iter (fun c -> if islower c then Buffer.add_char buf c) name;
+- Buffer.contents buf
+-
+-(* Transform an arity into a list of strings. *)
+-let strings_of_arity a =
+- match a with
+- | Arity0 vt -> [string_of_vectype vt]
+- | Arity1 (vt1, vt2) -> [string_of_vectype vt1; string_of_vectype vt2]
+- | Arity2 (vt1, vt2, vt3) -> [string_of_vectype vt1;
+- string_of_vectype vt2;
+- string_of_vectype vt3]
+- | Arity3 (vt1, vt2, vt3, vt4) -> [string_of_vectype vt1;
+- string_of_vectype vt2;
+- string_of_vectype vt3;
+- string_of_vectype vt4]
+- | Arity4 (vt1, vt2, vt3, vt4, vt5) -> [string_of_vectype vt1;
+- string_of_vectype vt2;
+- string_of_vectype vt3;
+- string_of_vectype vt4;
+- string_of_vectype vt5]
+-
+-(* Suffixes on the end of builtin names that are to be stripped in order
+- to obtain the name used as an instruction. They are only stripped if
+- preceded immediately by an underscore. *)
+-let suffixes_to_strip = [ "n"; "lane"; "dup" ]
+-
+-(* Get the possible names of an instruction corresponding to a "name" from the
+- ops table. This is done by getting the equivalent builtin name and
+- stripping any suffixes from the list at the top of this file, unless
+- the features list presents with an Instruction_name entry, in which
+- case that is used; or unless the features list presents with a Flipped
+- entry, in which case that is used. If both such entries are present,
+- the first in the list will be chosen. *)
+-let get_insn_names features name =
+- let names = try
+- begin
+- match List.find (fun feature -> match feature with
+- Instruction_name _ -> true
+- | Flipped _ -> true
+- | _ -> false) features
+- with
+- Instruction_name names -> names
+- | Flipped name -> [name]
+- | _ -> assert false
+- end
+- with Not_found -> [builtin_name features name]
+- in
+- begin
+- List.map (fun name' ->
+- try
+- let underscore = String.rindex name' '_' in
+- let our_suffix = String.sub name' (underscore + 1)
+- ((String.length name') - underscore - 1)
+- in
+- let rec strip remaining_suffixes =
+- match remaining_suffixes with
+- [] -> name'
+- | s::ss when our_suffix = s -> String.sub name' 0 underscore
+- | _::ss -> strip ss
+- in
+- strip suffixes_to_strip
+- with (Not_found | Invalid_argument _) -> name') names
+- end
+-
+-(* Apply a function to each element of a list and then comma-separate
+- the resulting strings. *)
+-let rec commas f elts acc =
+- match elts with
+- [] -> acc
+- | [elt] -> acc ^ (f elt)
+- | elt::elts ->
+- commas f elts (acc ^ (f elt) ^ ", ")
+-
+-(* Given a list of features and the shape specified in the "ops" table, apply
+- a function to each possible shape that the instruction may have.
+- By default, this is the "shape" entry in "ops". If the features list
+- contains a Disassembles_as entry, the shapes contained in that entry are
+- mapped to corresponding outputs and returned in a list. If there is more
+- than one Disassembles_as entry, only the first is used. *)
+-let analyze_all_shapes features shape f =
+- try
+- match List.find (fun feature ->
+- match feature with Disassembles_as _ -> true
+- | _ -> false)
+- features with
+- Disassembles_as shapes -> List.map f shapes
+- | _ -> assert false
+- with Not_found -> [f shape]
+-
+-(* The crypto intrinsics have unconventional shapes and are not that
+- numerous to be worth the trouble of encoding here. We implement them
+- explicitly here. *)
+-let crypto_intrinsics =
+-"
+-#ifdef __ARM_FEATURE_CRYPTO
+-
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
+-vldrq_p128 (poly128_t const * __ptr)
+-{
+-#ifdef __ARM_BIG_ENDIAN
+- poly64_t* __ptmp = (poly64_t*) __ptr;
+- poly64_t __d0 = vld1_p64 (__ptmp);
+- poly64_t __d1 = vld1_p64 (__ptmp + 1);
+- return vreinterpretq_p128_p64 (vcombine_p64 (__d1, __d0));
+-#else
+- return vreinterpretq_p128_p64 (vld1q_p64 ((poly64_t*) __ptr));
+-#endif
+-}
+-
+-__extension__ static __inline void __attribute__ ((__always_inline__))
+-vstrq_p128 (poly128_t * __ptr, poly128_t __val)
+-{
+-#ifdef __ARM_BIG_ENDIAN
+- poly64x2_t __tmp = vreinterpretq_p64_p128 (__val);
+- poly64_t __d0 = vget_high_p64 (__tmp);
+- poly64_t __d1 = vget_low_p64 (__tmp);
+- vst1q_p64 ((poly64_t*) __ptr, vcombine_p64 (__d0, __d1));
+-#else
+- vst1q_p64 ((poly64_t*) __ptr, vreinterpretq_p64_p128 (__val));
+-#endif
+-}
+-
+-/* The vceq_p64 intrinsic does not map to a single instruction.
+- Instead we emulate it by performing a 32-bit variant of the vceq
+- and applying a pairwise min reduction to the result.
+- vceq_u32 will produce two 32-bit halves, each of which will contain either
+- all ones or all zeros depending on whether the corresponding 32-bit
+- halves of the poly64_t were equal. The whole poly64_t values are equal
+- if and only if both halves are equal, i.e. vceq_u32 returns all ones.
+- If the result is all zeroes for any half then the whole result is zeroes.
+- This is what the pairwise min reduction achieves. */
+-
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vceq_p64 (poly64x1_t __a, poly64x1_t __b)
+-{
+- uint32x2_t __t_a = vreinterpret_u32_p64 (__a);
+- uint32x2_t __t_b = vreinterpret_u32_p64 (__b);
+- uint32x2_t __c = vceq_u32 (__t_a, __t_b);
+- uint32x2_t __m = vpmin_u32 (__c, __c);
+- return vreinterpret_u64_u32 (__m);
+-}
+-
+-/* The vtst_p64 intrinsic does not map to a single instruction.
+- We emulate it in way similar to vceq_p64 above but here we do
+- a reduction with max since if any two corresponding bits
+- in the two poly64_t's match, then the whole result must be all ones. */
+-
+-__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+-vtst_p64 (poly64x1_t __a, poly64x1_t __b)
+-{
+- uint32x2_t __t_a = vreinterpret_u32_p64 (__a);
+- uint32x2_t __t_b = vreinterpret_u32_p64 (__b);
+- uint32x2_t __c = vtst_u32 (__t_a, __t_b);
+- uint32x2_t __m = vpmax_u32 (__c, __c);
+- return vreinterpret_u64_u32 (__m);
+-}
+-
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vaeseq_u8 (uint8x16_t __data, uint8x16_t __key)
+-{
+- return __builtin_arm_crypto_aese (__data, __key);
+-}
+-
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vaesdq_u8 (uint8x16_t __data, uint8x16_t __key)
+-{
+- return __builtin_arm_crypto_aesd (__data, __key);
+-}
+-
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vaesmcq_u8 (uint8x16_t __data)
+-{
+- return __builtin_arm_crypto_aesmc (__data);
+-}
+-
+-__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+-vaesimcq_u8 (uint8x16_t __data)
+-{
+- return __builtin_arm_crypto_aesimc (__data);
+-}
+-
+-__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+-vsha1h_u32 (uint32_t __hash_e)
+-{
+- uint32x4_t __t = vdupq_n_u32 (0);
+- __t = vsetq_lane_u32 (__hash_e, __t, 0);
+- __t = __builtin_arm_crypto_sha1h (__t);
+- return vgetq_lane_u32 (__t, 0);
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1cq_u32 (uint32x4_t __hash_abcd, uint32_t __hash_e, uint32x4_t __wk)
+-{
+- uint32x4_t __t = vdupq_n_u32 (0);
+- __t = vsetq_lane_u32 (__hash_e, __t, 0);
+- return __builtin_arm_crypto_sha1c (__hash_abcd, __t, __wk);
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1pq_u32 (uint32x4_t __hash_abcd, uint32_t __hash_e, uint32x4_t __wk)
+-{
+- uint32x4_t __t = vdupq_n_u32 (0);
+- __t = vsetq_lane_u32 (__hash_e, __t, 0);
+- return __builtin_arm_crypto_sha1p (__hash_abcd, __t, __wk);
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1mq_u32 (uint32x4_t __hash_abcd, uint32_t __hash_e, uint32x4_t __wk)
+-{
+- uint32x4_t __t = vdupq_n_u32 (0);
+- __t = vsetq_lane_u32 (__hash_e, __t, 0);
+- return __builtin_arm_crypto_sha1m (__hash_abcd, __t, __wk);
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1su0q_u32 (uint32x4_t __w0_3, uint32x4_t __w4_7, uint32x4_t __w8_11)
+-{
+- return __builtin_arm_crypto_sha1su0 (__w0_3, __w4_7, __w8_11);
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha1su1q_u32 (uint32x4_t __tw0_3, uint32x4_t __w12_15)
+-{
+- return __builtin_arm_crypto_sha1su1 (__tw0_3, __w12_15);
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha256hq_u32 (uint32x4_t __hash_abcd, uint32x4_t __hash_efgh, uint32x4_t __wk)
+-{
+- return __builtin_arm_crypto_sha256h (__hash_abcd, __hash_efgh, __wk);
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha256h2q_u32 (uint32x4_t __hash_abcd, uint32x4_t __hash_efgh, uint32x4_t __wk)
+-{
+- return __builtin_arm_crypto_sha256h2 (__hash_abcd, __hash_efgh, __wk);
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha256su0q_u32 (uint32x4_t __w0_3, uint32x4_t __w4_7)
+-{
+- return __builtin_arm_crypto_sha256su0 (__w0_3, __w4_7);
+-}
+-
+-__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+-vsha256su1q_u32 (uint32x4_t __tw0_3, uint32x4_t __w8_11, uint32x4_t __w12_15)
+-{
+- return __builtin_arm_crypto_sha256su1 (__tw0_3, __w8_11, __w12_15);
+-}
+-
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
+-vmull_p64 (poly64_t __a, poly64_t __b)
+-{
+- return (poly128_t) __builtin_arm_crypto_vmullp64 ((uint64_t) __a, (uint64_t) __b);
+-}
+-
+-__extension__ static __inline poly128_t __attribute__ ((__always_inline__))
+-vmull_high_p64 (poly64x2_t __a, poly64x2_t __b)
+-{
+- poly64_t __t1 = vget_high_p64 (__a);
+- poly64_t __t2 = vget_high_p64 (__b);
+-
+- return (poly128_t) __builtin_arm_crypto_vmullp64 ((uint64_t) __t1, (uint64_t) __t2);
+-}
+-
+-#endif
+-"
+--- a/src/gcc/config/arm/predicates.md
++++ b/src/gcc/config/arm/predicates.md
+@@ -141,8 +141,7 @@
+ (match_test "const_ok_for_arm (~INTVAL (op))")))
+
+ (define_predicate "const0_operand"
+- (and (match_code "const_int")
+- (match_test "INTVAL (op) == 0")))
++ (match_test "op == CONST0_RTX (mode)"))
+
+ ;; Something valid on the RHS of an ARM data-processing instruction
+ (define_predicate "arm_rhs_operand"
+@@ -170,8 +169,7 @@
+
+ (define_predicate "const_neon_scalar_shift_amount_operand"
+ (and (match_code "const_int")
+- (match_test "((unsigned HOST_WIDE_INT) INTVAL (op)) <= GET_MODE_BITSIZE (mode)
+- && ((unsigned HOST_WIDE_INT) INTVAL (op)) > 0")))
++ (match_test "IN_RANGE (UINTVAL (op), 1, GET_MODE_BITSIZE (mode))")))
+
+ (define_predicate "ldrd_strd_offset_operand"
+ (and (match_operand 0 "const_int_operand")
+@@ -243,11 +241,6 @@
+ (and (match_code "const_double")
+ (match_test "arm_const_double_rtx (op)"))))
+
+-(define_predicate "arm_float_compare_operand"
+- (if_then_else (match_test "TARGET_VFP")
+- (match_operand 0 "vfp_compare_operand")
+- (match_operand 0 "s_register_operand")))
+-
+ ;; True for valid index operands.
+ (define_predicate "index_operand"
+ (ior (match_operand 0 "s_register_operand")
+@@ -285,19 +278,19 @@
+ (match_test "power_of_two_operand (XEXP (op, 1), mode)"))
+ (and (match_code "rotate")
+ (match_test "CONST_INT_P (XEXP (op, 1))
+- && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32")))
++ && (UINTVAL (XEXP (op, 1))) < 32")))
+ (and (match_code "ashift,ashiftrt,lshiftrt,rotatert")
+ (match_test "!CONST_INT_P (XEXP (op, 1))
+- || ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32")))
++ || (UINTVAL (XEXP (op, 1))) < 32")))
+ (match_test "mode == GET_MODE (op)")))
+
+ (define_special_predicate "shift_nomul_operator"
+ (and (ior (and (match_code "rotate")
+ (match_test "CONST_INT_P (XEXP (op, 1))
+- && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32"))
++ && (UINTVAL (XEXP (op, 1))) < 32"))
+ (and (match_code "ashift,ashiftrt,lshiftrt,rotatert")
+ (match_test "!CONST_INT_P (XEXP (op, 1))
+- || ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32")))
++ || (UINTVAL (XEXP (op, 1))) < 32")))
+ (match_test "mode == GET_MODE (op)")))
+
+ ;; True for shift operators which can be used with saturation instructions.
+@@ -306,7 +299,7 @@
+ (match_test "power_of_two_operand (XEXP (op, 1), mode)"))
+ (and (match_code "ashift,ashiftrt")
+ (match_test "CONST_INT_P (XEXP (op, 1))
+- && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1)) < 32)")))
++ && (UINTVAL (XEXP (op, 1)) < 32)")))
+ (match_test "mode == GET_MODE (op)")))
+
+ ;; True for MULT, to identify which variant of shift_operator is in use.
+@@ -398,6 +391,12 @@
+ || mode == CC_DGTUmode));
+ })
+
++;; Any register, including CC
++(define_predicate "cc_register_operand"
++ (and (match_code "reg")
++ (ior (match_operand 0 "s_register_operand")
++ (match_operand 0 "cc_register"))))
++
+ (define_special_predicate "arm_extendqisi_mem_op"
+ (and (match_operand 0 "memory_operand")
+ (match_test "TARGET_ARM ? arm_legitimate_address_outer_p (mode,
+@@ -532,7 +531,7 @@
+ (ior (and (match_code "reg,subreg")
+ (match_operand 0 "s_register_operand"))
+ (and (match_code "const_int")
+- (match_test "((unsigned HOST_WIDE_INT) INTVAL (op)) < 256"))))
++ (match_test "(UINTVAL (op)) < 256"))))
+
+ (define_predicate "thumb1_cmpneg_operand"
+ (and (match_code "const_int")
+@@ -612,69 +611,23 @@
+ (define_special_predicate "vect_par_constant_high"
+ (match_code "parallel")
+ {
+- HOST_WIDE_INT count = XVECLEN (op, 0);
+- int i;
+- int base = GET_MODE_NUNITS (mode);
+-
+- if ((count < 1)
+- || (count != base/2))
+- return false;
+-
+- if (!VECTOR_MODE_P (mode))
+- return false;
+-
+- for (i = 0; i < count; i++)
+- {
+- rtx elt = XVECEXP (op, 0, i);
+- int val;
+-
+- if (!CONST_INT_P (elt))
+- return false;
+-
+- val = INTVAL (elt);
+- if (val != (base/2) + i)
+- return false;
+- }
+- return true;
++ return arm_simd_check_vect_par_cnst_half_p (op, mode, true);
+ })
+
+ (define_special_predicate "vect_par_constant_low"
+ (match_code "parallel")
+ {
+- HOST_WIDE_INT count = XVECLEN (op, 0);
+- int i;
+- int base = GET_MODE_NUNITS (mode);
+-
+- if ((count < 1)
+- || (count != base/2))
+- return false;
+-
+- if (!VECTOR_MODE_P (mode))
+- return false;
+-
+- for (i = 0; i < count; i++)
+- {
+- rtx elt = XVECEXP (op, 0, i);
+- int val;
+-
+- if (!CONST_INT_P (elt))
+- return false;
+-
+- val = INTVAL (elt);
+- if (val != i)
+- return false;
+- }
+- return true;
++ return arm_simd_check_vect_par_cnst_half_p (op, mode, false);
+ })
+
+ (define_predicate "const_double_vcvt_power_of_two_reciprocal"
+ (and (match_code "const_double")
+- (match_test "TARGET_32BIT && TARGET_VFP
+- && vfp3_const_double_for_fract_bits (op)")))
++ (match_test "TARGET_32BIT
++ && vfp3_const_double_for_fract_bits (op)")))
+
+ (define_predicate "const_double_vcvt_power_of_two"
+ (and (match_code "const_double")
+- (match_test "TARGET_32BIT && TARGET_VFP
++ (match_test "TARGET_32BIT
+ && vfp3_const_double_for_bits (op) > 0")))
+
+ (define_predicate "neon_struct_operand"
+--- a/src/gcc/config/arm/sync.md
++++ b/src/gcc/config/arm/sync.md
+@@ -63,37 +63,59 @@
+ (set_attr "predicable" "no")])
+
+ (define_insn "atomic_load<mode>"
+- [(set (match_operand:QHSI 0 "register_operand" "=r")
++ [(set (match_operand:QHSI 0 "register_operand" "=r,r,l")
+ (unspec_volatile:QHSI
+- [(match_operand:QHSI 1 "arm_sync_memory_operand" "Q")
+- (match_operand:SI 2 "const_int_operand")] ;; model
++ [(match_operand:QHSI 1 "arm_sync_memory_operand" "Q,Q,Q")
++ (match_operand:SI 2 "const_int_operand" "n,Pf,n")] ;; model
+ VUNSPEC_LDA))]
+ "TARGET_HAVE_LDACQ"
+ {
+ enum memmodel model = memmodel_from_int (INTVAL (operands[2]));
+ if (is_mm_relaxed (model) || is_mm_consume (model) || is_mm_release (model))
+- return \"ldr<sync_sfx>%?\\t%0, %1\";
++ {
++ if (TARGET_THUMB1)
++ return \"ldr<sync_sfx>\\t%0, %1\";
++ else
++ return \"ldr<sync_sfx>%?\\t%0, %1\";
++ }
+ else
+- return \"lda<sync_sfx>%?\\t%0, %1\";
++ {
++ if (TARGET_THUMB1)
++ return \"lda<sync_sfx>\\t%0, %1\";
++ else
++ return \"lda<sync_sfx>%?\\t%0, %1\";
++ }
+ }
+- [(set_attr "predicable" "yes")
++ [(set_attr "arch" "32,v8mb,any")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+
+ (define_insn "atomic_store<mode>"
+- [(set (match_operand:QHSI 0 "memory_operand" "=Q")
++ [(set (match_operand:QHSI 0 "memory_operand" "=Q,Q,Q")
+ (unspec_volatile:QHSI
+- [(match_operand:QHSI 1 "general_operand" "r")
+- (match_operand:SI 2 "const_int_operand")] ;; model
++ [(match_operand:QHSI 1 "general_operand" "r,r,l")
++ (match_operand:SI 2 "const_int_operand" "n,Pf,n")] ;; model
+ VUNSPEC_STL))]
+ "TARGET_HAVE_LDACQ"
+ {
+ enum memmodel model = memmodel_from_int (INTVAL (operands[2]));
+ if (is_mm_relaxed (model) || is_mm_consume (model) || is_mm_acquire (model))
+- return \"str<sync_sfx>%?\t%1, %0\";
++ {
++ if (TARGET_THUMB1)
++ return \"str<sync_sfx>\t%1, %0\";
++ else
++ return \"str<sync_sfx>%?\t%1, %0\";
++ }
+ else
+- return \"stl<sync_sfx>%?\t%1, %0\";
++ {
++ if (TARGET_THUMB1)
++ return \"stl<sync_sfx>\t%1, %0\";
++ else
++ return \"stl<sync_sfx>%?\t%1, %0\";
++ }
+ }
+- [(set_attr "predicable" "yes")
++ [(set_attr "arch" "32,v8mb,any")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+
+ ;; An LDRD instruction usable by the atomic_loaddi expander on LPAE targets
+@@ -117,7 +139,7 @@
+ [(match_operand:DI 0 "s_register_operand") ;; val out
+ (match_operand:DI 1 "mem_noofs_operand") ;; memory
+ (match_operand:SI 2 "const_int_operand")] ;; model
+- "(TARGET_HAVE_LDREXD || TARGET_HAVE_LPAE || TARGET_HAVE_LDACQ)
++ "(TARGET_HAVE_LDREXD || TARGET_HAVE_LPAE || TARGET_HAVE_LDACQEXD)
+ && ARM_DOUBLEWORD_ALIGN"
+ {
+ memmodel model = memmodel_from_int (INTVAL (operands[2]));
+@@ -125,7 +147,7 @@
+ /* For ARMv8-A we can use an LDAEXD to atomically load two 32-bit registers
+ when acquire or stronger semantics are needed. When the relaxed model is
+ used this can be relaxed to a normal LDRD. */
+- if (TARGET_HAVE_LDACQ)
++ if (TARGET_HAVE_LDACQEXD)
+ {
+ if (is_mm_relaxed (model))
+ emit_insn (gen_arm_atomic_loaddi2_ldrd (operands[0], operands[1]));
+@@ -167,21 +189,23 @@
+ DONE;
+ })
+
++;; Constraints of this pattern must be at least as strict as those of the
++;; cbranchsi operations in thumb1.md and aim to be as permissive.
+ (define_insn_and_split "atomic_compare_and_swap<mode>_1"
+- [(set (reg:CC_Z CC_REGNUM) ;; bool out
++ [(set (match_operand 0 "cc_register_operand" "=&c,&l,&l,&l") ;; bool out
+ (unspec_volatile:CC_Z [(const_int 0)] VUNSPEC_ATOMIC_CAS))
+- (set (match_operand:SI 0 "s_register_operand" "=&r") ;; val out
++ (set (match_operand:SI 1 "s_register_operand" "=&r,&l,&0,&l*h") ;; val out
+ (zero_extend:SI
+- (match_operand:NARROW 1 "mem_noofs_operand" "+Ua"))) ;; memory
+- (set (match_dup 1)
++ (match_operand:NARROW 2 "mem_noofs_operand" "+Ua,Ua,Ua,Ua"))) ;; memory
++ (set (match_dup 2)
+ (unspec_volatile:NARROW
+- [(match_operand:SI 2 "arm_add_operand" "rIL") ;; expected
+- (match_operand:NARROW 3 "s_register_operand" "r") ;; desired
+- (match_operand:SI 4 "const_int_operand") ;; is_weak
+- (match_operand:SI 5 "const_int_operand") ;; mod_s
+- (match_operand:SI 6 "const_int_operand")] ;; mod_f
++ [(match_operand:SI 3 "arm_add_operand" "rIL,lIL*h,J,*r") ;; expected
++ (match_operand:NARROW 4 "s_register_operand" "r,r,r,r") ;; desired
++ (match_operand:SI 5 "const_int_operand") ;; is_weak
++ (match_operand:SI 6 "const_int_operand") ;; mod_s
++ (match_operand:SI 7 "const_int_operand")] ;; mod_f
+ VUNSPEC_ATOMIC_CAS))
+- (clobber (match_scratch:SI 7 "=&r"))]
++ (clobber (match_scratch:SI 8 "=&r,X,X,X"))]
+ "<sync_predtab>"
+ "#"
+ "&& reload_completed"
+@@ -189,27 +213,30 @@
+ {
+ arm_split_compare_and_swap (operands);
+ DONE;
+- })
++ }
++ [(set_attr "arch" "32,v8mb,v8mb,v8mb")])
+
+ (define_mode_attr cas_cmp_operand
+ [(SI "arm_add_operand") (DI "cmpdi_operand")])
+ (define_mode_attr cas_cmp_str
+ [(SI "rIL") (DI "rDi")])
+
++;; Constraints of this pattern must be at least as strict as those of the
++;; cbranchsi operations in thumb1.md and aim to be as permissive.
+ (define_insn_and_split "atomic_compare_and_swap<mode>_1"
+- [(set (reg:CC_Z CC_REGNUM) ;; bool out
++ [(set (match_operand 0 "cc_register_operand" "=&c,&l,&l,&l") ;; bool out
+ (unspec_volatile:CC_Z [(const_int 0)] VUNSPEC_ATOMIC_CAS))
+- (set (match_operand:SIDI 0 "s_register_operand" "=&r") ;; val out
+- (match_operand:SIDI 1 "mem_noofs_operand" "+Ua")) ;; memory
+- (set (match_dup 1)
++ (set (match_operand:SIDI 1 "s_register_operand" "=&r,&l,&0,&l*h") ;; val out
++ (match_operand:SIDI 2 "mem_noofs_operand" "+Ua,Ua,Ua,Ua")) ;; memory
++ (set (match_dup 2)
+ (unspec_volatile:SIDI
+- [(match_operand:SIDI 2 "<cas_cmp_operand>" "<cas_cmp_str>") ;; expect
+- (match_operand:SIDI 3 "s_register_operand" "r") ;; desired
+- (match_operand:SI 4 "const_int_operand") ;; is_weak
+- (match_operand:SI 5 "const_int_operand") ;; mod_s
+- (match_operand:SI 6 "const_int_operand")] ;; mod_f
++ [(match_operand:SIDI 3 "<cas_cmp_operand>" "<cas_cmp_str>,lIL*h,J,*r") ;; expect
++ (match_operand:SIDI 4 "s_register_operand" "r,r,r,r") ;; desired
++ (match_operand:SI 5 "const_int_operand") ;; is_weak
++ (match_operand:SI 6 "const_int_operand") ;; mod_s
++ (match_operand:SI 7 "const_int_operand")] ;; mod_f
+ VUNSPEC_ATOMIC_CAS))
+- (clobber (match_scratch:SI 7 "=&r"))]
++ (clobber (match_scratch:SI 8 "=&r,X,X,X"))]
+ "<sync_predtab>"
+ "#"
+ "&& reload_completed"
+@@ -217,18 +244,19 @@
+ {
+ arm_split_compare_and_swap (operands);
+ DONE;
+- })
++ }
++ [(set_attr "arch" "32,v8mb,v8mb,v8mb")])
+
+ (define_insn_and_split "atomic_exchange<mode>"
+- [(set (match_operand:QHSD 0 "s_register_operand" "=&r") ;; output
+- (match_operand:QHSD 1 "mem_noofs_operand" "+Ua")) ;; memory
++ [(set (match_operand:QHSD 0 "s_register_operand" "=&r,&r") ;; output
++ (match_operand:QHSD 1 "mem_noofs_operand" "+Ua,Ua")) ;; memory
+ (set (match_dup 1)
+ (unspec_volatile:QHSD
+- [(match_operand:QHSD 2 "s_register_operand" "r") ;; input
++ [(match_operand:QHSD 2 "s_register_operand" "r,r") ;; input
+ (match_operand:SI 3 "const_int_operand" "")] ;; model
+ VUNSPEC_ATOMIC_XCHG))
+ (clobber (reg:CC CC_REGNUM))
+- (clobber (match_scratch:SI 4 "=&r"))]
++ (clobber (match_scratch:SI 4 "=&r,&l"))]
+ "<sync_predtab>"
+ "#"
+ "&& reload_completed"
+@@ -237,7 +265,11 @@
+ arm_split_atomic_op (SET, operands[0], NULL, operands[1],
+ operands[2], operands[3], operands[4]);
+ DONE;
+- })
++ }
++ [(set_attr "arch" "32,v8mb")])
++
++;; The following mode and code attribute are defined here because they are
++;; specific to atomics and are not needed anywhere else.
+
+ (define_mode_attr atomic_op_operand
+ [(QI "reg_or_int_operand")
+@@ -248,16 +280,24 @@
+ (define_mode_attr atomic_op_str
+ [(QI "rn") (HI "rn") (SI "rn") (DI "r")])
+
++(define_code_attr thumb1_atomic_op_str
++ [(ior "l,l") (xor "l,l") (and "l,l") (plus "lIJL,r") (minus "lPd,lPd")])
++
++(define_code_attr thumb1_atomic_newop_str
++ [(ior "&l,&l") (xor "&l,&l") (and "&l,&l") (plus "&l,&r") (minus "&l,&l")])
++
++;; Constraints of this pattern must be at least as strict as those of the non
++;; atomic operations in thumb1.md and aim to be as permissive.
+ (define_insn_and_split "atomic_<sync_optab><mode>"
+- [(set (match_operand:QHSD 0 "mem_noofs_operand" "+Ua")
++ [(set (match_operand:QHSD 0 "mem_noofs_operand" "+Ua,Ua,Ua")
+ (unspec_volatile:QHSD
+ [(syncop:QHSD (match_dup 0)
+- (match_operand:QHSD 1 "<atomic_op_operand>" "<atomic_op_str>"))
++ (match_operand:QHSD 1 "<atomic_op_operand>" "<atomic_op_str>,<thumb1_atomic_op_str>"))
+ (match_operand:SI 2 "const_int_operand")] ;; model
+ VUNSPEC_ATOMIC_OP))
+ (clobber (reg:CC CC_REGNUM))
+- (clobber (match_scratch:QHSD 3 "=&r"))
+- (clobber (match_scratch:SI 4 "=&r"))]
++ (clobber (match_scratch:QHSD 3 "=&r,<thumb1_atomic_newop_str>"))
++ (clobber (match_scratch:SI 4 "=&r,&l,&l"))]
+ "<sync_predtab>"
+ "#"
+ "&& reload_completed"
+@@ -266,19 +306,22 @@
+ arm_split_atomic_op (<CODE>, NULL, operands[3], operands[0],
+ operands[1], operands[2], operands[4]);
+ DONE;
+- })
++ }
++ [(set_attr "arch" "32,v8mb,v8mb")])
+
++;; Constraints of this pattern must be at least as strict as those of the non
++;; atomic NANDs in thumb1.md and aim to be as permissive.
+ (define_insn_and_split "atomic_nand<mode>"
+- [(set (match_operand:QHSD 0 "mem_noofs_operand" "+Ua")
++ [(set (match_operand:QHSD 0 "mem_noofs_operand" "+Ua,Ua")
+ (unspec_volatile:QHSD
+ [(not:QHSD
+ (and:QHSD (match_dup 0)
+- (match_operand:QHSD 1 "<atomic_op_operand>" "<atomic_op_str>")))
++ (match_operand:QHSD 1 "<atomic_op_operand>" "<atomic_op_str>,l")))
+ (match_operand:SI 2 "const_int_operand")] ;; model
+ VUNSPEC_ATOMIC_OP))
+ (clobber (reg:CC CC_REGNUM))
+- (clobber (match_scratch:QHSD 3 "=&r"))
+- (clobber (match_scratch:SI 4 "=&r"))]
++ (clobber (match_scratch:QHSD 3 "=&r,&l"))
++ (clobber (match_scratch:SI 4 "=&r,&l"))]
+ "<sync_predtab>"
+ "#"
+ "&& reload_completed"
+@@ -287,20 +330,38 @@
+ arm_split_atomic_op (NOT, NULL, operands[3], operands[0],
+ operands[1], operands[2], operands[4]);
+ DONE;
+- })
++ }
++ [(set_attr "arch" "32,v8mb")])
++
++;; 3 alternatives are needed to represent constraints after split from
++;; thumb1_addsi3: (i) case where operand1 and destination can be in different
++;; registers, (ii) case where they are in the same low register and (iii) case
++;; when they are in the same register without restriction on the register. We
++;; disparage slightly alternatives that require copying the old value into the
++;; register for the new value (see bind_old_new in arm_split_atomic_op).
++(define_code_attr thumb1_atomic_fetch_op_str
++ [(ior "l,l,l") (xor "l,l,l") (and "l,l,l") (plus "lL,?IJ,?r") (minus "lPd,lPd,lPd")])
++
++(define_code_attr thumb1_atomic_fetch_newop_str
++ [(ior "&l,&l,&l") (xor "&l,&l,&l") (and "&l,&l,&l") (plus "&l,&l,&r") (minus "&l,&l,&l")])
+
++(define_code_attr thumb1_atomic_fetch_oldop_str
++ [(ior "&r,&r,&r") (xor "&r,&r,&r") (and "&r,&r,&r") (plus "&l,&r,&r") (minus "&l,&l,&l")])
++
++;; Constraints of this pattern must be at least as strict as those of the non
++;; atomic operations in thumb1.md and aim to be as permissive.
+ (define_insn_and_split "atomic_fetch_<sync_optab><mode>"
+- [(set (match_operand:QHSD 0 "s_register_operand" "=&r")
+- (match_operand:QHSD 1 "mem_noofs_operand" "+Ua"))
++ [(set (match_operand:QHSD 0 "s_register_operand" "=&r,<thumb1_atomic_fetch_oldop_str>")
++ (match_operand:QHSD 1 "mem_noofs_operand" "+Ua,Ua,Ua,Ua"))
+ (set (match_dup 1)
+ (unspec_volatile:QHSD
+ [(syncop:QHSD (match_dup 1)
+- (match_operand:QHSD 2 "<atomic_op_operand>" "<atomic_op_str>"))
++ (match_operand:QHSD 2 "<atomic_op_operand>" "<atomic_op_str>,<thumb1_atomic_fetch_op_str>"))
+ (match_operand:SI 3 "const_int_operand")] ;; model
+ VUNSPEC_ATOMIC_OP))
+ (clobber (reg:CC CC_REGNUM))
+- (clobber (match_scratch:QHSD 4 "=&r"))
+- (clobber (match_scratch:SI 5 "=&r"))]
++ (clobber (match_scratch:QHSD 4 "=&r,<thumb1_atomic_fetch_newop_str>"))
++ (clobber (match_scratch:SI 5 "=&r,&l,&l,&l"))]
+ "<sync_predtab>"
+ "#"
+ "&& reload_completed"
+@@ -309,21 +370,24 @@
+ arm_split_atomic_op (<CODE>, operands[0], operands[4], operands[1],
+ operands[2], operands[3], operands[5]);
+ DONE;
+- })
++ }
++ [(set_attr "arch" "32,v8mb,v8mb,v8mb")])
+
++;; Constraints of this pattern must be at least as strict as those of the non
++;; atomic NANDs in thumb1.md and aim to be as permissive.
+ (define_insn_and_split "atomic_fetch_nand<mode>"
+- [(set (match_operand:QHSD 0 "s_register_operand" "=&r")
+- (match_operand:QHSD 1 "mem_noofs_operand" "+Ua"))
++ [(set (match_operand:QHSD 0 "s_register_operand" "=&r,&r")
++ (match_operand:QHSD 1 "mem_noofs_operand" "+Ua,Ua"))
+ (set (match_dup 1)
+ (unspec_volatile:QHSD
+ [(not:QHSD
+ (and:QHSD (match_dup 1)
+- (match_operand:QHSD 2 "<atomic_op_operand>" "<atomic_op_str>")))
++ (match_operand:QHSD 2 "<atomic_op_operand>" "<atomic_op_str>,l")))
+ (match_operand:SI 3 "const_int_operand")] ;; model
+ VUNSPEC_ATOMIC_OP))
+ (clobber (reg:CC CC_REGNUM))
+- (clobber (match_scratch:QHSD 4 "=&r"))
+- (clobber (match_scratch:SI 5 "=&r"))]
++ (clobber (match_scratch:QHSD 4 "=&r,&l"))
++ (clobber (match_scratch:SI 5 "=&r,&l"))]
+ "<sync_predtab>"
+ "#"
+ "&& reload_completed"
+@@ -332,20 +396,23 @@
+ arm_split_atomic_op (NOT, operands[0], operands[4], operands[1],
+ operands[2], operands[3], operands[5]);
+ DONE;
+- })
++ }
++ [(set_attr "arch" "32,v8mb")])
+
++;; Constraints of this pattern must be at least as strict as those of the non
++;; atomic operations in thumb1.md and aim to be as permissive.
+ (define_insn_and_split "atomic_<sync_optab>_fetch<mode>"
+- [(set (match_operand:QHSD 0 "s_register_operand" "=&r")
++ [(set (match_operand:QHSD 0 "s_register_operand" "=&r,<thumb1_atomic_newop_str>")
+ (syncop:QHSD
+- (match_operand:QHSD 1 "mem_noofs_operand" "+Ua")
+- (match_operand:QHSD 2 "<atomic_op_operand>" "<atomic_op_str>")))
++ (match_operand:QHSD 1 "mem_noofs_operand" "+Ua,Ua,Ua")
++ (match_operand:QHSD 2 "<atomic_op_operand>" "<atomic_op_str>,<thumb1_atomic_op_str>")))
+ (set (match_dup 1)
+ (unspec_volatile:QHSD
+ [(match_dup 1) (match_dup 2)
+ (match_operand:SI 3 "const_int_operand")] ;; model
+ VUNSPEC_ATOMIC_OP))
+ (clobber (reg:CC CC_REGNUM))
+- (clobber (match_scratch:SI 4 "=&r"))]
++ (clobber (match_scratch:SI 4 "=&r,&l,&l"))]
+ "<sync_predtab>"
+ "#"
+ "&& reload_completed"
+@@ -354,21 +421,24 @@
+ arm_split_atomic_op (<CODE>, NULL, operands[0], operands[1],
+ operands[2], operands[3], operands[4]);
+ DONE;
+- })
++ }
++ [(set_attr "arch" "32,v8mb,v8mb")])
+
++;; Constraints of this pattern must be at least as strict as those of the non
++;; atomic NANDs in thumb1.md and aim to be as permissive.
+ (define_insn_and_split "atomic_nand_fetch<mode>"
+- [(set (match_operand:QHSD 0 "s_register_operand" "=&r")
++ [(set (match_operand:QHSD 0 "s_register_operand" "=&r,&l")
+ (not:QHSD
+ (and:QHSD
+- (match_operand:QHSD 1 "mem_noofs_operand" "+Ua")
+- (match_operand:QHSD 2 "<atomic_op_operand>" "<atomic_op_str>"))))
++ (match_operand:QHSD 1 "mem_noofs_operand" "+Ua,Ua")
++ (match_operand:QHSD 2 "<atomic_op_operand>" "<atomic_op_str>,l"))))
+ (set (match_dup 1)
+ (unspec_volatile:QHSD
+ [(match_dup 1) (match_dup 2)
+ (match_operand:SI 3 "const_int_operand")] ;; model
+ VUNSPEC_ATOMIC_OP))
+ (clobber (reg:CC CC_REGNUM))
+- (clobber (match_scratch:SI 4 "=&r"))]
++ (clobber (match_scratch:SI 4 "=&r,&l"))]
+ "<sync_predtab>"
+ "#"
+ "&& reload_completed"
+@@ -377,48 +447,61 @@
+ arm_split_atomic_op (NOT, NULL, operands[0], operands[1],
+ operands[2], operands[3], operands[4]);
+ DONE;
+- })
++ }
++ [(set_attr "arch" "32,v8mb")])
+
+ (define_insn "arm_load_exclusive<mode>"
+- [(set (match_operand:SI 0 "s_register_operand" "=r")
++ [(set (match_operand:SI 0 "s_register_operand" "=r,r")
+ (zero_extend:SI
+ (unspec_volatile:NARROW
+- [(match_operand:NARROW 1 "mem_noofs_operand" "Ua")]
++ [(match_operand:NARROW 1 "mem_noofs_operand" "Ua,Ua")]
+ VUNSPEC_LL)))]
+ "TARGET_HAVE_LDREXBH"
+- "ldrex<sync_sfx>%?\t%0, %C1"
+- [(set_attr "predicable" "yes")
++ "@
++ ldrex<sync_sfx>%?\t%0, %C1
++ ldrex<sync_sfx>\t%0, %C1"
++ [(set_attr "arch" "32,v8mb")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+
+ (define_insn "arm_load_acquire_exclusive<mode>"
+- [(set (match_operand:SI 0 "s_register_operand" "=r")
++ [(set (match_operand:SI 0 "s_register_operand" "=r,r")
+ (zero_extend:SI
+ (unspec_volatile:NARROW
+- [(match_operand:NARROW 1 "mem_noofs_operand" "Ua")]
++ [(match_operand:NARROW 1 "mem_noofs_operand" "Ua,Ua")]
+ VUNSPEC_LAX)))]
+ "TARGET_HAVE_LDACQ"
+- "ldaex<sync_sfx>%?\\t%0, %C1"
+- [(set_attr "predicable" "yes")
++ "@
++ ldaex<sync_sfx>%?\\t%0, %C1
++ ldaex<sync_sfx>\\t%0, %C1"
++ [(set_attr "arch" "32,v8mb")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+
+ (define_insn "arm_load_exclusivesi"
+- [(set (match_operand:SI 0 "s_register_operand" "=r")
++ [(set (match_operand:SI 0 "s_register_operand" "=r,r")
+ (unspec_volatile:SI
+- [(match_operand:SI 1 "mem_noofs_operand" "Ua")]
++ [(match_operand:SI 1 "mem_noofs_operand" "Ua,Ua")]
+ VUNSPEC_LL))]
+ "TARGET_HAVE_LDREX"
+- "ldrex%?\t%0, %C1"
+- [(set_attr "predicable" "yes")
++ "@
++ ldrex%?\t%0, %C1
++ ldrex\t%0, %C1"
++ [(set_attr "arch" "32,v8mb")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+
+ (define_insn "arm_load_acquire_exclusivesi"
+- [(set (match_operand:SI 0 "s_register_operand" "=r")
++ [(set (match_operand:SI 0 "s_register_operand" "=r,r")
+ (unspec_volatile:SI
+- [(match_operand:SI 1 "mem_noofs_operand" "Ua")]
++ [(match_operand:SI 1 "mem_noofs_operand" "Ua,Ua")]
+ VUNSPEC_LAX))]
+ "TARGET_HAVE_LDACQ"
+- "ldaex%?\t%0, %C1"
+- [(set_attr "predicable" "yes")
++ "@
++ ldaex%?\t%0, %C1
++ ldaex\t%0, %C1"
++ [(set_attr "arch" "32,v8mb")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+
+ (define_insn "arm_load_exclusivedi"
+@@ -436,7 +519,7 @@
+ (unspec_volatile:DI
+ [(match_operand:DI 1 "mem_noofs_operand" "Ua")]
+ VUNSPEC_LAX))]
+- "TARGET_HAVE_LDACQ && ARM_DOUBLEWORD_ALIGN"
++ "TARGET_HAVE_LDACQEXD && ARM_DOUBLEWORD_ALIGN"
+ "ldaexd%?\t%0, %H0, %C1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+@@ -452,16 +535,18 @@
+ {
+ if (<MODE>mode == DImode)
+ {
+- rtx value = operands[2];
+ /* The restrictions on target registers in ARM mode are that the two
+ registers are consecutive and the first one is even; Thumb is
+ actually more flexible, but DI should give us this anyway.
+- Note that the 1st register always gets the lowest word in memory. */
+- gcc_assert ((REGNO (value) & 1) == 0 || TARGET_THUMB2);
+- operands[3] = gen_rtx_REG (SImode, REGNO (value) + 1);
+- return "strexd%?\t%0, %2, %3, %C1";
++ Note that the 1st register always gets the
++ lowest word in memory. */
++ gcc_assert ((REGNO (operands[2]) & 1) == 0 || TARGET_THUMB2);
++ return "strexd%?\t%0, %2, %H2, %C1";
+ }
+- return "strex<sync_sfx>%?\t%0, %2, %C1";
++ if (TARGET_THUMB1)
++ return "strex<sync_sfx>\t%0, %2, %C1";
++ else
++ return "strex<sync_sfx>%?\t%0, %2, %C1";
+ }
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+@@ -473,25 +558,26 @@
+ (unspec_volatile:DI
+ [(match_operand:DI 2 "s_register_operand" "r")]
+ VUNSPEC_SLX))]
+- "TARGET_HAVE_LDACQ && ARM_DOUBLEWORD_ALIGN"
++ "TARGET_HAVE_LDACQEXD && ARM_DOUBLEWORD_ALIGN"
+ {
+- rtx value = operands[2];
+ /* See comment in arm_store_exclusive<mode> above. */
+- gcc_assert ((REGNO (value) & 1) == 0 || TARGET_THUMB2);
+- operands[3] = gen_rtx_REG (SImode, REGNO (value) + 1);
+- return "stlexd%?\t%0, %2, %3, %C1";
++ gcc_assert ((REGNO (operands[2]) & 1) == 0 || TARGET_THUMB2);
++ return "stlexd%?\t%0, %2, %H2, %C1";
+ }
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+
+ (define_insn "arm_store_release_exclusive<mode>"
+- [(set (match_operand:SI 0 "s_register_operand" "=&r")
++ [(set (match_operand:SI 0 "s_register_operand" "=&r,&r")
+ (unspec_volatile:SI [(const_int 0)] VUNSPEC_SLX))
+- (set (match_operand:QHSI 1 "mem_noofs_operand" "=Ua")
++ (set (match_operand:QHSI 1 "mem_noofs_operand" "=Ua,Ua")
+ (unspec_volatile:QHSI
+- [(match_operand:QHSI 2 "s_register_operand" "r")]
++ [(match_operand:QHSI 2 "s_register_operand" "r,r")]
+ VUNSPEC_SLX))]
+ "TARGET_HAVE_LDACQ"
+- "stlex<sync_sfx>%?\t%0, %2, %C1"
+- [(set_attr "predicable" "yes")
++ "@
++ stlex<sync_sfx>%?\t%0, %2, %C1
++ stlex<sync_sfx>\t%0, %2, %C1"
++ [(set_attr "arch" "32,v8mb")
++ (set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+--- a/src/gcc/config/arm/t-aprofile
++++ b/src/gcc/config/arm/t-aprofile
+@@ -49,38 +49,33 @@ MULTILIB_DIRNAMES += fpv3 simdv1 fpv4 simdvfpv4 simdv8
+ MULTILIB_OPTIONS += mfloat-abi=softfp/mfloat-abi=hard
+ MULTILIB_DIRNAMES += softfp hard
+
+-# We don't build no-float libraries with an FPU.
+-MULTILIB_EXCEPTIONS += *mfpu=vfpv3-d16
+-MULTILIB_EXCEPTIONS += *mfpu=neon
+-MULTILIB_EXCEPTIONS += *mfpu=vfpv4-d16
+-MULTILIB_EXCEPTIONS += *mfpu=neon-vfpv4
+-MULTILIB_EXCEPTIONS += *mfpu=neon-fp-armv8
+-
+-# We don't build libraries requiring an FPU at the CPU/Arch/ISA level.
+-MULTILIB_EXCEPTIONS += mfloat-abi=*
+-MULTILIB_EXCEPTIONS += mfpu=*
+-MULTILIB_EXCEPTIONS += mthumb/mfloat-abi=*
+-MULTILIB_EXCEPTIONS += mthumb/mfpu=*
+-MULTILIB_EXCEPTIONS += *march=armv7-a/mfloat-abi=*
+-MULTILIB_EXCEPTIONS += *march=armv7ve/mfloat-abi=*
+-MULTILIB_EXCEPTIONS += *march=armv8-a/mfloat-abi=*
+-
+-# Ensure the correct FPU variants apply to the correct base architectures.
+-MULTILIB_EXCEPTIONS += *march=armv7ve/*mfpu=vfpv3-d16*
+-MULTILIB_EXCEPTIONS += *march=armv7ve/*mfpu=neon/*
+-MULTILIB_EXCEPTIONS += *march=armv8-a/*mfpu=vfpv3-d16*
+-MULTILIB_EXCEPTIONS += *march=armv8-a/*mfpu=neon/*
+-MULTILIB_EXCEPTIONS += *march=armv7-a/*mfpu=vfpv4-d16*
+-MULTILIB_EXCEPTIONS += *march=armv7-a/*mfpu=neon-vfpv4*
+-MULTILIB_EXCEPTIONS += *march=armv8-a/*mfpu=vfpv4-d16*
+-MULTILIB_EXCEPTIONS += *march=armv8-a/*mfpu=neon-vfpv4*
+-MULTILIB_EXCEPTIONS += *march=armv7-a/*mfpu=neon-fp-armv8*
+-MULTILIB_EXCEPTIONS += *march=armv7ve/*mfpu=neon-fp-armv8*
++
++# Option combinations to build library with
++
++# Default CPU/Arch (ARM is implicitly included because it uses the default
++# multilib)
++MULTILIB_REQUIRED += mthumb
++
++# ARMv7-A
++MULTILIB_REQUIRED += *march=armv7-a
++MULTILIB_REQUIRED += *march=armv7-a/mfpu=vfpv3-d16/mfloat-abi=*
++MULTILIB_REQUIRED += *march=armv7-a/mfpu=neon/mfloat-abi=*
++
++# ARMv7VE
++MULTILIB_REQUIRED += *march=armv7ve
++MULTILIB_REQUIRED += *march=armv7ve/mfpu=vfpv4-d16/mfloat-abi=*
++MULTILIB_REQUIRED += *march=armv7ve/mfpu=neon-vfpv4/mfloat-abi=*
++
++# ARMv8-A
++MULTILIB_REQUIRED += *march=armv8-a
++MULTILIB_REQUIRED += *march=armv8-a/mfpu=neon-fp-armv8/mfloat-abi=*
++
+
+ # CPU Matches
+ MULTILIB_MATCHES += march?armv7-a=mcpu?cortex-a8
+ MULTILIB_MATCHES += march?armv7-a=mcpu?cortex-a9
+ MULTILIB_MATCHES += march?armv7-a=mcpu?cortex-a5
++MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a7
+ MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a15
+ MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a12
+ MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a17
+@@ -93,6 +88,9 @@ MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a57
+ MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a57.cortex-a53
+ MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a72
+ MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a72.cortex-a53
++MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a73
++MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a73.cortex-a35
++MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a73.cortex-a53
+ MULTILIB_MATCHES += march?armv8-a=mcpu?exynos-m1
+ MULTILIB_MATCHES += march?armv8-a=mcpu?qdf24xx
+ MULTILIB_MATCHES += march?armv8-a=mcpu?xgene1
+@@ -101,13 +99,20 @@ MULTILIB_MATCHES += march?armv8-a=mcpu?xgene1
+ MULTILIB_MATCHES += march?armv8-a=march?armv8-a+crc
+ MULTILIB_MATCHES += march?armv8-a=march?armv8.1-a
+ MULTILIB_MATCHES += march?armv8-a=march?armv8.1-a+crc
++MULTILIB_MATCHES += march?armv8-a=march?armv8.2-a
++MULTILIB_MATCHES += march?armv8-a=march?armv8.2-a+fp16
+
+ # FPU matches
+ MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3
+ MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3-fp16
+-MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3-fp16-d16
++MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3-d16-fp16
++MULTILIB_MATCHES += mfpu?neon=mfpu?neon-fp16
+ MULTILIB_MATCHES += mfpu?vfpv4-d16=mfpu?vfpv4
++MULTILIB_MATCHES += mfpu?vfpv4-d16=mfpu?fpv5-d16
++MULTILIB_MATCHES += mfpu?vfpv4-d16=mfpu?fp-armv8
+ MULTILIB_MATCHES += mfpu?neon-fp-armv8=mfpu?crypto-neon-fp-armv8
++MULTILIB_MATCHES += mfpu?vfp=mfpu?vfpv2
++MULTILIB_MATCHES += mfpu?neon=mfpu?neon-vfpv3
+
+
+ # Map all requests for vfpv3 with a later CPU to vfpv3-d16 v7-a.
+@@ -124,10 +129,6 @@ MULTILIB_REUSE += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv8
+ MULTILIB_REUSE += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv8-a/mfpu.vfpv3-d16/mfloat-abi.softfp
+ MULTILIB_REUSE += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.hard
+ MULTILIB_REUSE += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.softfp
+-MULTILIB_REUSE += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7-a/mfpu.fp-armv8/mfloat-abi.hard
+-MULTILIB_REUSE += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7-a/mfpu.fp-armv8/mfloat-abi.softfp
+-MULTILIB_REUSE += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7-a/mfpu.vfpv4/mfloat-abi.hard
+-MULTILIB_REUSE += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7-a/mfpu.vfpv4/mfloat-abi.softfp
+
+
+ MULTILIB_REUSE += march.armv7-a/mfpu.neon/mfloat-abi.hard=march.armv7ve/mfpu.neon/mfloat-abi.hard
+@@ -140,10 +141,6 @@ MULTILIB_REUSE += march.armv7-a/mfpu.neon/mfloat-abi.hard=march.armv7-a/mf
+ MULTILIB_REUSE += march.armv7-a/mfpu.neon/mfloat-abi.softfp=march.armv7-a/mfpu.neon-fp-armv8/mfloat-abi.softfp
+
+
+-MULTILIB_REUSE += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=march.armv7ve/mfpu.fp-armv8/mfloat-abi.hard
+-MULTILIB_REUSE += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=march.armv7ve/mfpu.fp-armv8/mfloat-abi.softfp
+-MULTILIB_REUSE += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=march.armv8-a/mfpu.vfpv4/mfloat-abi.hard
+-MULTILIB_REUSE += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=march.armv8-a/mfpu.vfpv4/mfloat-abi.softfp
+ MULTILIB_REUSE += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.hard
+ MULTILIB_REUSE += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.softfp
+
+@@ -163,10 +160,6 @@ MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthu
+ MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.vfpv3-d16/mfloat-abi.softfp
+ MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.hard
+ MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.softfp
+-MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.fp-armv8/mfloat-abi.hard
+-MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.fp-armv8/mfloat-abi.softfp
+-MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.vfpv4/mfloat-abi.hard
+-MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.vfpv4/mfloat-abi.softfp
+
+
+ MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.hard=mthumb/march.armv7ve/mfpu.neon/mfloat-abi.hard
+@@ -179,10 +172,6 @@ MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.hard=mthumb/ma
+ MULTILIB_REUSE += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.neon-fp-armv8/mfloat-abi.softfp
+
+
+-MULTILIB_REUSE += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=mthumb/march.armv7ve/mfpu.fp-armv8/mfloat-abi.hard
+-MULTILIB_REUSE += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=mthumb/march.armv7ve/mfpu.fp-armv8/mfloat-abi.softfp
+-MULTILIB_REUSE += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=mthumb/march.armv8-a/mfpu.vfpv4/mfloat-abi.hard
+-MULTILIB_REUSE += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.vfpv4/mfloat-abi.softfp
+ MULTILIB_REUSE += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=mthumb/march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.hard
+ MULTILIB_REUSE += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.softfp
+
+--- a/src/gcc/config/arm/t-arm
++++ b/src/gcc/config/arm/t-arm
+@@ -95,7 +95,8 @@ arm.o: $(srcdir)/config/arm/arm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+ $(srcdir)/config/arm/arm-cores.def \
+ $(srcdir)/config/arm/arm-arches.def $(srcdir)/config/arm/arm-fpus.def \
+ $(srcdir)/config/arm/arm-protos.h \
+- $(srcdir)/config/arm/arm_neon_builtins.def
++ $(srcdir)/config/arm/arm_neon_builtins.def \
++ $(srcdir)/config/arm/arm_vfp_builtins.def
+
+ arm-builtins.o: $(srcdir)/config/arm/arm-builtins.c $(CONFIG_H) \
+ $(SYSTEM_H) coretypes.h $(TM_H) \
+@@ -103,6 +104,7 @@ arm-builtins.o: $(srcdir)/config/arm/arm-builtins.c $(CONFIG_H) \
+ $(DIAGNOSTIC_CORE_H) $(OPTABS_H) \
+ $(srcdir)/config/arm/arm-protos.h \
+ $(srcdir)/config/arm/arm_neon_builtins.def \
++ $(srcdir)/config/arm/arm_vfp_builtins.def \
+ $(srcdir)/config/arm/arm-simd-builtin-types.def
+ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ $(srcdir)/config/arm/arm-builtins.c
+--- /dev/null
++++ b/src/gcc/config/arm/t-rmprofile
+@@ -0,0 +1,176 @@
++# Copyright (C) 2016 Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++#
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3. If not see
++# <http://www.gnu.org/licenses/>.
++
++# This is a target makefile fragment that attempts to get
++# multilibs built for the range of CPU's, FPU's and ABI's that
++# are relevant for the ARM architecture. It should not be used in
++# conjunction with another make file fragment and assumes --with-arch,
++# --with-cpu, --with-fpu, --with-float, --with-mode have their default
++# values during the configure step. We enforce this during the
++# top-level configury.
++
++MULTILIB_OPTIONS =
++MULTILIB_DIRNAMES =
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES =
++MULTILIB_REUSE =
++
++# We have the following hierachy:
++# ISA: A32 (.) or T16/T32 (thumb).
++# Architecture: ARMv6S-M (v6-m), ARMv7-M (v7-m), ARMv7E-M (v7e-m),
++# ARMv8-M Baseline (v8-m.base) or ARMv8-M Mainline (v8-m.main).
++# FPU: VFPv3-D16 (fpv3), FPV4-SP-D16 (fpv4-sp), FPV5-SP-D16 (fpv5-sp),
++# VFPv5-D16 (fpv5), or None (.).
++# Float-abi: Soft (.), softfp (softfp), or hard (hardfp).
++
++# Options to build libraries with
++
++MULTILIB_OPTIONS += mthumb
++MULTILIB_DIRNAMES += thumb
++
++MULTILIB_OPTIONS += march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7/march=armv8-m.base/march=armv8-m.main
++MULTILIB_DIRNAMES += v6-m v7-m v7e-m v7-ar v8-m.base v8-m.main
++
++MULTILIB_OPTIONS += mfpu=vfpv3-d16/mfpu=fpv4-sp-d16/mfpu=fpv5-sp-d16/mfpu=fpv5-d16
++MULTILIB_DIRNAMES += fpv3 fpv4-sp fpv5-sp fpv5
++
++MULTILIB_OPTIONS += mfloat-abi=softfp/mfloat-abi=hard
++MULTILIB_DIRNAMES += softfp hard
++
++
++# Option combinations to build library with
++
++# Default CPU/Arch
++MULTILIB_REQUIRED += mthumb
++MULTILIB_REQUIRED += mfloat-abi=hard
++
++# ARMv6-M
++MULTILIB_REQUIRED += mthumb/march=armv6s-m
++
++# ARMv8-M Baseline
++MULTILIB_REQUIRED += mthumb/march=armv8-m.base
++
++# ARMv7-M
++MULTILIB_REQUIRED += mthumb/march=armv7-m
++
++# ARMv7E-M
++MULTILIB_REQUIRED += mthumb/march=armv7e-m
++MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv4-sp-d16/mfloat-abi=softfp
++MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
++MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv5-d16/mfloat-abi=softfp
++MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv5-d16/mfloat-abi=hard
++MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv5-sp-d16/mfloat-abi=softfp
++MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv5-sp-d16/mfloat-abi=hard
++
++# ARMv8-M Mainline
++MULTILIB_REQUIRED += mthumb/march=armv8-m.main
++MULTILIB_REQUIRED += mthumb/march=armv8-m.main/mfpu=fpv5-d16/mfloat-abi=softfp
++MULTILIB_REQUIRED += mthumb/march=armv8-m.main/mfpu=fpv5-d16/mfloat-abi=hard
++MULTILIB_REQUIRED += mthumb/march=armv8-m.main/mfpu=fpv5-sp-d16/mfloat-abi=softfp
++MULTILIB_REQUIRED += mthumb/march=armv8-m.main/mfpu=fpv5-sp-d16/mfloat-abi=hard
++
++# ARMv7-R as well as ARMv7-A and ARMv8-A if aprofile was not specified
++MULTILIB_REQUIRED += mthumb/march=armv7
++MULTILIB_REQUIRED += mthumb/march=armv7/mfpu=vfpv3-d16/mfloat-abi=softfp
++MULTILIB_REQUIRED += mthumb/march=armv7/mfpu=vfpv3-d16/mfloat-abi=hard
++
++
++# Matches
++
++# CPU Matches
++MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0
++MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0.small-multiply
++MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0plus
++MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0plus.small-multiply
++MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m1
++MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m1.small-multiply
++MULTILIB_MATCHES += march?armv7-m=mcpu?cortex-m3
++MULTILIB_MATCHES += march?armv7e-m=mcpu?cortex-m4
++MULTILIB_MATCHES += march?armv7e-m=mcpu?cortex-m7
++MULTILIB_MATCHES += march?armv8-m.base=mcpu?cortex-m23
++MULTILIB_MATCHES += march?armv8-m.main=mcpu?cortex-m33
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4f
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-r5
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-r7
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-r8
++MULTILIB_MATCHES += march?armv7=mcpu?marvell-pj4
++MULTILIB_MATCHES += march?armv7=mcpu?generic-armv7-a
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a8
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a9
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a5
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a7
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a15
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a12
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a17
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a15.cortex-a7
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a17.cortex-a7
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a32
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a35
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a53
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a57
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a57.cortex-a53
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a72
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a72.cortex-a53
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a73
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a73.cortex-a35
++MULTILIB_MATCHES += march?armv7=mcpu?cortex-a73.cortex-a53
++MULTILIB_MATCHES += march?armv7=mcpu?exynos-m1
++MULTILIB_MATCHES += march?armv7=mcpu?qdf24xx
++MULTILIB_MATCHES += march?armv7=mcpu?xgene1
++
++# Arch Matches
++MULTILIB_MATCHES += march?armv6s-m=march?armv6-m
++MULTILIB_MATCHES += march?armv8-m.main=march?armv8-m.main+dsp
++MULTILIB_MATCHES += march?armv7=march?armv7-r
++ifeq (,$(HAS_APROFILE))
++MULTILIB_MATCHES += march?armv7=march?armv7-a
++MULTILIB_MATCHES += march?armv7=march?armv7ve
++MULTILIB_MATCHES += march?armv7=march?armv8-a
++MULTILIB_MATCHES += march?armv7=march?armv8-a+crc
++MULTILIB_MATCHES += march?armv7=march?armv8.1-a
++MULTILIB_MATCHES += march?armv7=march?armv8.1-a+crc
++MULTILIB_MATCHES += march?armv7=march?armv8.2-a
++MULTILIB_MATCHES += march?armv7=march?armv8.2-a+fp16
++endif
++
++# FPU matches
++ifeq (,$(HAS_APROFILE))
++MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3
++MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3-fp16
++MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3-d16-fp16
++MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?neon
++MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?neon-fp16
++MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv4
++MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv4-d16
++MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?neon-vfpv4
++MULTILIB_MATCHES += mfpu?fpv5-d16=mfpu?fp-armv8
++MULTILIB_MATCHES += mfpu?fpv5-d16=mfpu?neon-fp-armv8
++MULTILIB_MATCHES += mfpu?fpv5-d16=mfpu?crypto-neon-fp-armv8
++endif
++
++
++# We map all requests for ARMv7-R or ARMv7-A in ARM mode to Thumb mode and
++# any FPU to VFPv3-d16 if possible.
++MULTILIB_REUSE += mthumb/march.armv7=march.armv7
++MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7/mfpu.vfpv3-d16/mfloat-abi.softfp
++MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7/mfpu.vfpv3-d16/mfloat-abi.hard
++MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7/mfpu.fpv5-d16/mfloat-abi.softfp
++MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7/mfpu.fpv5-d16/mfloat-abi.hard
++MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7/mfpu.fpv5-d16/mfloat-abi.softfp
++MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7/mfpu.fpv5-d16/mfloat-abi.hard
+--- a/src/gcc/config/arm/thumb1.md
++++ b/src/gcc/config/arm/thumb1.md
+@@ -55,6 +55,10 @@
+ (set_attr "type" "multiple")]
+ )
+
++;; Changes to the constraints of this pattern must be propagated to those of
++;; atomic additions in sync.md and to the logic for bind_old_new in
++;; arm_split_atomic_op in arm.c. These must be at least as strict as the
++;; constraints here and aim to be as permissive.
+ (define_insn_and_split "*thumb1_addsi3"
+ [(set (match_operand:SI 0 "register_operand" "=l,l,l,*rk,*hk,l,k,l,l,l")
+ (plus:SI (match_operand:SI 1 "register_operand" "%0,0,l,*0,*0,k,k,0,l,k")
+@@ -114,8 +118,8 @@
+ (set (match_dup 0)
+ (plus:SI (match_dup 0) (reg:SI SP_REGNUM)))]
+ "TARGET_THUMB1
+- && (unsigned HOST_WIDE_INT) (INTVAL (operands[1])) < 1024
+- && (INTVAL (operands[1]) & 3) == 0"
++ && UINTVAL (operands[1]) < 1024
++ && (UINTVAL (operands[1]) & 3) == 0"
+ [(set (match_dup 0) (plus:SI (reg:SI SP_REGNUM) (match_dup 1)))]
+ ""
+ )
+@@ -131,6 +135,10 @@
+ (set_attr "type" "multiple")]
+ )
+
++;; Changes to the constraints of this pattern must be propagated to those of
++;; atomic subtractions in sync.md and to the logic for bind_old_new in
++;; arm_split_atomic_op in arm.c. These must be at least as strict as the
++;; constraints here and aim to be as permissive.
+ (define_insn "thumb1_subsi3_insn"
+ [(set (match_operand:SI 0 "register_operand" "=l")
+ (minus:SI (match_operand:SI 1 "register_operand" "l")
+@@ -142,11 +150,11 @@
+ (set_attr "type" "alus_sreg")]
+ )
+
+-; Unfortunately with the Thumb the '&'/'0' trick can fails when operands
+-; 1 and 2; are the same, because reload will make operand 0 match
+-; operand 1 without realizing that this conflicts with operand 2. We fix
+-; this by adding another alternative to match this case, and then `reload'
+-; it ourselves. This alternative must come first.
++;; Unfortunately on Thumb the '&'/'0' trick can fail when operands
++;; 1 and 2 are the same, because reload will make operand 0 match
++;; operand 1 without realizing that this conflicts with operand 2. We fix
++;; this by adding another alternative to match this case, and then `reload'
++;; it ourselves. This alternative must come first.
+ (define_insn "*thumb_mulsi3"
+ [(set (match_operand:SI 0 "register_operand" "=&l,&l,&l")
+ (mult:SI (match_operand:SI 1 "register_operand" "%l,*h,0")
+@@ -173,6 +181,10 @@
+ (set_attr "type" "muls")]
+ )
+
++;; Changes to the constraints of this pattern must be propagated to those of
++;; atomic bitwise ANDs and NANDs in sync.md and to the logic for bind_old_new
++;; in arm_split_atomic_op in arm.c. These must be at least as strict as the
++;; constraints here and aim to be as permissive.
+ (define_insn "*thumb1_andsi3_insn"
+ [(set (match_operand:SI 0 "register_operand" "=l")
+ (and:SI (match_operand:SI 1 "register_operand" "%0")
+@@ -227,6 +239,10 @@
+ (set_attr "type" "logics_reg")]
+ )
+
++;; Changes to the constraints of this pattern must be propagated to those of
++;; atomic inclusive ORs in sync.md and to the logic for bind_old_new in
++;; arm_split_atomic_op in arm.c. These must be at least as strict as the
++;; constraints here and aim to be as permissive.
+ (define_insn "*thumb1_iorsi3_insn"
+ [(set (match_operand:SI 0 "register_operand" "=l")
+ (ior:SI (match_operand:SI 1 "register_operand" "%0")
+@@ -237,6 +253,10 @@
+ (set_attr "conds" "set")
+ (set_attr "type" "logics_reg")])
+
++;; Changes to the constraints of this pattern must be propagated to those of
++;; atomic exclusive ORs in sync.md and to the logic for bind_old_new in
++;; arm_split_atomic_op in arm.c. These must be at least as strict as the
++;; constraints here and aim to be as permissive.
+ (define_insn "*thumb1_xorsi3_insn"
+ [(set (match_operand:SI 0 "register_operand" "=l")
+ (xor:SI (match_operand:SI 1 "register_operand" "%0")
+@@ -590,8 +610,8 @@
+ ;;; ??? The 'i' constraint looks funny, but it should always be replaced by
+ ;;; thumb_reorg with a memory reference.
+ (define_insn "*thumb1_movdi_insn"
+- [(set (match_operand:DI 0 "nonimmediate_operand" "=l,l,l,l,>,l, m,*r")
+- (match_operand:DI 1 "general_operand" "l, I,J,>,l,mi,l,*r"))]
++ [(set (match_operand:DI 0 "nonimmediate_operand" "=l,l,l,r,l,>,l, m,*r")
++ (match_operand:DI 1 "general_operand" "l, I,J,j,>,l,mi,l,*r"))]
+ "TARGET_THUMB1
+ && ( register_operand (operands[0], DImode)
+ || register_operand (operands[1], DImode))"
+@@ -610,36 +630,41 @@
+ operands[1] = GEN_INT (- INTVAL (operands[1]));
+ return \"movs\\t%Q0, %1\;rsbs\\t%Q0, %Q0, #0\;asrs\\t%R0, %Q0, #31\";
+ case 3:
+- return \"ldmia\\t%1, {%0, %H0}\";
++ gcc_assert (TARGET_HAVE_MOVT);
++ return \"movw\\t%Q0, %L1\;movs\\tR0, #0\";
+ case 4:
+- return \"stmia\\t%0, {%1, %H1}\";
++ return \"ldmia\\t%1, {%0, %H0}\";
+ case 5:
+- return thumb_load_double_from_address (operands);
++ return \"stmia\\t%0, {%1, %H1}\";
+ case 6:
++ return thumb_load_double_from_address (operands);
++ case 7:
+ operands[2] = gen_rtx_MEM (SImode,
+ plus_constant (Pmode, XEXP (operands[0], 0), 4));
+ output_asm_insn (\"str\\t%1, %0\;str\\t%H1, %2\", operands);
+ return \"\";
+- case 7:
++ case 8:
+ if (REGNO (operands[1]) == REGNO (operands[0]) + 1)
+ return \"mov\\t%0, %1\;mov\\t%H0, %H1\";
+ return \"mov\\t%H0, %H1\;mov\\t%0, %1\";
+ }
+ }"
+- [(set_attr "length" "4,4,6,2,2,6,4,4")
+- (set_attr "type" "multiple,multiple,multiple,load2,store2,load2,store2,multiple")
+- (set_attr "pool_range" "*,*,*,*,*,1018,*,*")]
++ [(set_attr "length" "4,4,6,6,2,2,6,4,4")
++ (set_attr "type" "multiple,multiple,multiple,multiple,load2,store2,load2,store2,multiple")
++ (set_attr "arch" "t1,t1,t1,v8mb,t1,t1,t1,t1,t1")
++ (set_attr "pool_range" "*,*,*,*,*,*,1018,*,*")]
+ )
+
+ (define_insn "*thumb1_movsi_insn"
+- [(set (match_operand:SI 0 "nonimmediate_operand" "=l,l,l,l,l,>,l, m,*l*h*k")
+- (match_operand:SI 1 "general_operand" "l, I,J,K,>,l,mi,l,*l*h*k"))]
++ [(set (match_operand:SI 0 "nonimmediate_operand" "=l,l,r,l,l,l,>,l, m,*l*h*k")
++ (match_operand:SI 1 "general_operand" "l, I,j,J,K,>,l,mi,l,*l*h*k"))]
+ "TARGET_THUMB1
+ && ( register_operand (operands[0], SImode)
+ || register_operand (operands[1], SImode))"
+ "@
+ movs %0, %1
+ movs %0, %1
++ movw %0, %1
+ #
+ #
+ ldmia\\t%1, {%0}
+@@ -647,10 +672,11 @@
+ ldr\\t%0, %1
+ str\\t%1, %0
+ mov\\t%0, %1"
+- [(set_attr "length" "2,2,4,4,2,2,2,2,2")
+- (set_attr "type" "mov_reg,mov_imm,multiple,multiple,load1,store1,load1,store1,mov_reg")
+- (set_attr "pool_range" "*,*,*,*,*,*,1018,*,*")
+- (set_attr "conds" "set,clob,*,*,nocond,nocond,nocond,nocond,nocond")])
++ [(set_attr "length" "2,2,4,4,4,2,2,2,2,2")
++ (set_attr "type" "mov_reg,mov_imm,mov_imm,multiple,multiple,load1,store1,load1,store1,mov_reg")
++ (set_attr "pool_range" "*,*,*,*,*,*,*,1018,*,*")
++ (set_attr "arch" "t1,t1,v8mb,t1,t1,t1,t1,t1,t1,t1")
++ (set_attr "conds" "set,clob,nocond,*,*,nocond,nocond,nocond,nocond,nocond")])
+
+ ; Split the load of 64-bit constant into two loads for high and low 32-bit parts respectively
+ ; to see if we can load them in fewer instructions or fewer cycles.
+@@ -687,7 +713,8 @@
+ (define_split
+ [(set (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "const_int_operand" ""))]
+- "TARGET_THUMB1 && satisfies_constraint_K (operands[1])"
++ "TARGET_THUMB1 && satisfies_constraint_K (operands[1])
++ && !(TARGET_HAVE_MOVT && satisfies_constraint_j (operands[1]))"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (ashift:SI (match_dup 2) (match_dup 3)))]
+ "
+@@ -714,7 +741,8 @@
+ (define_split
+ [(set (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "const_int_operand" ""))]
+- "TARGET_THUMB1 && satisfies_constraint_Pe (operands[1])"
++ "TARGET_THUMB1 && satisfies_constraint_Pe (operands[1])
++ && !(TARGET_HAVE_MOVT && satisfies_constraint_j (operands[1]))"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (plus:SI (match_dup 2) (match_dup 3)))]
+ "
+@@ -726,8 +754,8 @@
+ )
+
+ (define_insn "*thumb1_movhi_insn"
+- [(set (match_operand:HI 0 "nonimmediate_operand" "=l,l,m,l*r,*h,l")
+- (match_operand:HI 1 "general_operand" "l,m,l,k*h,*r,I"))]
++ [(set (match_operand:HI 0 "nonimmediate_operand" "=l,l,m,l*r,*h,l,r")
++ (match_operand:HI 1 "general_operand" "l,m,l,k*h,*r,I,n"))]
+ "TARGET_THUMB1
+ && ( register_operand (operands[0], HImode)
+ || register_operand (operands[1], HImode))"
+@@ -739,6 +767,8 @@
+ case 3: return \"mov %0, %1\";
+ case 4: return \"mov %0, %1\";
+ case 5: return \"movs %0, %1\";
++ case 6: gcc_assert (TARGET_HAVE_MOVT);
++ return \"movw %0, %L1\";
+ default: gcc_unreachable ();
+ case 1:
+ /* The stack pointer can end up being taken as an index register.
+@@ -758,9 +788,10 @@
+ }
+ return \"ldrh %0, %1\";
+ }"
+- [(set_attr "length" "2,4,2,2,2,2")
+- (set_attr "type" "alus_imm,load1,store1,mov_reg,mov_reg,mov_imm")
+- (set_attr "conds" "clob,nocond,nocond,nocond,nocond,clob")])
++ [(set_attr "length" "2,4,2,2,2,2,4")
++ (set_attr "type" "alus_imm,load1,store1,mov_reg,mov_reg,mov_imm,mov_imm")
++ (set_attr "arch" "t1,t1,t1,t1,t1,t1,v8mb")
++ (set_attr "conds" "clob,nocond,nocond,nocond,nocond,clob,nocond")])
+
+ (define_expand "thumb_movhi_clobber"
+ [(set (match_operand:HI 0 "memory_operand" "")
+@@ -963,6 +994,94 @@
+ DONE;
+ })
+
++;; A pattern for the CB(N)Z instruction added in ARMv8-M Baseline profile,
++;; adapted from cbranchsi4_insn. Modifying cbranchsi4_insn instead leads to
++;; code generation difference for ARMv6-M because the minimum length of the
++;; instruction becomes 2 even for ARMv6-M due to a limitation in genattrtab's
++;; handling of PC in the length condition.
++(define_insn "thumb1_cbz"
++ [(set (pc) (if_then_else
++ (match_operator 0 "equality_operator"
++ [(match_operand:SI 1 "s_register_operand" "l")
++ (const_int 0)])
++ (label_ref (match_operand 2 "" ""))
++ (pc)))]
++ "TARGET_THUMB1 && TARGET_HAVE_CBZ"
++{
++ if (get_attr_length (insn) == 2)
++ {
++ if (GET_CODE (operands[0]) == EQ)
++ return "cbz\t%1, %l2";
++ else
++ return "cbnz\t%1, %l2";
++ }
++ else
++ {
++ rtx t = cfun->machine->thumb1_cc_insn;
++ if (t != NULL_RTX)
++ {
++ if (!rtx_equal_p (cfun->machine->thumb1_cc_op0, operands[1])
++ || !rtx_equal_p (cfun->machine->thumb1_cc_op1, operands[2]))
++ t = NULL_RTX;
++ if (cfun->machine->thumb1_cc_mode == CC_NOOVmode)
++ {
++ if (!noov_comparison_operator (operands[0], VOIDmode))
++ t = NULL_RTX;
++ }
++ else if (cfun->machine->thumb1_cc_mode != CCmode)
++ t = NULL_RTX;
++ }
++ if (t == NULL_RTX)
++ {
++ output_asm_insn ("cmp\t%1, #0", operands);
++ cfun->machine->thumb1_cc_insn = insn;
++ cfun->machine->thumb1_cc_op0 = operands[1];
++ cfun->machine->thumb1_cc_op1 = operands[2];
++ cfun->machine->thumb1_cc_mode = CCmode;
++ }
++ else
++ /* Ensure we emit the right type of condition code on the jump. */
++ XEXP (operands[0], 0) = gen_rtx_REG (cfun->machine->thumb1_cc_mode,
++ CC_REGNUM);
++
++ switch (get_attr_length (insn))
++ {
++ case 4: return "b%d0\t%l2";
++ case 6: return "b%D0\t.LCB%=;b\t%l2\t%@long jump\n.LCB%=:";
++ case 8: return "b%D0\t.LCB%=;bl\t%l2\t%@far jump\n.LCB%=:";
++ default: gcc_unreachable ();
++ }
++ }
++}
++ [(set (attr "far_jump")
++ (if_then_else
++ (eq_attr "length" "8")
++ (const_string "yes")
++ (const_string "no")))
++ (set (attr "length")
++ (if_then_else
++ (and (ge (minus (match_dup 2) (pc)) (const_int 2))
++ (le (minus (match_dup 2) (pc)) (const_int 128)))
++ (const_int 2)
++ (if_then_else
++ (and (ge (minus (match_dup 2) (pc)) (const_int -250))
++ (le (minus (match_dup 2) (pc)) (const_int 256)))
++ (const_int 4)
++ (if_then_else
++ (and (ge (minus (match_dup 2) (pc)) (const_int -2040))
++ (le (minus (match_dup 2) (pc)) (const_int 2048)))
++ (const_int 6)
++ (const_int 8)))))
++ (set (attr "type")
++ (if_then_else
++ (eq_attr "length" "2")
++ (const_string "branch")
++ (const_string "multiple")))]
++)
++
++;; Changes to the constraints of this pattern must be propagated to those of
++;; atomic compare_and_swap splitters in sync.md. These must be at least as
++;; strict as the constraints here and aim to be as permissive.
+ (define_insn "cbranchsi4_insn"
+ [(set (pc) (if_then_else
+ (match_operator 0 "arm_comparison_operator"
+@@ -1024,6 +1143,9 @@
+ (set_attr "type" "multiple")]
+ )
+
++;; Changes to the constraints of this pattern must be propagated to those of
++;; atomic compare_and_swap splitters in sync.md. These must be at least as
++;; strict as the constraints here and aim to be as permissive.
+ (define_insn "cbranchsi4_scratch"
+ [(set (pc) (if_then_else
+ (match_operator 4 "arm_comparison_operator"
+@@ -1609,6 +1731,19 @@
+ (set_attr "type" "call")]
+ )
+
++(define_insn "*nonsecure_call_reg_thumb1_v5"
++ [(call (unspec:SI [(mem:SI (match_operand:SI 0 "register_operand" "l*r"))]
++ UNSPEC_NONSECURE_MEM)
++ (match_operand 1 "" ""))
++ (use (match_operand 2 "" ""))
++ (clobber (reg:SI LR_REGNUM))
++ (clobber (match_dup 0))]
++ "TARGET_THUMB1 && use_cmse && !SIBLING_CALL_P (insn)"
++ "bl\\t__gnu_cmse_nonsecure_call"
++ [(set_attr "length" "4")
++ (set_attr "type" "call")]
++)
++
+ (define_insn "*call_reg_thumb1"
+ [(call (mem:SI (match_operand:SI 0 "register_operand" "l*r"))
+ (match_operand 1 "" ""))
+@@ -1641,6 +1776,21 @@
+ (set_attr "type" "call")]
+ )
+
++(define_insn "*nonsecure_call_value_reg_thumb1_v5"
++ [(set (match_operand 0 "" "")
++ (call (unspec:SI
++ [(mem:SI (match_operand:SI 1 "register_operand" "l*r"))]
++ UNSPEC_NONSECURE_MEM)
++ (match_operand 2 "" "")))
++ (use (match_operand 3 "" ""))
++ (clobber (reg:SI LR_REGNUM))
++ (clobber (match_dup 1))]
++ "TARGET_THUMB1 && use_cmse"
++ "bl\\t__gnu_cmse_nonsecure_call"
++ [(set_attr "length" "4")
++ (set_attr "type" "call")]
++)
++
+ (define_insn "*call_value_reg_thumb1"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:SI 1 "register_operand" "l*r"))
+@@ -1747,8 +1897,13 @@
+ "*
+ return thumb1_unexpanded_epilogue ();
+ "
+- ; Length is absolute worst case
+- [(set_attr "length" "44")
++ ; Length is absolute worst case, when using CMSE and if this is an entry
++ ; function an extra 4 (MSR) bytes will be added.
++ [(set (attr "length")
++ (if_then_else
++ (match_test "IS_CMSE_ENTRY (arm_current_func_type ())")
++ (const_int 48)
++ (const_int 44)))
+ (set_attr "type" "block")
+ ;; We don't clobber the conditions, but the potential length of this
+ ;; operation is sufficient to make conditionalizing the sequence
+--- a/src/gcc/config/arm/thumb2.md
++++ b/src/gcc/config/arm/thumb2.md
+@@ -125,32 +125,6 @@
+ (set_attr "type" "multiple")]
+ )
+
+-;; Thumb-2 does not have rsc, so use a clever trick with shifter operands.
+-(define_insn_and_split "*thumb2_negdi2"
+- [(set (match_operand:DI 0 "s_register_operand" "=&r,r")
+- (neg:DI (match_operand:DI 1 "s_register_operand" "?r,0")))
+- (clobber (reg:CC CC_REGNUM))]
+- "TARGET_THUMB2"
+- "#" ; negs\\t%Q0, %Q1\;sbc\\t%R0, %R1, %R1, lsl #1
+- "&& reload_completed"
+- [(parallel [(set (reg:CC CC_REGNUM)
+- (compare:CC (const_int 0) (match_dup 1)))
+- (set (match_dup 0) (minus:SI (const_int 0) (match_dup 1)))])
+- (set (match_dup 2) (minus:SI (minus:SI (match_dup 3)
+- (ashift:SI (match_dup 3)
+- (const_int 1)))
+- (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))]
+- {
+- operands[2] = gen_highpart (SImode, operands[0]);
+- operands[0] = gen_lowpart (SImode, operands[0]);
+- operands[3] = gen_highpart (SImode, operands[1]);
+- operands[1] = gen_lowpart (SImode, operands[1]);
+- }
+- [(set_attr "conds" "clob")
+- (set_attr "length" "8")
+- (set_attr "type" "multiple")]
+-)
+-
+ (define_insn_and_split "*thumb2_abssi2"
+ [(set (match_operand:SI 0 "s_register_operand" "=&r,l,r")
+ (abs:SI (match_operand:SI 1 "s_register_operand" "r,0,0")))
+@@ -278,8 +252,7 @@
+ (define_insn "*thumb2_movsi_insn"
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,l,r,r,l ,*hk,m,*m")
+ (match_operand:SI 1 "general_operand" "rk,I,Py,K,j,mi,*mi,l,*hk"))]
+- "TARGET_THUMB2 && ! TARGET_IWMMXT
+- && !(TARGET_HARD_FLOAT && TARGET_VFP)
++ "TARGET_THUMB2 && !TARGET_IWMMXT && !TARGET_HARD_FLOAT
+ && ( register_operand (operands[0], SImode)
+ || register_operand (operands[1], SImode))"
+ "@
+@@ -581,6 +554,19 @@
+ [(set_attr "type" "call")]
+ )
+
++(define_insn "*nonsecure_call_reg_thumb2"
++ [(call (unspec:SI [(mem:SI (match_operand:SI 0 "s_register_operand" "r"))]
++ UNSPEC_NONSECURE_MEM)
++ (match_operand 1 "" ""))
++ (use (match_operand 2 "" ""))
++ (clobber (reg:SI LR_REGNUM))
++ (clobber (match_dup 0))]
++ "TARGET_THUMB2 && use_cmse"
++ "bl\\t__gnu_cmse_nonsecure_call"
++ [(set_attr "length" "4")
++ (set_attr "type" "call")]
++)
++
+ (define_insn "*call_value_reg_thumb2"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:SI 1 "register_operand" "l*r"))
+@@ -592,6 +578,21 @@
+ [(set_attr "type" "call")]
+ )
+
++(define_insn "*nonsecure_call_value_reg_thumb2"
++ [(set (match_operand 0 "" "")
++ (call
++ (unspec:SI [(mem:SI (match_operand:SI 1 "register_operand" "l*r"))]
++ UNSPEC_NONSECURE_MEM)
++ (match_operand 2 "" "")))
++ (use (match_operand 3 "" ""))
++ (clobber (reg:SI LR_REGNUM))
++ (clobber (match_dup 1))]
++ "TARGET_THUMB2 && use_cmse"
++ "bl\t__gnu_cmse_nonsecure_call"
++ [(set_attr "length" "4")
++ (set_attr "type" "call")]
++)
++
+ (define_insn "*thumb2_indirect_jump"
+ [(set (pc)
+ (match_operand:SI 0 "register_operand" "l*r"))]
+@@ -1115,12 +1116,31 @@
+
+ (define_insn "*thumb2_return"
+ [(simple_return)]
+- "TARGET_THUMB2"
++ "TARGET_THUMB2 && !IS_CMSE_ENTRY (arm_current_func_type ())"
+ "* return output_return_instruction (const_true_rtx, true, false, true);"
+ [(set_attr "type" "branch")
+ (set_attr "length" "4")]
+ )
+
++(define_insn "*thumb2_cmse_entry_return"
++ [(simple_return)]
++ "TARGET_THUMB2 && IS_CMSE_ENTRY (arm_current_func_type ())"
++ "* return output_return_instruction (const_true_rtx, true, false, true);"
++ [(set_attr "type" "branch")
++ ; This is a return from a cmse_nonsecure_entry function so code will be
++ ; added to clear the APSR and potentially the FPSCR if VFP is available, so
++ ; we adapt the length accordingly.
++ (set (attr "length")
++ (if_then_else (match_test "TARGET_HARD_FLOAT")
++ (const_int 12)
++ (const_int 8)))
++ ; We do not support predicate execution of returns from cmse_nonsecure_entry
++ ; functions because we need to clear the APSR. Since predicable has to be
++ ; a constant, we had to duplicate the thumb2_return pattern for CMSE entry
++ ; functions.
++ (set_attr "predicable" "no")]
++)
++
+ (define_insn_and_split "thumb2_eh_return"
+ [(unspec_volatile [(match_operand:SI 0 "s_register_operand" "r")]
+ VUNSPEC_EH_RETURN)
+--- a/src/gcc/config/arm/types.md
++++ b/src/gcc/config/arm/types.md
+@@ -51,6 +51,7 @@
+ ; alus_shift_imm as alu_shift_imm, setting condition flags.
+ ; alus_shift_reg as alu_shift_reg, setting condition flags.
+ ; bfm bitfield move operation.
++; bfx bitfield extract operation.
+ ; block blockage insn, this blocks all functional units.
+ ; branch branch.
+ ; call subroutine call.
+@@ -557,6 +558,7 @@
+ alus_shift_imm,\
+ alus_shift_reg,\
+ bfm,\
++ bfx,\
+ block,\
+ branch,\
+ call,\
+--- a/src/gcc/config/arm/unspecs.md
++++ b/src/gcc/config/arm/unspecs.md
+@@ -84,6 +84,8 @@
+ UNSPEC_VRINTA ; Represent a float to integral float rounding
+ ; towards nearest, ties away from zero.
+ UNSPEC_PROBE_STACK ; Probe stack memory reference
++ UNSPEC_NONSECURE_MEM ; Represent non-secure memory in ARMv8-M with
++ ; security extension
+ ])
+
+ (define_c_enum "unspec" [
+@@ -191,6 +193,8 @@
+ UNSPEC_VBSL
+ UNSPEC_VCAGE
+ UNSPEC_VCAGT
++ UNSPEC_VCALE
++ UNSPEC_VCALT
+ UNSPEC_VCEQ
+ UNSPEC_VCGE
+ UNSPEC_VCGEU
+@@ -203,6 +207,20 @@
+ UNSPEC_VCVT_U
+ UNSPEC_VCVT_S_N
+ UNSPEC_VCVT_U_N
++ UNSPEC_VCVT_HF_S_N
++ UNSPEC_VCVT_HF_U_N
++ UNSPEC_VCVT_SI_S_N
++ UNSPEC_VCVT_SI_U_N
++ UNSPEC_VCVTH_S
++ UNSPEC_VCVTH_U
++ UNSPEC_VCVTA_S
++ UNSPEC_VCVTA_U
++ UNSPEC_VCVTM_S
++ UNSPEC_VCVTM_U
++ UNSPEC_VCVTN_S
++ UNSPEC_VCVTN_U
++ UNSPEC_VCVTP_S
++ UNSPEC_VCVTP_U
+ UNSPEC_VEXT
+ UNSPEC_VHADD_S
+ UNSPEC_VHADD_U
+@@ -244,6 +262,8 @@
+ UNSPEC_VMLSL_S_LANE
+ UNSPEC_VMLSL_U_LANE
+ UNSPEC_VMLSL_LANE
++ UNSPEC_VFMA_LANE
++ UNSPEC_VFMS_LANE
+ UNSPEC_VMOVL_S
+ UNSPEC_VMOVL_U
+ UNSPEC_VMOVN
+@@ -365,5 +385,11 @@
+ UNSPEC_NVRINTN
+ UNSPEC_VQRDMLAH
+ UNSPEC_VQRDMLSH
++ UNSPEC_VRND
++ UNSPEC_VRNDA
++ UNSPEC_VRNDI
++ UNSPEC_VRNDM
++ UNSPEC_VRNDN
++ UNSPEC_VRNDP
++ UNSPEC_VRNDX
+ ])
+-
+--- a/src/gcc/config/arm/vec-common.md
++++ b/src/gcc/config/arm/vec-common.md
+@@ -124,6 +124,20 @@
+ FAIL;
+ })
+
++(define_expand "vec_perm_const<mode>"
++ [(match_operand:VH 0 "s_register_operand")
++ (match_operand:VH 1 "s_register_operand")
++ (match_operand:VH 2 "s_register_operand")
++ (match_operand:<V_cmp_result> 3)]
++ "TARGET_NEON"
++{
++ if (arm_expand_vec_perm_const (operands[0], operands[1],
++ operands[2], operands[3]))
++ DONE;
++ else
++ FAIL;
++})
++
+ (define_expand "vec_perm<mode>"
+ [(match_operand:VE 0 "s_register_operand" "")
+ (match_operand:VE 1 "s_register_operand" "")
+--- a/src/gcc/config/arm/vfp.md
++++ b/src/gcc/config/arm/vfp.md
+@@ -18,13 +18,206 @@
+ ;; along with GCC; see the file COPYING3. If not see
+ ;; <http://www.gnu.org/licenses/>. */
+
++;; Patterns for HI moves which provide more data transfer instructions when VFP
++;; support is enabled.
++(define_insn "*arm_movhi_vfp"
++ [(set
++ (match_operand:HI 0 "nonimmediate_operand"
++ "=rk, r, r, m, r, *t, r, *t")
++ (match_operand:HI 1 "general_operand"
++ "rIk, K, n, r, mi, r, *t, *t"))]
++ "TARGET_ARM && TARGET_HARD_FLOAT
++ && !TARGET_VFP_FP16INST
++ && (register_operand (operands[0], HImode)
++ || register_operand (operands[1], HImode))"
++{
++ switch (which_alternative)
++ {
++ case 0:
++ return "mov%?\t%0, %1\t%@ movhi";
++ case 1:
++ return "mvn%?\t%0, #%B1\t%@ movhi";
++ case 2:
++ return "movw%?\t%0, %L1\t%@ movhi";
++ case 3:
++ return "strh%?\t%1, %0\t%@ movhi";
++ case 4:
++ return "ldrh%?\t%0, %1\t%@ movhi";
++ case 5:
++ case 6:
++ return "vmov%?\t%0, %1\t%@ int";
++ case 7:
++ return "vmov%?.f32\t%0, %1\t%@ int";
++ default:
++ gcc_unreachable ();
++ }
++}
++ [(set_attr "predicable" "yes")
++ (set_attr_alternative "type"
++ [(if_then_else
++ (match_operand 1 "const_int_operand" "")
++ (const_string "mov_imm")
++ (const_string "mov_reg"))
++ (const_string "mvn_imm")
++ (const_string "mov_imm")
++ (const_string "store1")
++ (const_string "load1")
++ (const_string "f_mcr")
++ (const_string "f_mrc")
++ (const_string "fmov")])
++ (set_attr "arch" "*, *, v6t2, *, *, *, *, *")
++ (set_attr "pool_range" "*, *, *, *, 256, *, *, *")
++ (set_attr "neg_pool_range" "*, *, *, *, 244, *, *, *")
++ (set_attr "length" "4")]
++)
++
++(define_insn "*thumb2_movhi_vfp"
++ [(set
++ (match_operand:HI 0 "nonimmediate_operand"
++ "=rk, r, l, r, m, r, *t, r, *t")
++ (match_operand:HI 1 "general_operand"
++ "rk, I, Py, n, r, m, r, *t, *t"))]
++ "TARGET_THUMB2 && TARGET_HARD_FLOAT
++ && !TARGET_VFP_FP16INST
++ && (register_operand (operands[0], HImode)
++ || register_operand (operands[1], HImode))"
++{
++ switch (which_alternative)
++ {
++ case 0:
++ case 1:
++ case 2:
++ return "mov%?\t%0, %1\t%@ movhi";
++ case 3:
++ return "movw%?\t%0, %L1\t%@ movhi";
++ case 4:
++ return "strh%?\t%1, %0\t%@ movhi";
++ case 5:
++ return "ldrh%?\t%0, %1\t%@ movhi";
++ case 6:
++ case 7:
++ return "vmov%?\t%0, %1\t%@ int";
++ case 8:
++ return "vmov%?.f32\t%0, %1\t%@ int";
++ default:
++ gcc_unreachable ();
++ }
++}
++ [(set_attr "predicable" "yes")
++ (set_attr "predicable_short_it"
++ "yes, no, yes, no, no, no, no, no, no")
++ (set_attr "type"
++ "mov_reg, mov_imm, mov_imm, mov_imm, store1, load1,\
++ f_mcr, f_mrc, fmov")
++ (set_attr "arch" "*, *, *, v6t2, *, *, *, *, *")
++ (set_attr "pool_range" "*, *, *, *, *, 4094, *, *, *")
++ (set_attr "neg_pool_range" "*, *, *, *, *, 250, *, *, *")
++ (set_attr "length" "2, 4, 2, 4, 4, 4, 4, 4, 4")]
++)
++
++;; Patterns for HI moves which provide more data transfer instructions when FP16
++;; instructions are available.
++(define_insn "*arm_movhi_fp16"
++ [(set
++ (match_operand:HI 0 "nonimmediate_operand"
++ "=r, r, r, m, r, *t, r, *t")
++ (match_operand:HI 1 "general_operand"
++ "rIk, K, n, r, mi, r, *t, *t"))]
++ "TARGET_ARM && TARGET_VFP_FP16INST
++ && (register_operand (operands[0], HImode)
++ || register_operand (operands[1], HImode))"
++{
++ switch (which_alternative)
++ {
++ case 0:
++ return "mov%?\t%0, %1\t%@ movhi";
++ case 1:
++ return "mvn%?\t%0, #%B1\t%@ movhi";
++ case 2:
++ return "movw%?\t%0, %L1\t%@ movhi";
++ case 3:
++ return "strh%?\t%1, %0\t%@ movhi";
++ case 4:
++ return "ldrh%?\t%0, %1\t%@ movhi";
++ case 5:
++ case 6:
++ return "vmov.f16\t%0, %1\t%@ int";
++ case 7:
++ return "vmov%?.f32\t%0, %1\t%@ int";
++ default:
++ gcc_unreachable ();
++ }
++}
++ [(set_attr "predicable" "yes, yes, yes, yes, yes, no, no, yes")
++ (set_attr_alternative "type"
++ [(if_then_else
++ (match_operand 1 "const_int_operand" "")
++ (const_string "mov_imm")
++ (const_string "mov_reg"))
++ (const_string "mvn_imm")
++ (const_string "mov_imm")
++ (const_string "store1")
++ (const_string "load1")
++ (const_string "f_mcr")
++ (const_string "f_mrc")
++ (const_string "fmov")])
++ (set_attr "arch" "*, *, v6t2, *, *, *, *, *")
++ (set_attr "pool_range" "*, *, *, *, 256, *, *, *")
++ (set_attr "neg_pool_range" "*, *, *, *, 244, *, *, *")
++ (set_attr "length" "4")]
++)
++
++(define_insn "*thumb2_movhi_fp16"
++ [(set
++ (match_operand:HI 0 "nonimmediate_operand"
++ "=rk, r, l, r, m, r, *t, r, *t")
++ (match_operand:HI 1 "general_operand"
++ "rk, I, Py, n, r, m, r, *t, *t"))]
++ "TARGET_THUMB2 && TARGET_VFP_FP16INST
++ && (register_operand (operands[0], HImode)
++ || register_operand (operands[1], HImode))"
++{
++ switch (which_alternative)
++ {
++ case 0:
++ case 1:
++ case 2:
++ return "mov%?\t%0, %1\t%@ movhi";
++ case 3:
++ return "movw%?\t%0, %L1\t%@ movhi";
++ case 4:
++ return "strh%?\t%1, %0\t%@ movhi";
++ case 5:
++ return "ldrh%?\t%0, %1\t%@ movhi";
++ case 6:
++ case 7:
++ return "vmov.f16\t%0, %1\t%@ int";
++ case 8:
++ return "vmov%?.f32\t%0, %1\t%@ int";
++ default:
++ gcc_unreachable ();
++ }
++}
++ [(set_attr "predicable"
++ "yes, yes, yes, yes, yes, yes, no, no, yes")
++ (set_attr "predicable_short_it"
++ "yes, no, yes, no, no, no, no, no, no")
++ (set_attr "type"
++ "mov_reg, mov_imm, mov_imm, mov_imm, store1, load1,\
++ f_mcr, f_mrc, fmov")
++ (set_attr "arch" "*, *, *, v6t2, *, *, *, *, *")
++ (set_attr "pool_range" "*, *, *, *, *, 4094, *, *, *")
++ (set_attr "neg_pool_range" "*, *, *, *, *, 250, *, *, *")
++ (set_attr "length" "2, 4, 2, 4, 4, 4, 4, 4, 4")]
++)
++
+ ;; SImode moves
+ ;; ??? For now do not allow loading constants into vfp regs. This causes
+ ;; problems because small constants get converted into adds.
+ (define_insn "*arm_movsi_vfp"
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m ,*t,r,*t,*t, *Uv")
+ (match_operand:SI 1 "general_operand" "rk, I,K,j,mi,rk,r,*t,*t,*Uvi,*t"))]
+- "TARGET_ARM && TARGET_VFP && TARGET_HARD_FLOAT
++ "TARGET_ARM && TARGET_HARD_FLOAT
+ && ( s_register_operand (operands[0], SImode)
+ || s_register_operand (operands[1], SImode))"
+ "*
+@@ -53,7 +246,8 @@
+ }
+ "
+ [(set_attr "predicable" "yes")
+- (set_attr "type" "mov_reg,mov_reg,mvn_imm,mov_imm,load1,store1,f_mcr,f_mrc,fmov,f_loads,f_stores")
++ (set_attr "type" "mov_reg,mov_reg,mvn_imm,mov_imm,load1,store1,
++ f_mcr,f_mrc,fmov,f_loads,f_stores")
+ (set_attr "pool_range" "*,*,*,*,4096,*,*,*,*,1020,*")
+ (set_attr "neg_pool_range" "*,*,*,*,4084,*,*,*,*,1008,*")]
+ )
+@@ -66,7 +260,7 @@
+ (define_insn "*thumb2_movsi_vfp"
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,l,r,r, l,*hk,m, *m,*t, r,*t,*t, *Uv")
+ (match_operand:SI 1 "general_operand" "rk,I,Py,K,j,mi,*mi,l,*hk, r,*t,*t,*Uvi,*t"))]
+- "TARGET_THUMB2 && TARGET_VFP && TARGET_HARD_FLOAT
++ "TARGET_THUMB2 && TARGET_HARD_FLOAT
+ && ( s_register_operand (operands[0], SImode)
+ || s_register_operand (operands[1], SImode))"
+ "*
+@@ -112,7 +306,7 @@
+ (define_insn "*movdi_vfp"
+ [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r,r,r,r,q,q,m,w,r,w,w, Uv")
+ (match_operand:DI 1 "di_operand" "r,rDa,Db,Dc,mi,mi,q,r,w,w,Uvi,w"))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP && arm_tune != cortexa8
++ "TARGET_32BIT && TARGET_HARD_FLOAT && arm_tune != cortexa8
+ && ( register_operand (operands[0], DImode)
+ || register_operand (operands[1], DImode))
+ && !(TARGET_NEON && CONST_INT_P (operands[1])
+@@ -163,7 +357,7 @@
+ (define_insn "*movdi_vfp_cortexa8"
+ [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r,r,r,r,r,r,m,w,!r,w,w, Uv")
+ (match_operand:DI 1 "di_operand" "r,rDa,Db,Dc,mi,mi,r,r,w,w,Uvi,w"))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP && arm_tune == cortexa8
++ "TARGET_32BIT && TARGET_HARD_FLOAT && arm_tune == cortexa8
+ && ( register_operand (operands[0], DImode)
+ || register_operand (operands[1], DImode))
+ && !(TARGET_NEON && CONST_INT_P (operands[1])
+@@ -211,10 +405,87 @@
+ )
+
+ ;; HFmode moves
++
++(define_insn "*movhf_vfp_fp16"
++ [(set (match_operand:HF 0 "nonimmediate_operand"
++ "= r,m,t,r,t,r,t,t,Um,r")
++ (match_operand:HF 1 "general_operand"
++ " m,r,t,r,r,t,Dv,Um,t,F"))]
++ "TARGET_32BIT
++ && TARGET_VFP_FP16INST
++ && (s_register_operand (operands[0], HFmode)
++ || s_register_operand (operands[1], HFmode))"
++ {
++ switch (which_alternative)
++ {
++ case 0: /* ARM register from memory. */
++ return \"ldrh%?\\t%0, %1\\t%@ __fp16\";
++ case 1: /* Memory from ARM register. */
++ return \"strh%?\\t%1, %0\\t%@ __fp16\";
++ case 2: /* S register from S register. */
++ return \"vmov\\t%0, %1\t%@ __fp16\";
++ case 3: /* ARM register from ARM register. */
++ return \"mov%?\\t%0, %1\\t%@ __fp16\";
++ case 4: /* S register from ARM register. */
++ case 5: /* ARM register from S register. */
++ case 6: /* S register from immediate. */
++ return \"vmov.f16\\t%0, %1\t%@ __fp16\";
++ case 7: /* S register from memory. */
++ return \"vld1.16\\t{%z0}, %A1\";
++ case 8: /* Memory from S register. */
++ return \"vst1.16\\t{%z1}, %A0\";
++ case 9: /* ARM register from constant. */
++ {
++ long bits;
++ rtx ops[4];
++
++ bits = real_to_target (NULL, CONST_DOUBLE_REAL_VALUE (operands[1]),
++ HFmode);
++ ops[0] = operands[0];
++ ops[1] = GEN_INT (bits);
++ ops[2] = GEN_INT (bits & 0xff00);
++ ops[3] = GEN_INT (bits & 0x00ff);
++
++ if (arm_arch_thumb2)
++ output_asm_insn (\"movw\\t%0, %1\", ops);
++ else
++ output_asm_insn (\"mov\\t%0, %2\;orr\\t%0, %0, %3\", ops);
++ return \"\";
++ }
++ default:
++ gcc_unreachable ();
++ }
++ }
++ [(set_attr "predicable" "yes, yes, no, yes, no, no, no, no, no, no")
++ (set_attr "predicable_short_it" "no, no, no, yes,\
++ no, no, no, no,\
++ no, no")
++ (set_attr_alternative "type"
++ [(const_string "load1") (const_string "store1")
++ (const_string "fmov") (const_string "mov_reg")
++ (const_string "f_mcr") (const_string "f_mrc")
++ (const_string "fconsts") (const_string "neon_load1_1reg")
++ (const_string "neon_store1_1reg")
++ (if_then_else (match_test "arm_arch_thumb2")
++ (const_string "mov_imm")
++ (const_string "multiple"))])
++ (set_attr_alternative "length"
++ [(const_int 4) (const_int 4)
++ (const_int 4) (const_int 4)
++ (const_int 4) (const_int 4)
++ (const_int 4) (const_int 4)
++ (const_int 4)
++ (if_then_else (match_test "arm_arch_thumb2")
++ (const_int 4)
++ (const_int 8))])]
++)
++
+ (define_insn "*movhf_vfp_neon"
+ [(set (match_operand:HF 0 "nonimmediate_operand" "= t,Um,r,m,t,r,t,r,r")
+ (match_operand:HF 1 "general_operand" " Um, t,m,r,t,r,r,t,F"))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_NEON_FP16
++ "TARGET_32BIT
++ && TARGET_HARD_FLOAT && TARGET_NEON_FP16
++ && !TARGET_VFP_FP16INST
+ && ( s_register_operand (operands[0], HFmode)
+ || s_register_operand (operands[1], HFmode))"
+ "*
+@@ -268,7 +539,10 @@
+ (define_insn "*movhf_vfp"
+ [(set (match_operand:HF 0 "nonimmediate_operand" "=r,m,t,r,t,r,r")
+ (match_operand:HF 1 "general_operand" " m,r,t,r,r,t,F"))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FP16 && !TARGET_NEON_FP16
++ "TARGET_32BIT
++ && TARGET_HARD_FLOAT
++ && !TARGET_NEON_FP16
++ && !TARGET_VFP_FP16INST
+ && ( s_register_operand (operands[0], HFmode)
+ || s_register_operand (operands[1], HFmode))"
+ "*
+@@ -321,7 +595,7 @@
+ (define_insn "*movsf_vfp"
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=t,?r,t ,t ,Uv,r ,m,t,r")
+ (match_operand:SF 1 "general_operand" " ?r,t,Dv,UvE,t, mE,r,t,r"))]
+- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
++ "TARGET_ARM && TARGET_HARD_FLOAT
+ && ( s_register_operand (operands[0], SFmode)
+ || s_register_operand (operands[1], SFmode))"
+ "*
+@@ -357,7 +631,7 @@
+ (define_insn "*thumb2_movsf_vfp"
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=t,?r,t, t ,Uv,r ,m,t,r")
+ (match_operand:SF 1 "general_operand" " ?r,t,Dv,UvE,t, mE,r,t,r"))]
+- "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP
++ "TARGET_THUMB2 && TARGET_HARD_FLOAT
+ && ( s_register_operand (operands[0], SFmode)
+ || s_register_operand (operands[1], SFmode))"
+ "*
+@@ -394,9 +668,9 @@
+ ;; DFmode moves
+
+ (define_insn "*movdf_vfp"
+- [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w ,Uv,r, m,w,r")
+- (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,UvF,w ,mF,r,w,r"))]
+- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
++ [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w,w ,Uv,r, m,w,r")
++ (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,G,UvF,w ,mF,r,w,r"))]
++ "TARGET_ARM && TARGET_HARD_FLOAT
+ && ( register_operand (operands[0], DFmode)
+ || register_operand (operands[1], DFmode))"
+ "*
+@@ -410,40 +684,44 @@
+ case 2:
+ gcc_assert (TARGET_VFP_DOUBLE);
+ return \"vmov%?.f64\\t%P0, %1\";
+- case 3: case 4:
++ case 3:
++ gcc_assert (TARGET_VFP_DOUBLE);
++ return \"vmov.i64\\t%P0, #0\\t%@ float\";
++ case 4: case 5:
+ return output_move_vfp (operands);
+- case 5: case 6:
++ case 6: case 7:
+ return output_move_double (operands, true, NULL);
+- case 7:
++ case 8:
+ if (TARGET_VFP_SINGLE)
+ return \"vmov%?.f32\\t%0, %1\;vmov%?.f32\\t%p0, %p1\";
+ else
+ return \"vmov%?.f64\\t%P0, %P1\";
+- case 8:
++ case 9:
+ return \"#\";
+ default:
+ gcc_unreachable ();
+ }
+ }
+ "
+- [(set_attr "type" "f_mcrr,f_mrrc,fconstd,f_loadd,f_stored,\
++ [(set_attr "type" "f_mcrr,f_mrrc,fconstd,neon_move,f_loadd,f_stored,\
+ load2,store2,ffarithd,multiple")
+- (set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
+- (eq_attr "alternative" "7")
++ (set (attr "length") (cond [(eq_attr "alternative" "6,7,9") (const_int 8)
++ (eq_attr "alternative" "8")
+ (if_then_else
+ (match_test "TARGET_VFP_SINGLE")
+ (const_int 8)
+ (const_int 4))]
+ (const_int 4)))
+- (set_attr "predicable" "yes")
+- (set_attr "pool_range" "*,*,*,1020,*,1020,*,*,*")
+- (set_attr "neg_pool_range" "*,*,*,1004,*,1004,*,*,*")]
++ (set_attr "predicable" "yes,yes,yes,no,yes,yes,yes,yes,yes,yes")
++ (set_attr "pool_range" "*,*,*,*,1020,*,1020,*,*,*")
++ (set_attr "neg_pool_range" "*,*,*,*,1004,*,1004,*,*,*")
++ (set_attr "arch" "any,any,any,neon,any,any,any,any,any,any")]
+ )
+
+ (define_insn "*thumb2_movdf_vfp"
+- [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w ,Uv,r ,m,w,r")
+- (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,UvF,w, mF,r, w,r"))]
+- "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP
++ [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w,w ,Uv,r ,m,w,r")
++ (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,G,UvF,w, mF,r, w,r"))]
++ "TARGET_THUMB2 && TARGET_HARD_FLOAT
+ && ( register_operand (operands[0], DFmode)
+ || register_operand (operands[1], DFmode))"
+ "*
+@@ -457,11 +735,14 @@
+ case 2:
+ gcc_assert (TARGET_VFP_DOUBLE);
+ return \"vmov%?.f64\\t%P0, %1\";
+- case 3: case 4:
++ case 3:
++ gcc_assert (TARGET_VFP_DOUBLE);
++ return \"vmov.i64\\t%P0, #0\\t%@ float\";
++ case 4: case 5:
+ return output_move_vfp (operands);
+- case 5: case 6: case 8:
++ case 6: case 7: case 9:
+ return output_move_double (operands, true, NULL);
+- case 7:
++ case 8:
+ if (TARGET_VFP_SINGLE)
+ return \"vmov%?.f32\\t%0, %1\;vmov%?.f32\\t%p0, %p1\";
+ else
+@@ -471,17 +752,18 @@
+ }
+ }
+ "
+- [(set_attr "type" "f_mcrr,f_mrrc,fconstd,f_loadd,\
++ [(set_attr "type" "f_mcrr,f_mrrc,fconstd,neon_move,f_loadd,\
+ f_stored,load2,store2,ffarithd,multiple")
+- (set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
+- (eq_attr "alternative" "7")
++ (set (attr "length") (cond [(eq_attr "alternative" "6,7,9") (const_int 8)
++ (eq_attr "alternative" "8")
+ (if_then_else
+ (match_test "TARGET_VFP_SINGLE")
+ (const_int 8)
+ (const_int 4))]
+ (const_int 4)))
+- (set_attr "pool_range" "*,*,*,1018,*,4094,*,*,*")
+- (set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
++ (set_attr "pool_range" "*,*,*,*,1018,*,4094,*,*,*")
++ (set_attr "neg_pool_range" "*,*,*,*,1008,*,0,*,*,*")
++ (set_attr "arch" "any,any,any,neon,any,any,any,any,any,any")]
+ )
+
+
+@@ -494,7 +776,7 @@
+ [(match_operand 4 "cc_register" "") (const_int 0)])
+ (match_operand:SF 1 "s_register_operand" "0,t,t,0,?r,?r,0,t,t")
+ (match_operand:SF 2 "s_register_operand" "t,0,t,?r,0,?r,t,0,t")))]
+- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_ARM && TARGET_HARD_FLOAT"
+ "@
+ vmov%D3.f32\\t%0, %2
+ vmov%d3.f32\\t%0, %1
+@@ -517,7 +799,7 @@
+ [(match_operand 4 "cc_register" "") (const_int 0)])
+ (match_operand:SF 1 "s_register_operand" "0,t,t,0,?r,?r,0,t,t")
+ (match_operand:SF 2 "s_register_operand" "t,0,t,?r,0,?r,t,0,t")))]
+- "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP && !arm_restrict_it"
++ "TARGET_THUMB2 && TARGET_HARD_FLOAT && !arm_restrict_it"
+ "@
+ it\\t%D3\;vmov%D3.f32\\t%0, %2
+ it\\t%d3\;vmov%d3.f32\\t%0, %1
+@@ -585,7 +867,7 @@
+ (define_insn "*abssf2_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (abs:SF (match_operand:SF 1 "s_register_operand" "t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vabs%?.f32\\t%0, %1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -605,7 +887,7 @@
+ (define_insn "*negsf2_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t,?r")
+ (neg:SF (match_operand:SF 1 "s_register_operand" "t,r")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "@
+ vneg%?.f32\\t%0, %1
+ eor%?\\t%0, %1, #-2147483648"
+@@ -661,14 +943,68 @@
+ (set_attr "type" "ffarithd")]
+ )
+
++;; ABS and NEG for FP16.
++(define_insn "<absneg_str>hf2"
++ [(set (match_operand:HF 0 "s_register_operand" "=w")
++ (ABSNEG:HF (match_operand:HF 1 "s_register_operand" "w")))]
++ "TARGET_VFP_FP16INST"
++ "v<absneg_str>.f16\t%0, %1"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "ffariths")]
++)
++
++(define_expand "neon_vabshf"
++ [(set
++ (match_operand:HF 0 "s_register_operand")
++ (abs:HF (match_operand:HF 1 "s_register_operand")))]
++ "TARGET_VFP_FP16INST"
++{
++ emit_insn (gen_abshf2 (operands[0], operands[1]));
++ DONE;
++})
++
++;; VRND for FP16.
++(define_insn "neon_v<fp16_rnd_str>hf"
++ [(set (match_operand:HF 0 "s_register_operand" "=w")
++ (unspec:HF
++ [(match_operand:HF 1 "s_register_operand" "w")]
++ FP16_RND))]
++ "TARGET_VFP_FP16INST"
++ "<fp16_rnd_insn>.f16\t%0, %1"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "neon_fp_round_s")]
++)
++
++(define_insn "neon_vrndihf"
++ [(set (match_operand:HF 0 "s_register_operand" "=w")
++ (unspec:HF
++ [(match_operand:HF 1 "s_register_operand" "w")]
++ UNSPEC_VRNDI))]
++ "TARGET_VFP_FP16INST"
++ "vrintr.f16\t%0, %1"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "neon_fp_round_s")]
++)
+
+ ;; Arithmetic insns
+
++(define_insn "addhf3"
++ [(set
++ (match_operand:HF 0 "s_register_operand" "=w")
++ (plus:HF
++ (match_operand:HF 1 "s_register_operand" "w")
++ (match_operand:HF 2 "s_register_operand" "w")))]
++ "TARGET_VFP_FP16INST"
++ "vadd.f16\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fadds")]
++)
++
+ (define_insn "*addsf3_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (plus:SF (match_operand:SF 1 "s_register_operand" "t")
+ (match_operand:SF 2 "s_register_operand" "t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vadd%?.f32\\t%0, %1, %2"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -686,12 +1022,23 @@
+ (set_attr "type" "faddd")]
+ )
+
++(define_insn "subhf3"
++ [(set
++ (match_operand:HF 0 "s_register_operand" "=w")
++ (minus:HF
++ (match_operand:HF 1 "s_register_operand" "w")
++ (match_operand:HF 2 "s_register_operand" "w")))]
++ "TARGET_VFP_FP16INST"
++ "vsub.f16\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fadds")]
++)
+
+ (define_insn "*subsf3_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (minus:SF (match_operand:SF 1 "s_register_operand" "t")
+ (match_operand:SF 2 "s_register_operand" "t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vsub%?.f32\\t%0, %1, %2"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -712,6 +1059,19 @@
+
+ ;; Division insns
+
++;; FP16 Division.
++(define_insn "divhf3"
++ [(set
++ (match_operand:HF 0 "s_register_operand" "=w")
++ (div:HF
++ (match_operand:HF 1 "s_register_operand" "w")
++ (match_operand:HF 2 "s_register_operand" "w")))]
++ "TARGET_VFP_FP16INST"
++ "vdiv.f16\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fdivs")]
++)
++
+ ; VFP9 Erratum 760019: It's potentially unsafe to overwrite the input
+ ; operands, so mark the output as early clobber for VFPv2 on ARMv5 or
+ ; earlier.
+@@ -719,7 +1079,7 @@
+ [(set (match_operand:SF 0 "s_register_operand" "=&t,t")
+ (div:SF (match_operand:SF 1 "s_register_operand" "t,t")
+ (match_operand:SF 2 "s_register_operand" "t,t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vdiv%?.f32\\t%0, %1, %2"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -742,11 +1102,22 @@
+
+ ;; Multiplication insns
+
++(define_insn "mulhf3"
++ [(set
++ (match_operand:HF 0 "s_register_operand" "=w")
++ (mult:HF (match_operand:HF 1 "s_register_operand" "w")
++ (match_operand:HF 2 "s_register_operand" "w")))]
++ "TARGET_VFP_FP16INST"
++ "vmul.f16\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fmuls")]
++)
++
+ (define_insn "*mulsf3_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (mult:SF (match_operand:SF 1 "s_register_operand" "t")
+ (match_operand:SF 2 "s_register_operand" "t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vmul%?.f32\\t%0, %1, %2"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -764,11 +1135,31 @@
+ (set_attr "type" "fmuld")]
+ )
+
++(define_insn "*mulsf3neghf_vfp"
++ [(set (match_operand:HF 0 "s_register_operand" "=t")
++ (mult:HF (neg:HF (match_operand:HF 1 "s_register_operand" "t"))
++ (match_operand:HF 2 "s_register_operand" "t")))]
++ "TARGET_VFP_FP16INST && !flag_rounding_math"
++ "vnmul.f16\\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fmuls")]
++)
++
++(define_insn "*negmulhf3_vfp"
++ [(set (match_operand:HF 0 "s_register_operand" "=t")
++ (neg:HF (mult:HF (match_operand:HF 1 "s_register_operand" "t")
++ (match_operand:HF 2 "s_register_operand" "t"))))]
++ "TARGET_VFP_FP16INST"
++ "vnmul.f16\\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fmuls")]
++)
++
+ (define_insn "*mulsf3negsf_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (mult:SF (neg:SF (match_operand:SF 1 "s_register_operand" "t"))
+ (match_operand:SF 2 "s_register_operand" "t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP && !flag_rounding_math"
++ "TARGET_32BIT && TARGET_HARD_FLOAT && !flag_rounding_math"
+ "vnmul%?.f32\\t%0, %1, %2"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -779,7 +1170,7 @@
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (neg:SF (mult:SF (match_operand:SF 1 "s_register_operand" "t")
+ (match_operand:SF 2 "s_register_operand" "t"))))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vnmul%?.f32\\t%0, %1, %2"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -813,12 +1204,24 @@
+ ;; Multiply-accumulate insns
+
+ ;; 0 = 1 * 2 + 0
++(define_insn "*mulsf3addhf_vfp"
++ [(set (match_operand:HF 0 "s_register_operand" "=t")
++ (plus:HF
++ (mult:HF (match_operand:HF 2 "s_register_operand" "t")
++ (match_operand:HF 3 "s_register_operand" "t"))
++ (match_operand:HF 1 "s_register_operand" "0")))]
++ "TARGET_VFP_FP16INST"
++ "vmla.f16\\t%0, %2, %3"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fmacs")]
++)
++
+ (define_insn "*mulsf3addsf_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (plus:SF (mult:SF (match_operand:SF 2 "s_register_operand" "t")
+ (match_operand:SF 3 "s_register_operand" "t"))
+ (match_operand:SF 1 "s_register_operand" "0")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vmla%?.f32\\t%0, %2, %3"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -838,12 +1241,23 @@
+ )
+
+ ;; 0 = 1 * 2 - 0
++(define_insn "*mulhf3subhf_vfp"
++ [(set (match_operand:HF 0 "s_register_operand" "=t")
++ (minus:HF (mult:HF (match_operand:HF 2 "s_register_operand" "t")
++ (match_operand:HF 3 "s_register_operand" "t"))
++ (match_operand:HF 1 "s_register_operand" "0")))]
++ "TARGET_VFP_FP16INST"
++ "vnmls.f16\\t%0, %2, %3"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fmacs")]
++)
++
+ (define_insn "*mulsf3subsf_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (minus:SF (mult:SF (match_operand:SF 2 "s_register_operand" "t")
+ (match_operand:SF 3 "s_register_operand" "t"))
+ (match_operand:SF 1 "s_register_operand" "0")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vnmls%?.f32\\t%0, %2, %3"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -863,12 +1277,23 @@
+ )
+
+ ;; 0 = -(1 * 2) + 0
++(define_insn "*mulhf3neghfaddhf_vfp"
++ [(set (match_operand:HF 0 "s_register_operand" "=t")
++ (minus:HF (match_operand:HF 1 "s_register_operand" "0")
++ (mult:HF (match_operand:HF 2 "s_register_operand" "t")
++ (match_operand:HF 3 "s_register_operand" "t"))))]
++ "TARGET_VFP_FP16INST"
++ "vmls.f16\\t%0, %2, %3"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fmacs")]
++)
++
+ (define_insn "*mulsf3negsfaddsf_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (minus:SF (match_operand:SF 1 "s_register_operand" "0")
+ (mult:SF (match_operand:SF 2 "s_register_operand" "t")
+ (match_operand:SF 3 "s_register_operand" "t"))))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vmls%?.f32\\t%0, %2, %3"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -889,13 +1314,25 @@
+
+
+ ;; 0 = -(1 * 2) - 0
++(define_insn "*mulhf3neghfsubhf_vfp"
++ [(set (match_operand:HF 0 "s_register_operand" "=t")
++ (minus:HF (mult:HF
++ (neg:HF (match_operand:HF 2 "s_register_operand" "t"))
++ (match_operand:HF 3 "s_register_operand" "t"))
++ (match_operand:HF 1 "s_register_operand" "0")))]
++ "TARGET_VFP_FP16INST"
++ "vnmla.f16\\t%0, %2, %3"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fmacs")]
++)
++
+ (define_insn "*mulsf3negsfsubsf_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (minus:SF (mult:SF
+ (neg:SF (match_operand:SF 2 "s_register_operand" "t"))
+ (match_operand:SF 3 "s_register_operand" "t"))
+ (match_operand:SF 1 "s_register_operand" "0")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vnmla%?.f32\\t%0, %2, %3"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -917,6 +1354,30 @@
+
+ ;; Fused-multiply-accumulate
+
++(define_insn "fmahf4"
++ [(set (match_operand:HF 0 "register_operand" "=w")
++ (fma:HF
++ (match_operand:HF 1 "register_operand" "w")
++ (match_operand:HF 2 "register_operand" "w")
++ (match_operand:HF 3 "register_operand" "0")))]
++ "TARGET_VFP_FP16INST"
++ "vfma.f16\\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "ffmas")]
++)
++
++(define_expand "neon_vfmahf"
++ [(match_operand:HF 0 "s_register_operand")
++ (match_operand:HF 1 "s_register_operand")
++ (match_operand:HF 2 "s_register_operand")
++ (match_operand:HF 3 "s_register_operand")]
++ "TARGET_VFP_FP16INST"
++{
++ emit_insn (gen_fmahf4 (operands[0], operands[2], operands[3],
++ operands[1]));
++ DONE;
++})
++
+ (define_insn "fma<SDF:mode>4"
+ [(set (match_operand:SDF 0 "register_operand" "=<F_constraint>")
+ (fma:SDF (match_operand:SDF 1 "register_operand" "<F_constraint>")
+@@ -929,6 +1390,30 @@
+ (set_attr "type" "ffma<vfp_type>")]
+ )
+
++(define_insn "fmsubhf4_fp16"
++ [(set (match_operand:HF 0 "register_operand" "=w")
++ (fma:HF
++ (neg:HF (match_operand:HF 1 "register_operand" "w"))
++ (match_operand:HF 2 "register_operand" "w")
++ (match_operand:HF 3 "register_operand" "0")))]
++ "TARGET_VFP_FP16INST"
++ "vfms.f16\\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "ffmas")]
++)
++
++(define_expand "neon_vfmshf"
++ [(match_operand:HF 0 "s_register_operand")
++ (match_operand:HF 1 "s_register_operand")
++ (match_operand:HF 2 "s_register_operand")
++ (match_operand:HF 3 "s_register_operand")]
++ "TARGET_VFP_FP16INST"
++{
++ emit_insn (gen_fmsubhf4_fp16 (operands[0], operands[2], operands[3],
++ operands[1]));
++ DONE;
++})
++
+ (define_insn "*fmsub<SDF:mode>4"
+ [(set (match_operand:SDF 0 "register_operand" "=<F_constraint>")
+ (fma:SDF (neg:SDF (match_operand:SDF 1 "register_operand"
+@@ -942,6 +1427,17 @@
+ (set_attr "type" "ffma<vfp_type>")]
+ )
+
++(define_insn "*fnmsubhf4"
++ [(set (match_operand:HF 0 "register_operand" "=w")
++ (fma:HF (match_operand:HF 1 "register_operand" "w")
++ (match_operand:HF 2 "register_operand" "w")
++ (neg:HF (match_operand:HF 3 "register_operand" "0"))))]
++ "TARGET_VFP_FP16INST"
++ "vfnms.f16\\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "ffmas")]
++)
++
+ (define_insn "*fnmsub<SDF:mode>4"
+ [(set (match_operand:SDF 0 "register_operand" "=<F_constraint>")
+ (fma:SDF (match_operand:SDF 1 "register_operand" "<F_constraint>")
+@@ -954,6 +1450,17 @@
+ (set_attr "type" "ffma<vfp_type>")]
+ )
+
++(define_insn "*fnmaddhf4"
++ [(set (match_operand:HF 0 "register_operand" "=w")
++ (fma:HF (neg:HF (match_operand:HF 1 "register_operand" "w"))
++ (match_operand:HF 2 "register_operand" "w")
++ (neg:HF (match_operand:HF 3 "register_operand" "0"))))]
++ "TARGET_VFP_FP16INST"
++ "vfnma.f16\\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "ffmas")]
++)
++
+ (define_insn "*fnmadd<SDF:mode>4"
+ [(set (match_operand:SDF 0 "register_operand" "=<F_constraint>")
+ (fma:SDF (neg:SDF (match_operand:SDF 1 "register_operand"
+@@ -993,7 +1500,7 @@
+ (define_insn "extendhfsf2"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (float_extend:SF (match_operand:HF 1 "s_register_operand" "t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FP16"
++ "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FP16 || TARGET_VFP_FP16INST)"
+ "vcvtb%?.f32.f16\\t%0, %1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -1003,7 +1510,7 @@
+ (define_insn "truncsfhf2"
+ [(set (match_operand:HF 0 "s_register_operand" "=t")
+ (float_truncate:HF (match_operand:SF 1 "s_register_operand" "t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FP16"
++ "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FP16 || TARGET_VFP_FP16INST)"
+ "vcvtb%?.f16.f32\\t%0, %1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -1013,7 +1520,7 @@
+ (define_insn "*truncsisf2_vfp"
+ [(set (match_operand:SI 0 "s_register_operand" "=t")
+ (fix:SI (fix:SF (match_operand:SF 1 "s_register_operand" "t"))))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vcvt%?.s32.f32\\t%0, %1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -1034,7 +1541,7 @@
+ (define_insn "fixuns_truncsfsi2"
+ [(set (match_operand:SI 0 "s_register_operand" "=t")
+ (unsigned_fix:SI (fix:SF (match_operand:SF 1 "s_register_operand" "t"))))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vcvt%?.u32.f32\\t%0, %1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -1055,7 +1562,7 @@
+ (define_insn "*floatsisf2_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (float:SF (match_operand:SI 1 "s_register_operand" "t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vcvt%?.f32.s32\\t%0, %1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -1076,7 +1583,7 @@
+ (define_insn "floatunssisf2"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (unsigned_float:SF (match_operand:SI 1 "s_register_operand" "t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vcvt%?.f32.u32\\t%0, %1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -1096,13 +1603,34 @@
+
+ ;; Sqrt insns.
+
++(define_insn "neon_vsqrthf"
++ [(set (match_operand:HF 0 "s_register_operand" "=w")
++ (sqrt:HF (match_operand:HF 1 "s_register_operand" "w")))]
++ "TARGET_VFP_FP16INST"
++ "vsqrt.f16\t%0, %1"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fsqrts")]
++)
++
++(define_insn "neon_vrsqrtshf"
++ [(set
++ (match_operand:HF 0 "s_register_operand" "=w")
++ (unspec:HF [(match_operand:HF 1 "s_register_operand" "w")
++ (match_operand:HF 2 "s_register_operand" "w")]
++ UNSPEC_VRSQRTS))]
++ "TARGET_VFP_FP16INST"
++ "vrsqrts.f16\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "fsqrts")]
++)
++
+ ; VFP9 Erratum 760019: It's potentially unsafe to overwrite the input
+ ; operands, so mark the output as early clobber for VFPv2 on ARMv5 or
+ ; earlier.
+ (define_insn "*sqrtsf2_vfp"
+ [(set (match_operand:SF 0 "s_register_operand" "=&t,t")
+ (sqrt:SF (match_operand:SF 1 "s_register_operand" "t,t")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vsqrt%?.f32\\t%0, %1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")
+@@ -1127,7 +1655,7 @@
+ (define_insn "*movcc_vfp"
+ [(set (reg CC_REGNUM)
+ (reg VFPCC_REGNUM))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "vmrs%?\\tAPSR_nzcv, FPSCR"
+ [(set_attr "conds" "set")
+ (set_attr "type" "f_flag")]
+@@ -1137,9 +1665,9 @@
+ [(set (reg:CCFP CC_REGNUM)
+ (compare:CCFP (match_operand:SF 0 "s_register_operand" "t")
+ (match_operand:SF 1 "vfp_compare_operand" "tG")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "#"
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ [(set (reg:CCFP VFPCC_REGNUM)
+ (compare:CCFP (match_dup 0)
+ (match_dup 1)))
+@@ -1152,9 +1680,9 @@
+ [(set (reg:CCFPE CC_REGNUM)
+ (compare:CCFPE (match_operand:SF 0 "s_register_operand" "t")
+ (match_operand:SF 1 "vfp_compare_operand" "tG")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "#"
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ [(set (reg:CCFPE VFPCC_REGNUM)
+ (compare:CCFPE (match_dup 0)
+ (match_dup 1)))
+@@ -1203,7 +1731,7 @@
+ [(set (reg:CCFP VFPCC_REGNUM)
+ (compare:CCFP (match_operand:SF 0 "s_register_operand" "t,t")
+ (match_operand:SF 1 "vfp_compare_operand" "t,G")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "@
+ vcmp%?.f32\\t%0, %1
+ vcmp%?.f32\\t%0, #0"
+@@ -1216,7 +1744,7 @@
+ [(set (reg:CCFPE VFPCC_REGNUM)
+ (compare:CCFPE (match_operand:SF 0 "s_register_operand" "t,t")
+ (match_operand:SF 1 "vfp_compare_operand" "t,G")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "@
+ vcmpe%?.f32\\t%0, %1
+ vcmpe%?.f32\\t%0, #0"
+@@ -1252,9 +1780,6 @@
+ )
+
+ ;; Fixed point to floating point conversions.
+-(define_code_iterator FCVT [unsigned_float float])
+-(define_code_attr FCVTI32typename [(unsigned_float "u32") (float "s32")])
+-
+ (define_insn "*combine_vcvt_f32_<FCVTI32typename>"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (mult:SF (FCVT:SF (match_operand:SI 1 "s_register_operand" "0"))
+@@ -1299,13 +1824,132 @@
+ (set_attr "type" "f_cvtf2i")]
+ )
+
++;; FP16 conversions.
++(define_insn "neon_vcvth<sup>hf"
++ [(set (match_operand:HF 0 "s_register_operand" "=w")
++ (unspec:HF
++ [(match_operand:SI 1 "s_register_operand" "w")]
++ VCVTH_US))]
++ "TARGET_VFP_FP16INST"
++ "vcvt.f16.<sup>%#32\t%0, %1"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "f_cvti2f")]
++)
++
++(define_insn "neon_vcvth<sup>si"
++ [(set (match_operand:SI 0 "s_register_operand" "=w")
++ (unspec:SI
++ [(match_operand:HF 1 "s_register_operand" "w")]
++ VCVTH_US))]
++ "TARGET_VFP_FP16INST"
++ "vcvt.<sup>%#32.f16\t%0, %1"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "f_cvtf2i")]
++)
++
++;; The neon_vcvth<sup>_nhf patterns are used to generate the instruction for the
++;; vcvth_n_f16_<sup>32 arm_fp16 intrinsics. They are complicated by the
++;; hardware requirement that the source and destination registers are the same
++;; despite having different machine modes. The approach is to use a temporary
++;; register for the conversion and move that to the correct destination.
++
++;; Generate an unspec pattern for the intrinsic.
++(define_insn "neon_vcvth<sup>_nhf_unspec"
++ [(set
++ (match_operand:SI 0 "s_register_operand" "=w")
++ (unspec:SI
++ [(match_operand:SI 1 "s_register_operand" "0")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ VCVT_HF_US_N))
++ (set
++ (match_operand:HF 3 "s_register_operand" "=w")
++ (float_truncate:HF (float:SF (match_dup 0))))]
++ "TARGET_VFP_FP16INST"
++{
++ neon_const_bounds (operands[2], 1, 33);
++ return "vcvt.f16.<sup>32\t%0, %0, %2\;vmov.f32\t%3, %0";
++}
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "f_cvti2f")]
++)
++
++;; Generate the instruction patterns needed for vcvth_n_f16_s32 neon intrinsics.
++(define_expand "neon_vcvth<sup>_nhf"
++ [(match_operand:HF 0 "s_register_operand")
++ (unspec:HF [(match_operand:SI 1 "s_register_operand")
++ (match_operand:SI 2 "immediate_operand")]
++ VCVT_HF_US_N)]
++"TARGET_VFP_FP16INST"
++{
++ rtx op1 = gen_reg_rtx (SImode);
++
++ neon_const_bounds (operands[2], 1, 33);
++
++ emit_move_insn (op1, operands[1]);
++ emit_insn (gen_neon_vcvth<sup>_nhf_unspec (op1, op1, operands[2],
++ operands[0]));
++ DONE;
++})
++
++;; The neon_vcvth<sup>_nsi patterns are used to generate the instruction for the
++;; vcvth_n_<sup>32_f16 arm_fp16 intrinsics. They have the same restrictions and
++;; are implemented in the same way as the neon_vcvth<sup>_nhf patterns.
++
++;; Generate an unspec pattern, constraining the registers.
++(define_insn "neon_vcvth<sup>_nsi_unspec"
++ [(set (match_operand:SI 0 "s_register_operand" "=w")
++ (unspec:SI
++ [(fix:SI
++ (fix:SF
++ (float_extend:SF
++ (match_operand:HF 1 "s_register_operand" "w"))))
++ (match_operand:SI 2 "immediate_operand" "i")]
++ VCVT_SI_US_N))]
++ "TARGET_VFP_FP16INST"
++{
++ neon_const_bounds (operands[2], 1, 33);
++ return "vmov.f32\t%0, %1\;vcvt.<sup>%#32.f16\t%0, %0, %2";
++}
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "f_cvtf2i")]
++)
++
++;; Generate the instruction patterns needed for vcvth_n_f16_s32 neon intrinsics.
++(define_expand "neon_vcvth<sup>_nsi"
++ [(match_operand:SI 0 "s_register_operand")
++ (unspec:SI
++ [(match_operand:HF 1 "s_register_operand")
++ (match_operand:SI 2 "immediate_operand")]
++ VCVT_SI_US_N)]
++ "TARGET_VFP_FP16INST"
++{
++ rtx op1 = gen_reg_rtx (SImode);
++
++ neon_const_bounds (operands[2], 1, 33);
++ emit_insn (gen_neon_vcvth<sup>_nsi_unspec (op1, operands[1], operands[2]));
++ emit_move_insn (operands[0], op1);
++ DONE;
++})
++
++(define_insn "neon_vcvt<vcvth_op>h<sup>si"
++ [(set
++ (match_operand:SI 0 "s_register_operand" "=w")
++ (unspec:SI
++ [(match_operand:HF 1 "s_register_operand" "w")]
++ VCVT_HF_US))]
++ "TARGET_VFP_FP16INST"
++ "vcvt<vcvth_op>.<sup>%#32.f16\t%0, %1"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "f_cvtf2i")]
++)
++
+ ;; Store multiple insn used in function prologue.
+ (define_insn "*push_multi_vfp"
+ [(match_parallel 2 "multi_register_push"
+ [(set (match_operand:BLK 0 "memory_operand" "=m")
+ (unspec:BLK [(match_operand:DF 1 "vfp_register_operand" "")]
+ UNSPEC_PUSH_MULT))])]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++ "TARGET_32BIT && TARGET_HARD_FLOAT"
+ "* return vfp_output_vstmd (operands);"
+ [(set_attr "type" "f_stored")]
+ )
+@@ -1368,6 +2012,20 @@
+ )
+
+ ;; Scalar forms for the IEEE-754 fmax()/fmin() functions
++
++(define_insn "neon_<fmaxmin_op>hf"
++ [(set
++ (match_operand:HF 0 "s_register_operand" "=w")
++ (unspec:HF
++ [(match_operand:HF 1 "s_register_operand" "w")
++ (match_operand:HF 2 "s_register_operand" "w")]
++ VMAXMINFNM))]
++ "TARGET_VFP_FP16INST"
++ "<fmaxmin_op>.f16\t%0, %1, %2"
++ [(set_attr "conds" "unconditional")
++ (set_attr "type" "f_minmaxs")]
++)
++
+ (define_insn "<fmaxmin><mode>3"
+ [(set (match_operand:SDF 0 "s_register_operand" "=<F_constraint>")
+ (unspec:SDF [(match_operand:SDF 1 "s_register_operand" "<F_constraint>")
+@@ -1382,7 +2040,7 @@
+ ;; Write Floating-point Status and Control Register.
+ (define_insn "set_fpscr"
+ [(unspec_volatile [(match_operand:SI 0 "register_operand" "r")] VUNSPEC_SET_FPSCR)]
+- "TARGET_VFP && TARGET_HARD_FLOAT"
++ "TARGET_HARD_FLOAT"
+ "mcr\\tp10, 7, %0, cr1, cr0, 0\\t @SET_FPSCR"
+ [(set_attr "type" "mrs")])
+
+@@ -1390,7 +2048,7 @@
+ (define_insn "get_fpscr"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (unspec_volatile:SI [(const_int 0)] VUNSPEC_GET_FPSCR))]
+- "TARGET_VFP && TARGET_HARD_FLOAT"
++ "TARGET_HARD_FLOAT"
+ "mrc\\tp10, 7, %0, cr1, cr0, 0\\t @GET_FPSCR"
+ [(set_attr "type" "mrs")])
+
+--- a/src/gcc/config/arm/xgene1.md
++++ b/src/gcc/config/arm/xgene1.md
+@@ -164,7 +164,7 @@
+
+ (define_insn_reservation "xgene1_bfm" 2
+ (and (eq_attr "tune" "xgene1")
+- (eq_attr "type" "bfm"))
++ (eq_attr "type" "bfm,bfx"))
+ "xgene1_decode1op,xgene1_fsu")
+
+ (define_insn_reservation "xgene1_f_rint" 5
+--- a/src/gcc/config/i386/i386.c
++++ b/src/gcc/config/i386/i386.c
+@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "backend.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "gimple.h"
+ #include "cfghooks.h"
+ #include "cfgloop.h"
+--- a/src/gcc/config/ia64/ia64.c
++++ b/src/gcc/config/ia64/ia64.c
+@@ -26,6 +26,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "cfghooks.h"
+ #include "df.h"
+ #include "tm_p.h"
+--- a/src/gcc/config/linux.c
++++ b/src/gcc/config/linux.c
+@@ -26,7 +26,7 @@ along with GCC; see the file COPYING3. If not see
+ bool
+ linux_libc_has_function (enum function_class fn_class)
+ {
+- if (OPTION_GLIBC)
++ if (OPTION_GLIBC || OPTION_MUSL)
+ return true;
+ if (OPTION_BIONIC)
+ if (fn_class == function_c94
+--- a/src/gcc/config/mips/mips.c
++++ b/src/gcc/config/mips/mips.c
+@@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "gimple.h"
+ #include "cfghooks.h"
+ #include "df.h"
+--- a/src/gcc/config/rs6000/rs6000.c
++++ b/src/gcc/config/rs6000/rs6000.c
+@@ -24,6 +24,7 @@
+ #include "backend.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "gimple.h"
+ #include "cfghooks.h"
+ #include "cfgloop.h"
+--- a/src/gcc/config/sparc/sparc.c
++++ b/src/gcc/config/sparc/sparc.c
+@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "gimple.h"
+ #include "df.h"
+ #include "tm_p.h"
+--- a/src/gcc/configure
++++ b/src/gcc/configure
+@@ -1711,7 +1711,8 @@ Optional Packages:
+ --with-stabs arrange to use stabs instead of host debug format
+ --with-dwarf2 force the default debug format to be DWARF 2
+ --with-specs=SPECS add SPECS to driver command-line processing
+- --with-pkgversion=PKG Use PKG in the version string in place of "GCC"
++ --with-pkgversion=PKG Use PKG in the version string in place of "Linaro
++ GCC `cat $srcdir/LINARO-VERSION`"
+ --with-bugurl=URL Direct users to URL to report a bug
+ --with-multilib-list select multilibs (AArch64, SH and x86-64 only)
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+@@ -7658,7 +7659,7 @@ if test "${with_pkgversion+set}" = set; then :
+ *) PKGVERSION="($withval) " ;;
+ esac
+ else
+- PKGVERSION="(GCC) "
++ PKGVERSION="(Linaro GCC `cat $srcdir/LINARO-VERSION`) "
+
+ fi
+
+@@ -18460,7 +18461,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 18463 "configure"
++#line 18464 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -18566,7 +18567,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 18569 "configure"
++#line 18570 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -910,7 +910,7 @@ AC_ARG_WITH(specs,
+ )
+ AC_SUBST(CONFIGURE_SPECS)
+
+-ACX_PKGVERSION([GCC])
++ACX_PKGVERSION([Linaro GCC `cat $srcdir/LINARO-VERSION`])
+ ACX_BUGURL([http://gcc.gnu.org/bugs.html])
+
+ # Sanity check enable_languages in case someone does not run the toplevel
+--- a/src/gcc/cppbuiltin.c
++++ b/src/gcc/cppbuiltin.c
+@@ -52,18 +52,41 @@ parse_basever (int *major, int *minor, int *patchlevel)
+ *patchlevel = s_patchlevel;
+ }
+
++/* Parse a LINAROVER version string of the format "M.m-year.month[-spin][~dev]"
++ to create Linaro release number YYYYMM and spin version. */
++static void
++parse_linarover (int *release, int *spin)
++{
++ static int s_year = -1, s_month, s_spin;
++
++ if (s_year == -1)
++ if (sscanf (LINAROVER, "%*[^-]-%d.%d-%d", &s_year, &s_month, &s_spin) != 3)
++ {
++ sscanf (LINAROVER, "%*[^-]-%d.%d", &s_year, &s_month);
++ s_spin = 0;
++ }
++
++ if (release)
++ *release = s_year * 100 + s_month;
++
++ if (spin)
++ *spin = s_spin;
++}
+
+ /* Define __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__ and __VERSION__. */
+ static void
+ define__GNUC__ (cpp_reader *pfile)
+ {
+- int major, minor, patchlevel;
++ int major, minor, patchlevel, linaro_release, linaro_spin;
+
+ parse_basever (&major, &minor, &patchlevel);
++ parse_linarover (&linaro_release, &linaro_spin);
+ cpp_define_formatted (pfile, "__GNUC__=%d", major);
+ cpp_define_formatted (pfile, "__GNUC_MINOR__=%d", minor);
+ cpp_define_formatted (pfile, "__GNUC_PATCHLEVEL__=%d", patchlevel);
+ cpp_define_formatted (pfile, "__VERSION__=\"%s\"", version_string);
++ cpp_define_formatted (pfile, "__LINARO_RELEASE__=%d", linaro_release);
++ cpp_define_formatted (pfile, "__LINARO_SPIN__=%d", linaro_spin);
+ cpp_define_formatted (pfile, "__ATOMIC_RELAXED=%d", MEMMODEL_RELAXED);
+ cpp_define_formatted (pfile, "__ATOMIC_SEQ_CST=%d", MEMMODEL_SEQ_CST);
+ cpp_define_formatted (pfile, "__ATOMIC_ACQUIRE=%d", MEMMODEL_ACQUIRE);
+--- a/src/gcc/defaults.h
++++ b/src/gcc/defaults.h
+@@ -971,11 +971,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ #define REG_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
+ #endif
+
+-#ifdef TARGET_FLT_EVAL_METHOD
+-#define TARGET_FLT_EVAL_METHOD_NON_DEFAULT 1
+-#else
++#ifndef TARGET_FLT_EVAL_METHOD
+ #define TARGET_FLT_EVAL_METHOD 0
+-#define TARGET_FLT_EVAL_METHOD_NON_DEFAULT 0
+ #endif
+
+ #ifndef TARGET_DEC_EVAL_METHOD
+--- a/src/gcc/expmed.c
++++ b/src/gcc/expmed.c
+@@ -2522,16 +2522,8 @@ expand_variable_shift (enum tree_code code, machine_mode mode, rtx shifted,
+ }
+
+
+-/* Indicates the type of fixup needed after a constant multiplication.
+- BASIC_VARIANT means no fixup is needed, NEGATE_VARIANT means that
+- the result should be negated, and ADD_VARIANT means that the
+- multiplicand should be added to the result. */
+-enum mult_variant {basic_variant, negate_variant, add_variant};
+-
+ static void synth_mult (struct algorithm *, unsigned HOST_WIDE_INT,
+ const struct mult_cost *, machine_mode mode);
+-static bool choose_mult_variant (machine_mode, HOST_WIDE_INT,
+- struct algorithm *, enum mult_variant *, int);
+ static rtx expand_mult_const (machine_mode, rtx, HOST_WIDE_INT, rtx,
+ const struct algorithm *, enum mult_variant);
+ static unsigned HOST_WIDE_INT invert_mod2n (unsigned HOST_WIDE_INT, int);
+@@ -3021,7 +3013,7 @@ synth_mult (struct algorithm *alg_out, unsigned HOST_WIDE_INT t,
+ Return true if the cheapest of these cost less than MULT_COST,
+ describing the algorithm in *ALG and final fixup in *VARIANT. */
+
+-static bool
++bool
+ choose_mult_variant (machine_mode mode, HOST_WIDE_INT val,
+ struct algorithm *alg, enum mult_variant *variant,
+ int mult_cost)
+--- a/src/gcc/expmed.h
++++ b/src/gcc/expmed.h
+@@ -35,6 +35,15 @@ enum alg_code {
+ alg_impossible
+ };
+
++/* Indicates the type of fixup needed after a constant multiplication.
++ BASIC_VARIANT means no fixup is needed, NEGATE_VARIANT means that
++ the result should be negated, and ADD_VARIANT means that the
++ multiplicand should be added to the result. */
++enum mult_variant {basic_variant, negate_variant, add_variant};
++
++bool choose_mult_variant (machine_mode, HOST_WIDE_INT,
++ struct algorithm *, enum mult_variant *, int);
++
+ /* This structure holds the "cost" of a multiply sequence. The
+ "cost" field holds the total rtx_cost of every operator in the
+ synthetic multiplication sequence, hence cost(a op b) is defined
+--- a/src/gcc/fold-const.c
++++ b/src/gcc/fold-const.c
+@@ -7230,7 +7230,16 @@ native_encode_real (const_tree expr, unsigned char *ptr, int len, int off)
+ offset += byte % UNITS_PER_WORD;
+ }
+ else
+- offset = BYTES_BIG_ENDIAN ? 3 - byte : byte;
++ {
++ offset = byte;
++ if (BYTES_BIG_ENDIAN)
++ {
++ /* Reverse bytes within each long, or within the entire float
++ if it's smaller than a long (for HFmode). */
++ offset = MIN (3, total_bytes - 1) - offset;
++ gcc_assert (offset >= 0);
++ }
++ }
+ offset = offset + ((bitpos / BITS_PER_UNIT) & ~3);
+ if (offset >= off
+ && offset - off < len)
+--- a/src/gcc/fortran/options.c
++++ b/src/gcc/fortran/options.c
+@@ -208,8 +208,7 @@ gfc_post_options (const char **pfilename)
+
+ /* Excess precision other than "fast" requires front-end
+ support. */
+- if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD
+- && TARGET_FLT_EVAL_METHOD_NON_DEFAULT)
++ if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD)
+ sorry ("-fexcess-precision=standard for Fortran");
+ flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
+
+--- a/src/gcc/genconditions.c
++++ b/src/gcc/genconditions.c
+@@ -94,6 +94,7 @@ write_header (void)
+ #include \"resource.h\"\n\
+ #include \"diagnostic-core.h\"\n\
+ #include \"reload.h\"\n\
++#include \"memmodel.h\"\n\
+ #include \"tm-constrs.h\"\n");
+
+ if (saw_eh_return)
+--- a/src/gcc/genemit.c
++++ b/src/gcc/genemit.c
+@@ -792,6 +792,7 @@ from the machine description file `md'. */\n\n");
+ printf ("#include \"reload.h\"\n");
+ printf ("#include \"diagnostic-core.h\"\n");
+ printf ("#include \"regs.h\"\n");
++ printf ("#include \"memmodel.h\"\n");
+ printf ("#include \"tm-constrs.h\"\n");
+ printf ("#include \"ggc.h\"\n");
+ printf ("#include \"dumpfile.h\"\n");
+--- a/src/gcc/genmultilib
++++ b/src/gcc/genmultilib
+@@ -186,7 +186,8 @@ fi
+ EOF
+ chmod +x tmpmultilib
+
+-combinations=`initial=/ ./tmpmultilib ${options}`
++combination_space=`initial=/ ./tmpmultilib ${options}`
++combinations="$combination_space"
+
+ # If there exceptions, weed them out now
+ if [ -n "${exceptions}" ]; then
+@@ -472,14 +473,19 @@ for rrule in ${multilib_reuse}; do
+ # in this variable, it means no multilib will be built for current reuse
+ # rule. Thus the reuse purpose specified by current rule is meaningless.
+ if expr "${combinations} " : ".*/${combo}/.*" > /dev/null; then
+- combo="/${combo}/"
+- dirout=`./tmpmultilib3 "${combo}" "${todirnames}" "${toosdirnames}" "${enable_multilib}"`
+- copts="/${copts}/"
+- optout=`./tmpmultilib4 "${copts}" "${options}"`
+- # Output the line with all appropriate matches.
+- dirout="${dirout}" optout="${optout}" ./tmpmultilib2
++ if expr "${combination_space} " : ".*/${copts}/.*" > /dev/null; then
++ combo="/${combo}/"
++ dirout=`./tmpmultilib3 "${combo}" "${todirnames}" "${toosdirnames}" "${enable_multilib}"`
++ copts="/${copts}/"
++ optout=`./tmpmultilib4 "${copts}" "${options}"`
++ # Output the line with all appropriate matches.
++ dirout="${dirout}" optout="${optout}" ./tmpmultilib2
++ else
++ echo "The rule ${rrule} contains an option absent from MULTILIB_OPTIONS." >&2
++ exit 1
++ fi
+ else
+- echo "The rule ${rrule} is trying to reuse nonexistent multilib."
++ echo "The rule ${rrule} is trying to reuse nonexistent multilib." >&2
+ exit 1
+ fi
+ done
+--- a/src/gcc/genoutput.c
++++ b/src/gcc/genoutput.c
+@@ -231,6 +231,7 @@ output_prologue (void)
+ printf ("#include \"diagnostic-core.h\"\n");
+ printf ("#include \"output.h\"\n");
+ printf ("#include \"target.h\"\n");
++ printf ("#include \"memmodel.h\"\n");
+ printf ("#include \"tm-constrs.h\"\n");
+ }
+
+--- a/src/gcc/genpeep.c
++++ b/src/gcc/genpeep.c
+@@ -373,6 +373,7 @@ from the machine description file `md'. */\n\n");
+ printf ("#include \"except.h\"\n");
+ printf ("#include \"diagnostic-core.h\"\n");
+ printf ("#include \"flags.h\"\n");
++ printf ("#include \"memmodel.h\"\n");
+ printf ("#include \"tm-constrs.h\"\n\n");
+
+ printf ("extern rtx peep_operand[];\n\n");
+--- a/src/gcc/genpreds.c
++++ b/src/gcc/genpreds.c
+@@ -1577,6 +1577,7 @@ write_insn_preds_c (void)
+ #include \"reload.h\"\n\
+ #include \"regs.h\"\n\
+ #include \"emit-rtl.h\"\n\
++#include \"memmodel.h\"\n\
+ #include \"tm-constrs.h\"\n");
+
+ FOR_ALL_PREDICATES (p)
+--- a/src/gcc/genrecog.c
++++ b/src/gcc/genrecog.c
+@@ -4172,6 +4172,7 @@ write_header (void)
+ #include \"diagnostic-core.h\"\n\
+ #include \"reload.h\"\n\
+ #include \"regs.h\"\n\
++#include \"memmodel.h\"\n\
+ #include \"tm-constrs.h\"\n\
+ \n");
+
+--- a/src/gcc/gimple-fold.c
++++ b/src/gcc/gimple-fold.c
+@@ -1379,6 +1379,55 @@ gimple_fold_builtin_strncpy (gimple_stmt_iterator *gsi,
+ return true;
+ }
+
++/* Simplify strchr (str, 0) into str + strlen (str).
++ In general strlen is significantly faster than strchr
++ due to being a simpler operation. */
++static bool
++gimple_fold_builtin_strchr (gimple_stmt_iterator *gsi)
++{
++ gimple *stmt = gsi_stmt (*gsi);
++ tree str = gimple_call_arg (stmt, 0);
++ tree c = gimple_call_arg (stmt, 1);
++ location_t loc = gimple_location (stmt);
++
++ if (optimize_function_for_size_p (cfun))
++ return false;
++
++ if (!integer_zerop (c) || !gimple_call_lhs (stmt))
++ return false;
++
++ tree len;
++ tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
++
++ if (!strlen_fn)
++ return false;
++
++ /* Create newstr = strlen (str). */
++ gimple_seq stmts = NULL;
++ gimple *new_stmt = gimple_build_call (strlen_fn, 1, str);
++ gimple_set_location (new_stmt, loc);
++ if (gimple_in_ssa_p (cfun))
++ len = make_ssa_name (size_type_node);
++ else
++ len = create_tmp_reg (size_type_node);
++ gimple_call_set_lhs (new_stmt, len);
++ gimple_seq_add_stmt_without_update (&stmts, new_stmt);
++
++ /* Create (str p+ strlen (str)). */
++ new_stmt = gimple_build_assign (gimple_call_lhs (stmt),
++ POINTER_PLUS_EXPR, str, len);
++ gimple_seq_add_stmt_without_update (&stmts, new_stmt);
++ gsi_replace_with_seq_vops (gsi, stmts);
++ /* gsi now points at the assignment to the lhs, get a
++ stmt iterator to the strlen.
++ ??? We can't use gsi_for_stmt as that doesn't work when the
++ CFG isn't built yet. */
++ gimple_stmt_iterator gsi2 = *gsi;
++ gsi_prev (&gsi2);
++ fold_stmt (&gsi2);
++ return true;
++}
++
+ /* Simplify a call to the strcat builtin. DST and SRC are the arguments
+ to the call.
+
+@@ -2820,6 +2869,11 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi)
+ gimple_call_arg (stmt, 1));
+ case BUILT_IN_STRNCAT:
+ return gimple_fold_builtin_strncat (gsi);
++ case BUILT_IN_STRCHR:
++ if (gimple_fold_builtin_strchr (gsi))
++ return true;
++ /* Perform additional folding in builtin.c. */
++ break;
+ case BUILT_IN_FPUTS:
+ return gimple_fold_builtin_fputs (gsi, gimple_call_arg (stmt, 0),
+ gimple_call_arg (stmt, 1), false);
+--- a/src/gcc/ifcvt.c
++++ b/src/gcc/ifcvt.c
+@@ -813,10 +813,15 @@ struct noce_if_info
+
+ /* Estimated cost of the particular branch instruction. */
+ unsigned int branch_cost;
++
++ /* The name of the noce transform that succeeded in if-converting
++ this structure. Used for debugging. */
++ const char *transform_name;
+ };
+
+ static rtx noce_emit_store_flag (struct noce_if_info *, rtx, int, int);
+ static int noce_try_move (struct noce_if_info *);
++static int noce_try_ifelse_collapse (struct noce_if_info *);
+ static int noce_try_store_flag (struct noce_if_info *);
+ static int noce_try_addcc (struct noce_if_info *);
+ static int noce_try_store_flag_constants (struct noce_if_info *);
+@@ -1115,11 +1120,45 @@ noce_try_move (struct noce_if_info *if_info)
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
+ }
++ if_info->transform_name = "noce_try_move";
+ return TRUE;
+ }
+ return FALSE;
+ }
+
++/* Try forming an IF_THEN_ELSE (cond, b, a) and collapsing that
++ through simplify_rtx. Sometimes that can eliminate the IF_THEN_ELSE.
++ If that is the case, emit the result into x. */
++
++static int
++noce_try_ifelse_collapse (struct noce_if_info * if_info)
++{
++ if (!noce_simple_bbs (if_info))
++ return FALSE;
++
++ machine_mode mode = GET_MODE (if_info->x);
++ rtx if_then_else = simplify_gen_ternary (IF_THEN_ELSE, mode, mode,
++ if_info->cond, if_info->b,
++ if_info->a);
++
++ if (GET_CODE (if_then_else) == IF_THEN_ELSE)
++ return FALSE;
++
++ rtx_insn *seq;
++ start_sequence ();
++ noce_emit_move_insn (if_info->x, if_then_else);
++ seq = end_ifcvt_sequence (if_info);
++ if (!seq)
++ return FALSE;
++
++ emit_insn_before_setloc (seq, if_info->jump,
++ INSN_LOCATION (if_info->insn_a));
++
++ if_info->transform_name = "noce_try_ifelse_collapse";
++ return TRUE;
++}
++
++
+ /* Convert "if (test) x = 1; else x = 0".
+
+ Only try 0 and STORE_FLAG_VALUE here. Other combinations will be
+@@ -1163,6 +1202,7 @@ noce_try_store_flag (struct noce_if_info *if_info)
+
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_store_flag";
+ return TRUE;
+ }
+ else
+@@ -1241,6 +1281,7 @@ noce_try_inverse_constants (struct noce_if_info *if_info)
+
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_inverse_constants";
+ return true;
+ }
+
+@@ -1461,6 +1502,8 @@ noce_try_store_flag_constants (struct noce_if_info *if_info)
+
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_store_flag_constants";
++
+ return TRUE;
+ }
+
+@@ -1513,6 +1556,8 @@ noce_try_addcc (struct noce_if_info *if_info)
+
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_addcc";
++
+ return TRUE;
+ }
+ end_sequence ();
+@@ -1553,6 +1598,7 @@ noce_try_addcc (struct noce_if_info *if_info)
+
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_addcc";
+ return TRUE;
+ }
+ end_sequence ();
+@@ -1617,6 +1663,8 @@ noce_try_store_flag_mask (struct noce_if_info *if_info)
+
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_store_flag_mask";
++
+ return TRUE;
+ }
+
+@@ -1767,6 +1815,8 @@ noce_try_cmove (struct noce_if_info *if_info)
+
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_cmove";
++
+ return TRUE;
+ }
+ /* If both a and b are constants try a last-ditch transformation:
+@@ -1820,6 +1870,7 @@ noce_try_cmove (struct noce_if_info *if_info)
+
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_cmove";
+ return TRUE;
+ }
+ else
+@@ -2273,6 +2324,7 @@ noce_try_cmove_arith (struct noce_if_info *if_info)
+
+ emit_insn_before_setloc (ifcvt_seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_cmove_arith";
+ return TRUE;
+
+ end_seq_and_fail:
+@@ -2364,28 +2416,32 @@ noce_get_alt_condition (struct noce_if_info *if_info, rtx target,
+ switch (code)
+ {
+ case LT:
+- if (actual_val == desired_val + 1)
++ if (desired_val != HOST_WIDE_INT_MAX
++ && actual_val == desired_val + 1)
+ {
+ code = LE;
+ op_b = GEN_INT (desired_val);
+ }
+ break;
+ case LE:
+- if (actual_val == desired_val - 1)
++ if (desired_val != HOST_WIDE_INT_MIN
++ && actual_val == desired_val - 1)
+ {
+ code = LT;
+ op_b = GEN_INT (desired_val);
+ }
+ break;
+ case GT:
+- if (actual_val == desired_val - 1)
++ if (desired_val != HOST_WIDE_INT_MIN
++ && actual_val == desired_val - 1)
+ {
+ code = GE;
+ op_b = GEN_INT (desired_val);
+ }
+ break;
+ case GE:
+- if (actual_val == desired_val + 1)
++ if (desired_val != HOST_WIDE_INT_MAX
++ && actual_val == desired_val + 1)
+ {
+ code = GT;
+ op_b = GEN_INT (desired_val);
+@@ -2525,6 +2581,7 @@ noce_try_minmax (struct noce_if_info *if_info)
+ emit_insn_before_setloc (seq, if_info->jump, INSN_LOCATION (if_info->insn_a));
+ if_info->cond = cond;
+ if_info->cond_earliest = earliest;
++ if_info->transform_name = "noce_try_minmax";
+
+ return TRUE;
+ }
+@@ -2691,6 +2748,7 @@ noce_try_abs (struct noce_if_info *if_info)
+ emit_insn_before_setloc (seq, if_info->jump, INSN_LOCATION (if_info->insn_a));
+ if_info->cond = cond;
+ if_info->cond_earliest = earliest;
++ if_info->transform_name = "noce_try_abs";
+
+ return TRUE;
+ }
+@@ -2772,6 +2830,8 @@ noce_try_sign_mask (struct noce_if_info *if_info)
+ return FALSE;
+
+ emit_insn_before_setloc (seq, if_info->jump, INSN_LOCATION (if_info->insn_a));
++ if_info->transform_name = "noce_try_sign_mask";
++
+ return TRUE;
+ }
+
+@@ -2877,6 +2937,7 @@ noce_try_bitop (struct noce_if_info *if_info)
+ emit_insn_before_setloc (seq, if_info->jump,
+ INSN_LOCATION (if_info->insn_a));
+ }
++ if_info->transform_name = "noce_try_bitop";
+ return TRUE;
+ }
+
+@@ -3167,6 +3228,41 @@ noce_convert_multiple_sets (struct noce_if_info *if_info)
+ if (if_info->then_else_reversed)
+ std::swap (old_val, new_val);
+
++
++ /* We allow simple lowpart register subreg SET sources in
++ bb_ok_for_noce_convert_multiple_sets. Be careful when processing
++ sequences like:
++ (set (reg:SI r1) (reg:SI r2))
++ (set (reg:HI r3) (subreg:HI (r1)))
++ For the second insn new_val or old_val (r1 in this example) will be
++ taken from the temporaries and have the wider mode which will not
++ match with the mode of the other source of the conditional move, so
++ we'll end up trying to emit r4:HI = cond ? (r1:SI) : (r3:HI).
++ Wrap the two cmove operands into subregs if appropriate to prevent
++ that. */
++ if (GET_MODE (new_val) != GET_MODE (temp))
++ {
++ machine_mode src_mode = GET_MODE (new_val);
++ machine_mode dst_mode = GET_MODE (temp);
++ if (GET_MODE_SIZE (src_mode) <= GET_MODE_SIZE (dst_mode))
++ {
++ end_sequence ();
++ return FALSE;
++ }
++ new_val = lowpart_subreg (dst_mode, new_val, src_mode);
++ }
++ if (GET_MODE (old_val) != GET_MODE (temp))
++ {
++ machine_mode src_mode = GET_MODE (old_val);
++ machine_mode dst_mode = GET_MODE (temp);
++ if (GET_MODE_SIZE (src_mode) <= GET_MODE_SIZE (dst_mode))
++ {
++ end_sequence ();
++ return FALSE;
++ }
++ old_val = lowpart_subreg (dst_mode, old_val, src_mode);
++ }
++
+ /* Actually emit the conditional move. */
+ rtx temp_dest = noce_emit_cmove (if_info, temp, cond_code,
+ x, y, new_val, old_val);
+@@ -3240,6 +3336,7 @@ noce_convert_multiple_sets (struct noce_if_info *if_info)
+ }
+
+ num_updated_if_blocks++;
++ if_info->transform_name = "noce_convert_multiple_sets";
+ return TRUE;
+ }
+
+@@ -3277,9 +3374,15 @@ bb_ok_for_noce_convert_multiple_sets (basic_block test_bb,
+ rtx src = SET_SRC (set);
+
+ /* We can possibly relax this, but for now only handle REG to REG
+- moves. This avoids any issues that might come from introducing
+- loads/stores that might violate data-race-freedom guarantees. */
+- if (!(REG_P (src) && REG_P (dest)))
++ (including subreg) moves. This avoids any issues that might come
++ from introducing loads/stores that might violate data-race-freedom
++ guarantees. */
++ if (!REG_P (dest))
++ return false;
++
++ if (!(REG_P (src)
++ || (GET_CODE (src) == SUBREG && REG_P (SUBREG_REG (src))
++ && subreg_lowpart_p (src))))
+ return false;
+
+ /* Destination must be appropriate for a conditional write. */
+@@ -3336,7 +3439,12 @@ noce_process_if_block (struct noce_if_info *if_info)
+ && bb_ok_for_noce_convert_multiple_sets (then_bb, if_info))
+ {
+ if (noce_convert_multiple_sets (if_info))
+- return TRUE;
++ {
++ if (dump_file && if_info->transform_name)
++ fprintf (dump_file, "if-conversion succeeded through %s\n",
++ if_info->transform_name);
++ return TRUE;
++ }
+ }
+
+ if (! bb_valid_for_noce_process_p (then_bb, cond, &if_info->then_cost,
+@@ -3493,6 +3601,8 @@ noce_process_if_block (struct noce_if_info *if_info)
+
+ if (noce_try_move (if_info))
+ goto success;
++ if (noce_try_ifelse_collapse (if_info))
++ goto success;
+ if (noce_try_store_flag (if_info))
+ goto success;
+ if (noce_try_bitop (if_info))
+@@ -3533,6 +3643,9 @@ noce_process_if_block (struct noce_if_info *if_info)
+ return FALSE;
+
+ success:
++ if (dump_file && if_info->transform_name)
++ fprintf (dump_file, "if-conversion succeeded through %s\n",
++ if_info->transform_name);
+
+ /* If we used a temporary, fix it up now. */
+ if (orig_x != x)
+--- a/src/gcc/internal-fn.c
++++ b/src/gcc/internal-fn.c
+@@ -1812,11 +1812,7 @@ expand_arith_overflow (enum tree_code code, gimple *stmt)
+ /* For sub-word operations, retry with a wider type first. */
+ if (orig_precres == precres && precop <= BITS_PER_WORD)
+ {
+-#if WORD_REGISTER_OPERATIONS
+- int p = BITS_PER_WORD;
+-#else
+- int p = precop;
+-#endif
++ int p = WORD_REGISTER_OPERATIONS ? BITS_PER_WORD : precop;
+ enum machine_mode m = smallest_mode_for_size (p, MODE_INT);
+ tree optype = build_nonstandard_integer_type (GET_MODE_PRECISION (m),
+ uns0_p && uns1_p
+--- a/src/gcc/java/lang.c
++++ b/src/gcc/java/lang.c
+@@ -569,8 +569,7 @@ java_post_options (const char **pfilename)
+
+ /* Excess precision other than "fast" requires front-end
+ support. */
+- if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD
+- && TARGET_FLT_EVAL_METHOD_NON_DEFAULT)
++ if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD)
+ sorry ("-fexcess-precision=standard for Java");
+ flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
+
+--- a/src/gcc/lra-constraints.c
++++ b/src/gcc/lra-constraints.c
+@@ -1326,7 +1326,22 @@ process_addr_reg (rtx *loc, bool check_only_p, rtx_insn **before, rtx_insn **aft
+
+ subreg_p = GET_CODE (*loc) == SUBREG;
+ if (subreg_p)
+- loc = &SUBREG_REG (*loc);
++ {
++ reg = SUBREG_REG (*loc);
++ mode = GET_MODE (reg);
++
++ /* For mode with size bigger than ptr_mode, there unlikely to be "mov"
++ between two registers with different classes, but there normally will
++ be "mov" which transfers element of vector register into the general
++ register, and this normally will be a subreg which should be reloaded
++ as a whole. This is particularly likely to be triggered when
++ -fno-split-wide-types specified. */
++ if (!REG_P (reg)
++ || in_class_p (reg, cl, &new_class)
++ || GET_MODE_SIZE (mode) <= GET_MODE_SIZE (ptr_mode))
++ loc = &SUBREG_REG (*loc);
++ }
++
+ reg = *loc;
+ mode = GET_MODE (reg);
+ if (! REG_P (reg))
+@@ -2475,14 +2490,29 @@ process_alt_operands (int only_alternative)
+ /* We are trying to spill pseudo into memory. It is
+ usually more costly than moving to a hard register
+ although it might takes the same number of
+- reloads. */
+- if (no_regs_p && REG_P (op) && hard_regno[nop] >= 0)
++ reloads.
++
++ Non-pseudo spill may happen also. Suppose a target allows both
++ register and memory in the operand constraint alternatives,
++ then it's typical that an eliminable register has a substition
++ of "base + offset" which can either be reloaded by a simple
++ "new_reg <= base + offset" which will match the register
++ constraint, or a similar reg addition followed by further spill
++ to and reload from memory which will match the memory
++ constraint, but this memory spill will be much more costly
++ usually.
++
++ Code below increases the reject for both pseudo and non-pseudo
++ spill. */
++ if (no_regs_p
++ && !(MEM_P (op) && offmemok)
++ && !(REG_P (op) && hard_regno[nop] < 0))
+ {
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+- " %d Spill pseudo into memory: reject+=3\n",
+- nop);
++ " %d Spill %spseudo into memory: reject+=3\n",
++ nop, REG_P (op) ? "" : "Non-");
+ reject += 3;
+ if (VECTOR_MODE_P (mode))
+ {
+--- a/src/gcc/lto/lto-partition.c
++++ b/src/gcc/lto/lto-partition.c
+@@ -447,7 +447,7 @@ add_sorted_nodes (vec<symtab_node *> &next_nodes, ltrans_partition partition)
+ and in-partition calls was reached. */
+
+ void
+-lto_balanced_map (int n_lto_partitions)
++lto_balanced_map (int n_lto_partitions, int max_partition_size)
+ {
+ int n_nodes = 0;
+ int n_varpool_nodes = 0, varpool_pos = 0, best_varpool_pos = 0;
+@@ -511,6 +511,9 @@ lto_balanced_map (int n_lto_partitions)
+ varpool_order.qsort (varpool_node_cmp);
+
+ /* Compute partition size and create the first partition. */
++ if (PARAM_VALUE (MIN_PARTITION_SIZE) > max_partition_size)
++ fatal_error (input_location, "min partition size cannot be greater than max partition size");
++
+ partition_size = total_size / n_lto_partitions;
+ if (partition_size < PARAM_VALUE (MIN_PARTITION_SIZE))
+ partition_size = PARAM_VALUE (MIN_PARTITION_SIZE);
+@@ -719,7 +722,8 @@ lto_balanced_map (int n_lto_partitions)
+ best_cost, best_internal, best_i);
+ /* Partition is too large, unwind into step when best cost was reached and
+ start new partition. */
+- if (partition->insns > 2 * partition_size)
++ if (partition->insns > 2 * partition_size
++ || partition->insns > max_partition_size)
+ {
+ if (best_i != i)
+ {
+--- a/src/gcc/lto/lto-partition.h
++++ b/src/gcc/lto/lto-partition.h
+@@ -35,7 +35,7 @@ extern vec<ltrans_partition> ltrans_partitions;
+
+ void lto_1_to_1_map (void);
+ void lto_max_map (void);
+-void lto_balanced_map (int);
++void lto_balanced_map (int, int);
+ void lto_promote_cross_file_statics (void);
+ void free_ltrans_partitions (void);
+ void lto_promote_statics_nonwpa (void);
+--- a/src/gcc/lto/lto.c
++++ b/src/gcc/lto/lto.c
+@@ -3123,9 +3123,10 @@ do_whole_program_analysis (void)
+ else if (flag_lto_partition == LTO_PARTITION_MAX)
+ lto_max_map ();
+ else if (flag_lto_partition == LTO_PARTITION_ONE)
+- lto_balanced_map (1);
++ lto_balanced_map (1, INT_MAX);
+ else if (flag_lto_partition == LTO_PARTITION_BALANCED)
+- lto_balanced_map (PARAM_VALUE (PARAM_LTO_PARTITIONS));
++ lto_balanced_map (PARAM_VALUE (PARAM_LTO_PARTITIONS),
++ PARAM_VALUE (MAX_PARTITION_SIZE));
+ else
+ gcc_unreachable ();
+
+--- a/src/gcc/match.pd
++++ b/src/gcc/match.pd
+@@ -468,6 +468,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
+ (bit_and:c (convert? @0) (convert? (bit_not @0)))
+ { build_zero_cst (type); })
+
++/* PR71636: Transform x & ((1U << b) - 1) -> x & ~(~0U << b); */
++(simplify
++ (bit_and:c @0 (plus:s (lshift:s integer_onep @1) integer_minus_onep))
++ (if (TYPE_UNSIGNED (type))
++ (bit_and @0 (bit_not (lshift { build_all_ones_cst (type); } @1)))))
++
+ /* Fold (A & ~B) - (A & B) into (A ^ B) - B. */
+ (simplify
+ (minus (bit_and:cs @0 (bit_not @1)) (bit_and:cs @0 @1))
+--- /dev/null
++++ b/src/gcc/memmodel.h
+@@ -0,0 +1,86 @@
++/* Prototypes of memory model helper functions.
++ Copyright (C) 2015-2016 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3. If not see
++<http://www.gnu.org/licenses/>. */
++
++#ifndef GCC_MEMMODEL_H
++#define GCC_MEMMODEL_H
++
++/* Return the memory model from a host integer. */
++static inline enum memmodel
++memmodel_from_int (unsigned HOST_WIDE_INT val)
++{
++ return (enum memmodel) (val & MEMMODEL_MASK);
++}
++
++/* Return the base memory model from a host integer. */
++static inline enum memmodel
++memmodel_base (unsigned HOST_WIDE_INT val)
++{
++ return (enum memmodel) (val & MEMMODEL_BASE_MASK);
++}
++
++/* Return TRUE if the memory model is RELAXED. */
++static inline bool
++is_mm_relaxed (enum memmodel model)
++{
++ return (model & MEMMODEL_BASE_MASK) == MEMMODEL_RELAXED;
++}
++
++/* Return TRUE if the memory model is CONSUME. */
++static inline bool
++is_mm_consume (enum memmodel model)
++{
++ return (model & MEMMODEL_BASE_MASK) == MEMMODEL_CONSUME;
++}
++
++/* Return TRUE if the memory model is ACQUIRE. */
++static inline bool
++is_mm_acquire (enum memmodel model)
++{
++ return (model & MEMMODEL_BASE_MASK) == MEMMODEL_ACQUIRE;
++}
++
++/* Return TRUE if the memory model is RELEASE. */
++static inline bool
++is_mm_release (enum memmodel model)
++{
++ return (model & MEMMODEL_BASE_MASK) == MEMMODEL_RELEASE;
++}
++
++/* Return TRUE if the memory model is ACQ_REL. */
++static inline bool
++is_mm_acq_rel (enum memmodel model)
++{
++ return (model & MEMMODEL_BASE_MASK) == MEMMODEL_ACQ_REL;
++}
++
++/* Return TRUE if the memory model is SEQ_CST. */
++static inline bool
++is_mm_seq_cst (enum memmodel model)
++{
++ return (model & MEMMODEL_BASE_MASK) == MEMMODEL_SEQ_CST;
++}
++
++/* Return TRUE if the memory model is a SYNC variant. */
++static inline bool
++is_mm_sync (enum memmodel model)
++{
++ return (model & MEMMODEL_SYNC);
++}
++
++#endif /* GCC_MEMMODEL_H */
+--- a/src/gcc/optabs.c
++++ b/src/gcc/optabs.c
+@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "predict.h"
+ #include "tm_p.h"
+ #include "expmed.h"
+--- a/src/gcc/params.def
++++ b/src/gcc/params.def
+@@ -1027,7 +1027,12 @@ DEFPARAM (PARAM_LTO_PARTITIONS,
+ DEFPARAM (MIN_PARTITION_SIZE,
+ "lto-min-partition",
+ "Minimal size of a partition for LTO (in estimated instructions).",
+- 1000, 0, 0)
++ 10000, 0, 0)
++
++DEFPARAM (MAX_PARTITION_SIZE,
++ "lto-max-partition",
++ "Maximal size of a partition for LTO (in estimated instructions).",
++ 1000000, 0, INT_MAX)
+
+ /* Diagnostic parameters. */
+
+--- a/src/gcc/rtlanal.c
++++ b/src/gcc/rtlanal.c
+@@ -3663,6 +3663,16 @@ subreg_get_info (unsigned int xregno, machine_mode xmode,
+ info->offset = offset / regsize_xmode;
+ return;
+ }
++ /* It's not valid to extract a subreg of mode YMODE at OFFSET that
++ would go outside of XMODE. */
++ if (!rknown
++ && GET_MODE_SIZE (ymode) + offset > GET_MODE_SIZE (xmode))
++ {
++ info->representable_p = false;
++ info->nregs = nregs_ymode;
++ info->offset = offset / regsize_xmode;
++ return;
++ }
+ /* Quick exit for the simple and common case of extracting whole
+ subregisters from a multiregister value. */
+ /* ??? It would be better to integrate this into the code below,
+@@ -4590,13 +4600,14 @@ nonzero_bits1 (const_rtx x, machine_mode mode, const_rtx known_x,
+ nonzero &= cached_nonzero_bits (SUBREG_REG (x), mode,
+ known_x, known_mode, known_ret);
+
+-#if WORD_REGISTER_OPERATIONS && defined (LOAD_EXTEND_OP)
++#ifdef LOAD_EXTEND_OP
+ /* If this is a typical RISC machine, we only have to worry
+ about the way loads are extended. */
+- if ((LOAD_EXTEND_OP (inner_mode) == SIGN_EXTEND
+- ? val_signbit_known_set_p (inner_mode, nonzero)
+- : LOAD_EXTEND_OP (inner_mode) != ZERO_EXTEND)
+- || !MEM_P (SUBREG_REG (x)))
++ if (WORD_REGISTER_OPERATIONS
++ && ((LOAD_EXTEND_OP (inner_mode) == SIGN_EXTEND
++ ? val_signbit_known_set_p (inner_mode, nonzero)
++ : LOAD_EXTEND_OP (inner_mode) != ZERO_EXTEND)
++ || !MEM_P (SUBREG_REG (x))))
+ #endif
+ {
+ /* On many CISC machines, accessing an object in a wider mode
+--- a/src/gcc/simplify-rtx.c
++++ b/src/gcc/simplify-rtx.c
+@@ -5274,6 +5274,50 @@ simplify_const_relational_operation (enum rtx_code code,
+
+ return 0;
+ }
++
++/* Recognize expressions of the form (X CMP 0) ? VAL : OP (X)
++ where OP is CLZ or CTZ and VAL is the value from CLZ_DEFINED_VALUE_AT_ZERO
++ or CTZ_DEFINED_VALUE_AT_ZERO respectively and return OP (X) if the expression
++ can be simplified to that or NULL_RTX if not.
++ Assume X is compared against zero with CMP_CODE and the true
++ arm is TRUE_VAL and the false arm is FALSE_VAL. */
++
++static rtx
++simplify_cond_clz_ctz (rtx x, rtx_code cmp_code, rtx true_val, rtx false_val)
++{
++ if (cmp_code != EQ && cmp_code != NE)
++ return NULL_RTX;
++
++ /* Result on X == 0 and X !=0 respectively. */
++ rtx on_zero, on_nonzero;
++ if (cmp_code == EQ)
++ {
++ on_zero = true_val;
++ on_nonzero = false_val;
++ }
++ else
++ {
++ on_zero = false_val;
++ on_nonzero = true_val;
++ }
++
++ rtx_code op_code = GET_CODE (on_nonzero);
++ if ((op_code != CLZ && op_code != CTZ)
++ || !rtx_equal_p (XEXP (on_nonzero, 0), x)
++ || !CONST_INT_P (on_zero))
++ return NULL_RTX;
++
++ HOST_WIDE_INT op_val;
++ if (((op_code == CLZ
++ && CLZ_DEFINED_VALUE_AT_ZERO (GET_MODE (on_nonzero), op_val))
++ || (op_code == CTZ
++ && CTZ_DEFINED_VALUE_AT_ZERO (GET_MODE (on_nonzero), op_val)))
++ && op_val == INTVAL (on_zero))
++ return on_nonzero;
++
++ return NULL_RTX;
++}
++
+
+ /* Simplify CODE, an operation with result mode MODE and three operands,
+ OP0, OP1, and OP2. OP0_MODE was the mode of OP0 before it became
+@@ -5407,6 +5451,19 @@ simplify_ternary_operation (enum rtx_code code, machine_mode mode,
+ }
+ }
+
++ /* Convert x == 0 ? N : clz (x) into clz (x) when
++ CLZ_DEFINED_VALUE_AT_ZERO is defined to N for the mode of x.
++ Similarly for ctz (x). */
++ if (COMPARISON_P (op0) && !side_effects_p (op0)
++ && XEXP (op0, 1) == const0_rtx)
++ {
++ rtx simplified
++ = simplify_cond_clz_ctz (XEXP (op0, 0), GET_CODE (op0),
++ op1, op2);
++ if (simplified)
++ return simplified;
++ }
++
+ if (COMPARISON_P (op0) && ! side_effects_p (op0))
+ {
+ machine_mode cmp_mode = (GET_MODE (XEXP (op0, 0)) == VOIDmode
+--- a/src/gcc/system.h
++++ b/src/gcc/system.h
+@@ -971,7 +971,8 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
+ EXTRA_ADDRESS_CONSTRAINT CONST_DOUBLE_OK_FOR_CONSTRAINT_P \
+ CALLER_SAVE_PROFITABLE LARGEST_EXPONENT_IS_NORMAL \
+ ROUND_TOWARDS_ZERO SF_SIZE DF_SIZE XF_SIZE TF_SIZE LIBGCC2_TF_CEXT \
+- LIBGCC2_LONG_DOUBLE_TYPE_SIZE STRUCT_VALUE EH_FRAME_IN_DATA_SECTION
++ LIBGCC2_LONG_DOUBLE_TYPE_SIZE STRUCT_VALUE \
++ EH_FRAME_IN_DATA_SECTION TARGET_FLT_EVAL_METHOD_NON_DEFAULT
+
+ /* Hooks that are no longer used. */
+ #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \
+--- a/src/gcc/testsuite/c-c++-common/asan/clone-test-1.c
++++ b/src/gcc/testsuite/c-c++-common/asan/clone-test-1.c
+@@ -29,6 +29,10 @@ int main(int argc, char **argv) {
+ char *sp = child_stack + kStackSize; /* Stack grows down. */
+ printf("Parent: %p\n", sp);
+ pid_t clone_pid = clone(Child, sp, CLONE_FILES | CLONE_VM, NULL, 0, 0, 0);
++ if (clone_pid == -1) {
++ perror("clone");
++ return 1;
++ }
+ int status;
+ pid_t wait_result = waitpid(clone_pid, &status, __WCLONE);
+ if (wait_result < 0) {
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-3.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-3.C
+@@ -1,5 +1,6 @@
+ /* Test various operators on __fp16 and mixed __fp16/float operands. */
+ /* { dg-do run { target arm*-*-* } } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ #include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-4.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-4.C
+@@ -1,5 +1,6 @@
+ /* Test various operators on __fp16 and mixed __fp16/float operands. */
+ /* { dg-do run { target arm*-*-* } } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative -ffast-math" } */
+
+ #include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-param-1.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-param-1.C
+@@ -1,10 +1,14 @@
+ /* { dg-do compile { target arm*-*-* } } */
+ /* { dg-options "-mfp16-format=ieee" } */
+
+-/* Functions cannot have parameters of type __fp16. */
+-extern void f (__fp16); /* { dg-error "parameters cannot have __fp16 type" } */
+-extern void (*pf) (__fp16); /* { dg-error "parameters cannot have __fp16 type" } */
++/* Test that the ACLE macro is defined. */
++#if __ARM_FP16_ARGS != 1
++#error Unexpected value for __ARM_FP16_ARGS
++#endif
++
++/* Test that __fp16 is supported as a parameter type. */
++extern void f (__fp16);
++extern void (*pf) (__fp16);
+
+-/* These should be OK. */
+ extern void g (__fp16 *);
+ extern void (*pg) (__fp16 *);
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-return-1.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-return-1.C
+@@ -1,10 +1,9 @@
+ /* { dg-do compile { target arm*-*-* } } */
+ /* { dg-options "-mfp16-format=ieee" } */
+
+-/* Functions cannot return type __fp16. */
+-extern __fp16 f (void); /* { dg-error "cannot return __fp16" } */
+-extern __fp16 (*pf) (void); /* { dg-error "cannot return __fp16" } */
++/* Test that __fp16 is supported as a return type. */
++extern __fp16 f (void);
++extern __fp16 (*pf) (void);
+
+-/* These should be OK. */
+ extern __fp16 *g (void);
+ extern __fp16 *(*pg) (void);
+--- a/src/gcc/testsuite/g++.dg/inherit/thunk1.C
++++ b/src/gcc/testsuite/g++.dg/inherit/thunk1.C
+@@ -1,4 +1,5 @@
+-// { dg-do run { target i?86-*-* x86_64-*-* s390*-*-* alpha*-*-* ia64-*-* sparc*-*-* } }
++// { dg-do run { target arm*-*-* aarch64*-*-* i?86-*-* x86_64-*-* s390*-*-* alpha*-*-* ia64-*-* sparc*-*-* } }
++// { dg-skip-if "" { arm_thumb1_ok } }
+
+ #include <stdarg.h>
+
+--- a/src/gcc/testsuite/g++.dg/lto/pr69589_0.C
++++ b/src/gcc/testsuite/g++.dg/lto/pr69589_0.C
+@@ -1,6 +1,8 @@
+ // { dg-lto-do link }
+-// { dg-lto-options "-O2 -rdynamic" }
++// { dg-lto-options "-O2 -rdynamic" }
+ // { dg-extra-ld-options "-r -nostdlib" }
++// { dg-skip-if "Skip targets without -rdynamic support" { arm*-none-eabi aarch64*-*-elf } { "*" } { "" } }
++
+ #pragma GCC visibility push(hidden)
+ struct A { int &operator[] (long); };
+ template <typename> struct B;
+--- /dev/null
++++ b/src/gcc/testsuite/g++.dg/opt/pr78201.C
+@@ -0,0 +1,13 @@
++// PR middle-end/78201
++// { dg-do compile }
++// { dg-options "-O2" }
++
++struct B { long d (); } *c;
++long e;
++
++void
++foo ()
++{
++ char a[e] = "";
++ c && c->d();
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.c-torture/compile/pr71112.c
+@@ -0,0 +1,10 @@
++/* PR target/71112. */
++/* { dg-additional-options "-fpie" { target pie } } */
++
++extern int dbs[100];
++void f (int *);
++int nscd_init (void)
++{
++ f (dbs);
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.c-torture/compile/pr71295.c
+@@ -0,0 +1,12 @@
++extern void fn2 (long long);
++int a;
++
++void
++fn1 ()
++{
++ long long b[3];
++ a = 0;
++ for (; a < 3; a++)
++ b[a] = 1;
++ fn2 (b[1]);
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.c-torture/compile/pr78362.c
+@@ -0,0 +1,11 @@
++/* PR target/78362. */
++
++long a;
++
++void
++foo (void)
++{
++ for (;; a--)
++ if ((int) a)
++ break;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.c-torture/compile/pr78694.c
+@@ -0,0 +1,118 @@
++/* PR target/78694. */
++
++enum
++{
++ MEMMODEL_RELAXED,
++ MEMMODEL_ACQUIRE,
++ PRIORITY_INSERT_END
++};
++enum
++{
++ PQ_CHILDREN,
++ PQ_TASKGROUP
++};
++struct gomp_team_state
++{
++ struct gomp_team *team;
++};
++enum gomp_task_kind
++{
++ GOMP_TASK_UNDEFERRED,
++ GOMP_TASK_WAITING
++};
++struct gomp_taskwait
++{
++ _Bool in_taskwait;
++};
++struct gomp_task
++{
++ struct gomp_task *parent;
++ int children_queue;
++ struct gomp_taskgroup *taskgroup;
++ int dependers;
++ struct gomp_taskwait taskwait;
++ enum gomp_task_kind kind;
++ _Bool in_tied_task;
++} j, q, *n;
++struct gomp_taskgroup
++{
++ _Bool in_taskgroup_wait;
++ int num_children;
++} l;
++struct gomp_team
++{
++ int task_queue;
++ int task_running_count;
++};
++struct gomp_thread
++{
++ struct gomp_team_state ts;
++ struct gomp_task task;
++} extern __thread a;
++
++int b, c, d, e, f, g, h, i, k, m, o, p, r;
++
++void priority_queue_next_task (struct gomp_task *, int, int);
++int gomp_task_run_pre (struct gomp_task *, struct gomp_task, struct gomp_team);
++void priority_queue_insert (int, struct gomp_task);
++void priority_queue_insert2 (int, struct gomp_task, int, int, int);
++void priority_queue_insert3 (int, struct gomp_task, int, int, int);
++void gomp_sem_post (int);
++void free (void *);
++
++_Bool s;
++int
++GOMP_taskgroup_end ()
++{
++ struct gomp_thread *t = &a;
++ struct gomp_team u = *t->ts.team;
++ struct gomp_task *v = &t->task, *w;
++ if (__atomic_load_n (&l.num_children, MEMMODEL_ACQUIRE))
++ while (1)
++ {
++ if (l.num_children)
++ priority_queue_next_task (v, u.task_queue, r);
++ else if (w)
++ free (w);
++ if (n->kind == GOMP_TASK_WAITING)
++ {
++ s = gomp_task_run_pre (n, q, u);
++ if (__builtin_expect (s, 0))
++ {
++ if (w)
++ free (w);
++ goto finish_cancelled;
++ }
++ n = 0;
++ l.in_taskgroup_wait = 1;
++ }
++ if (w)
++ {
++ t->task = *n;
++ if (__builtin_expect (p, 0))
++ if (o)
++ t->task = *v;
++ }
++ if (n)
++ {
++ struct gomp_task x = x;
++ for (; i; b++)
++ {
++ struct gomp_task y = j;
++ if (g)
++ continue;
++ priority_queue_insert (PQ_CHILDREN, x);
++ if (x.taskwait.in_taskwait)
++ priority_queue_insert2 (PQ_TASKGROUP, y, e, 0, d);
++ if (h)
++ gomp_sem_post (f);
++ priority_queue_insert3 (k, y, PRIORITY_INSERT_END, 0, d);
++ ++c;
++ }
++ }
++ finish_cancelled:
++ w = (struct gomp_task *) (n - u.task_running_count - v);
++ }
++ v->taskgroup = (struct gomp_taskgroup *) m;
++ return 1;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr37780.c
+@@ -0,0 +1,49 @@
++/* PR middle-end/37780. */
++
++#define VAL (8 * sizeof (int))
++
++int __attribute__ ((noinline, noclone))
++fooctz (int i)
++{
++ return (i == 0) ? VAL : __builtin_ctz (i);
++}
++
++int __attribute__ ((noinline, noclone))
++fooctz2 (int i)
++{
++ return (i != 0) ? __builtin_ctz (i) : VAL;
++}
++
++unsigned int __attribute__ ((noinline, noclone))
++fooctz3 (unsigned int i)
++{
++ return (i > 0) ? __builtin_ctz (i) : VAL;
++}
++
++int __attribute__ ((noinline, noclone))
++fooclz (int i)
++{
++ return (i == 0) ? VAL : __builtin_clz (i);
++}
++
++int __attribute__ ((noinline, noclone))
++fooclz2 (int i)
++{
++ return (i != 0) ? __builtin_clz (i) : VAL;
++}
++
++unsigned int __attribute__ ((noinline, noclone))
++fooclz3 (unsigned int i)
++{
++ return (i > 0) ? __builtin_clz (i) : VAL;
++}
++
++int
++main (void)
++{
++ if (fooctz (0) != VAL || fooctz2 (0) != VAL || fooctz3 (0) != VAL
++ || fooclz (0) != VAL || fooclz2 (0) != VAL || fooclz3 (0) != VAL)
++ __builtin_abort ();
++
++ return 0;
++}
+\ No newline at end of file
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr66940.c
+@@ -0,0 +1,20 @@
++long long __attribute__ ((noinline, noclone))
++foo (long long ival)
++{
++ if (ival <= 0)
++ return -0x7fffffffffffffffL - 1;
++
++ return 0x7fffffffffffffffL;
++}
++
++int
++main (void)
++{
++ if (foo (-1) != (-0x7fffffffffffffffL - 1))
++ __builtin_abort ();
++
++ if (foo (1) != 0x7fffffffffffffffL)
++ __builtin_abort ();
++
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.dg/asr_div1.c
++++ b/src/gcc/testsuite/gcc.dg/asr_div1.c
+@@ -1,6 +1,7 @@
+ /* Test division by const int generates only one shift. */
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fdump-rtl-combine-all" } */
++/* { dg-options "-O2 -fdump-rtl-combine-all -mtune=cortex-a53" { target aarch64*-*-* } } */
+
+ extern void abort (void);
+
+--- a/src/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-5.c
++++ b/src/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-5.c
+@@ -24,7 +24,7 @@
+ | FE_OVERFLOW \
+ | FE_UNDERFLOW)
+
+-#if defined __alpha__
++#if defined __alpha__ || defined __aarch64__
+ #define ITER_COUNT 100
+ #else
+ #define ITER_COUNT 10000
+--- a/src/gcc/testsuite/gcc.dg/cpp/trad/include.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/trad/include.c
+@@ -2,11 +2,5 @@
+
+ /* Test that macros are not expanded in the <> quotes of #inlcude. */
+
+-/* vxWorksCommon.h uses the "#" operator to construct the name of an
+- include file, thus making the file incompatible with -traditional-cpp.
+- Newlib uses ## when including stdlib.h as of 2007-09-07. */
+-/* { dg-do preprocess { target { { ! vxworks_kernel } && { ! newlib } } } } */
+-
+-#define __STDC__ 1 /* Stop complaints about non-ISO compilers. */
+-#define stdlib 1
+-#include <stdlib.h> /* { dg-bogus "o such file or directory" } */
++#define builtins 1
++#include <builtins.h> /* { dg-bogus "o such file or directory" } */
+--- a/src/gcc/testsuite/gcc.dg/cpp/trad/trad.exp
++++ b/src/gcc/testsuite/gcc.dg/cpp/trad/trad.exp
+@@ -29,7 +29,7 @@ load_lib gcc-dg.exp
+ # If a testcase doesn't have special options, use these.
+ global DEFAULT_TRADCPPFLAGS
+ if ![info exists DEFAULT_TRADCPPFLAGS] then {
+- set DEFAULT_TRADCPPFLAGS " -traditional-cpp"
++ set DEFAULT_TRADCPPFLAGS " -traditional-cpp -I$srcdir/$subdir/"
+ }
+
+ # Initialize `dg'.
+--- a/src/gcc/testsuite/gcc.dg/cpp/warn-undef-2.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/warn-undef-2.c
+@@ -1,5 +1,5 @@
+ // { dg-do preprocess }
+ // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=undef" }
+ /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
+-#if x // { dg-error "\"x\" is not defined .-Werror=undef." }
++#if x // { dg-error "\"x\" is not defined, evaluates to 0 .-Werror=undef." }
+ #endif
+--- a/src/gcc/testsuite/gcc.dg/cpp/warn-undef.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/warn-undef.c
+@@ -1,5 +1,5 @@
+ // { dg-do preprocess }
+ // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wundef" }
+
+-#if x // { dg-warning "\"x\" is not defined .-Wundef." }
++#if x // { dg-warning "\"x\" is not defined, evaluates to 0 .-Wundef." }
+ #endif
+--- a/src/gcc/testsuite/gcc.dg/lto/pr54709_0.c
++++ b/src/gcc/testsuite/gcc.dg/lto/pr54709_0.c
+@@ -1,6 +1,7 @@
+ /* { dg-lto-do link } */
+ /* { dg-require-visibility "hidden" } */
+ /* { dg-require-effective-target fpic } */
++/* { dg-require-effective-target shared } */
+ /* { dg-extra-ld-options { -shared } } */
+ /* { dg-lto-options { { -fPIC -fvisibility=hidden -flto } } } */
+
+--- a/src/gcc/testsuite/gcc.dg/lto/pr61526_0.c
++++ b/src/gcc/testsuite/gcc.dg/lto/pr61526_0.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target fpic } */
++/* { dg-require-effective-target shared } */
+ /* { dg-lto-do link } */
+ /* { dg-lto-options { { -fPIC -flto -flto-partition=1to1 } } } */
+ /* { dg-extra-ld-options { -shared } } */
+--- a/src/gcc/testsuite/gcc.dg/lto/pr64415_0.c
++++ b/src/gcc/testsuite/gcc.dg/lto/pr64415_0.c
+@@ -1,5 +1,6 @@
+ /* { dg-lto-do link } */
+ /* { dg-require-effective-target fpic } */
++/* { dg-require-effective-target shared } */
+ /* { dg-lto-options { { -O -flto -fpic } } } */
+ /* { dg-extra-ld-options { -shared } } */
+ /* { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */
+--- a/src/gcc/testsuite/gcc.dg/plugin/plugin.exp
++++ b/src/gcc/testsuite/gcc.dg/plugin/plugin.exp
+@@ -87,6 +87,12 @@ foreach plugin_test $plugin_test_list {
+ if ![runtest_file_p $runtests $plugin_src] then {
+ continue
+ }
++ # Skip tail call tests on targets that do not have sibcall_epilogue.
++ if {[regexp ".*must_tail_call_plugin.c" $plugin_src]
++ && [istarget arm*-*-*]
++ && [check_effective_target_arm_thumb1]} then {
++ continue
++ }
+ set plugin_input_tests [lreplace $plugin_test 0 0]
+ plugin-test-execute $plugin_src $plugin_input_tests
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/pr59833.c
+@@ -0,0 +1,18 @@
++/* { dg-do run { target { *-*-linux* *-*-gnu* } } } */
++/* { dg-options "-O0 -lm" } */
++/* { dg-require-effective-target issignaling } */
++
++#define _GNU_SOURCE
++#include <math.h>
++
++int main (void)
++{
++ float sNaN = __builtin_nansf ("");
++ double x = (double) sNaN;
++ if (issignaling(x))
++ {
++ __builtin_abort();
++ }
++
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/pr68217.c
+@@ -0,0 +1,14 @@
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fdump-tree-vrp1" } */
++
++int foo (void)
++{
++ volatile int a = -1;
++ long long b = (1LL << (sizeof (b) * 8 - 1)); // LLONG_MIN
++ long long x = (a & b); // x == 0x8000000000000000
++ if (x < 1LL) { ; } else { __builtin_abort(); }
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump "\\\[-INF, 0\\\]" "vrp1" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/pr71636-1.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-fdump-tree-gimple" } */
++
++unsigned f(unsigned x, unsigned b)
++{
++ return x & ((1U << b) - 1);
++}
++
++/* { dg-final { scan-tree-dump-not "1 <<" "gimple" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/pr71636-2.c
+@@ -0,0 +1,12 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fdump-tree-forwprop-details" } */
++
++unsigned f(unsigned x, unsigned b)
++{
++ unsigned t1 = 1U << b;
++ unsigned t2 = t1 - 1;
++ unsigned t3 = x & t2;
++ return t3;
++}
++
++/* { dg-final { scan-tree-dump "_\[0-9\] = ~_\[0-9\]" "forwprop1" } } */
+--- a/src/gcc/testsuite/gcc.dg/strlenopt-20.c
++++ b/src/gcc/testsuite/gcc.dg/strlenopt-20.c
+@@ -86,9 +86,9 @@ main ()
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strchr \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
+--- a/src/gcc/testsuite/gcc.dg/strlenopt-21.c
++++ b/src/gcc/testsuite/gcc.dg/strlenopt-21.c
+@@ -57,9 +57,9 @@ main ()
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "memcpy \\(" 3 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strchr \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
+--- a/src/gcc/testsuite/gcc.dg/strlenopt-22.c
++++ b/src/gcc/testsuite/gcc.dg/strlenopt-22.c
+@@ -31,9 +31,9 @@ main ()
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strlen \\(" 4 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "memcpy \\(" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strchr \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
+--- a/src/gcc/testsuite/gcc.dg/strlenopt-22g.c
++++ b/src/gcc/testsuite/gcc.dg/strlenopt-22g.c
+@@ -5,9 +5,9 @@
+ #define USE_GNU
+ #include "strlenopt-22.c"
+
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "memcpy \\(" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strchr \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "stpcpy \\(" 1 "strlen" } } */
+--- a/src/gcc/testsuite/gcc.dg/strlenopt-26.c
++++ b/src/gcc/testsuite/gcc.dg/strlenopt-26.c
+@@ -21,4 +21,5 @@ main (void)
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+--- a/src/gcc/testsuite/gcc.dg/strlenopt-5.c
++++ b/src/gcc/testsuite/gcc.dg/strlenopt-5.c
+@@ -48,9 +48,9 @@ main ()
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "memcpy \\(" 2 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strchr \\(" 2 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
+--- a/src/gcc/testsuite/gcc.dg/strlenopt-7.c
++++ b/src/gcc/testsuite/gcc.dg/strlenopt-7.c
+@@ -40,11 +40,11 @@ main ()
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "memcpy \\(" 2 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strchr \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "\\*r_\[0-9\]* = 0;" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "return 3;" 1 "optimized" } } */
+--- a/src/gcc/testsuite/gcc.dg/strlenopt-9.c
++++ b/src/gcc/testsuite/gcc.dg/strlenopt-9.c
+@@ -98,10 +98,10 @@ main ()
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strlen \\(" 5 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "memcpy \\(" 6 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strchr \\(" 3 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "return 4;" 1 "optimized" } } */
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-int-convert-alt.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-int-convert-alt.c
+@@ -1,5 +1,6 @@
+ /* Test floating-point conversions. Standard types and __fp16. */
+ /* { dg-do run { target arm*-*-* } } */
++/* { dg-require-effective-target arm_fp16_alternative_ok }
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ #include "fp-int-convert.h"
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-3.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-3.c
+@@ -1,5 +1,6 @@
+ /* Test various operators on __fp16 and mixed __fp16/float operands. */
+ /* { dg-do run { target arm*-*-* } } */
++/* { dg-require-effective-target arm_fp16_alternative_ok }
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ #include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-4.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-4.c
+@@ -1,5 +1,6 @@
+ /* Test various operators on __fp16 and mixed __fp16/float operands. */
+ /* { dg-do run { target arm*-*-* } } */
++/* { dg-require-effective-target arm_fp16_alternative_ok }
+ /* { dg-options "-mfp16-format=alternative -ffast-math" } */
+
+ #include "arm-fp16-ops.h"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/torture/pr71594.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-options "--param max-rtl-if-conversion-insns=2" } */
++
++unsigned short a;
++int b, c;
++int *d;
++void fn1() {
++ *d = 24;
++ for (; *d <= 65;) {
++ unsigned short *e = &a;
++ b = (a &= 0 <= 0) < (c ?: (*e %= *d));
++ for (; *d <= 83;)
++ ;
++ }
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr61839_1.c
+@@ -0,0 +1,44 @@
++/* PR tree-optimization/61839. */
++/* { dg-do run } */
++/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-optimized" } */
++/* { dg-require-effective-target int32plus } */
++
++__attribute__ ((noinline))
++int foo ()
++{
++ int a = -1;
++ volatile unsigned b = 1U;
++ int c = 1;
++ c = (a + 972195718) >> (1LU <= b);
++ if (c == 486097858)
++ ;
++ else
++ __builtin_abort ();
++ return 0;
++}
++
++__attribute__ ((noinline))
++int bar ()
++{
++ int a = -1;
++ volatile unsigned b = 1U;
++ int c = 1;
++ c = (a + 972195718) >> (b ? 2 : 3);
++ if (c == 243048929)
++ ;
++ else
++ __builtin_abort ();
++ return 0;
++}
++
++int main ()
++{
++ foo ();
++ bar ();
++}
++
++/* Scan for c = 972195717) >> [0, 1] in function foo. */
++/* { dg-final { scan-tree-dump-times "486097858 : 972195717" 1 "vrp1" } } */
++/* Scan for c = 972195717) >> [2, 3] in function bar. */
++/* { dg-final { scan-tree-dump-times "243048929 : 121524464" 2 "vrp1" } } */
++/* { dg-final { scan-tree-dump-times "486097858" 0 "optimized" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr61839_2.c
+@@ -0,0 +1,54 @@
++/* PR tree-optimization/61839. */
++/* { dg-do compile } */
++/* { dg-options "-O2 -fdump-tree-vrp1" } */
++/* { dg-require-effective-target int32plus } */
++
++__attribute__ ((noinline))
++int foo ()
++{
++ int a = -1;
++ volatile unsigned b = 1U;
++ int c = 1;
++ c = (a + 972195718) / (b ? 1 : 0);
++ if (c == 972195717)
++ ;
++ else
++ __builtin_abort ();
++ return 0;
++}
++
++__attribute__ ((noinline))
++int bar ()
++{
++ int a = -1;
++ volatile unsigned b = 1U;
++ int c = 1;
++ c = (a + 972195718) % (b ? 1 : 0);
++ if (c == 972195717)
++ ;
++ else
++ __builtin_abort ();
++ return 0;
++}
++
++__attribute__ ((noinline))
++int bar2 ()
++{
++ int a = -1;
++ volatile unsigned b = 1U;
++ int c = 1;
++ c = (a + 972195716) % (b ? 1 : 2);
++ if (c == 972195715)
++ ;
++ else
++ __builtin_abort ();
++ return 0;
++}
++
++
++/* Dont optimize 972195717 / 0 in function foo. */
++/* { dg-final { scan-tree-dump-times "972195717 / _" 1 "vrp1" } } */
++/* Dont optimize 972195717 % 0 in function bar. */
++/* { dg-final { scan-tree-dump-times "972195717 % _" 1 "vrp1" } } */
++/* Optimize in function bar2. */
++/* { dg-final { scan-tree-dump-times "972195715 % _" 0 "vrp1" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr61839_3.c
+@@ -0,0 +1,26 @@
++/* PR tree-optimization/61839. */
++/* { dg-do run } */
++/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-optimized" } */
++
++__attribute__ ((noinline))
++int foo (int a, unsigned b)
++{
++ int c = 1;
++ b = a ? 12 : 13;
++ c = b << 8;
++ if (c == 3072)
++ ;
++ else
++ __builtin_abort ();
++ return 0;
++}
++
++int main ()
++{
++ volatile unsigned b = 1U;
++ foo (-1, b);
++}
++
++/* Scan for c [12, 13] << 8 in function foo. */
++/* { dg-final { scan-tree-dump-times "3072 : 3328" 2 "vrp1" } } */
++/* { dg-final { scan-tree-dump-times "3072" 0 "optimized" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr61839_4.c
+@@ -0,0 +1,28 @@
++/* PR tree-optimization/61839. */
++/* { dg-do run } */
++/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-optimized" } */
++/* { dg-require-effective-target int32plus } */
++
++__attribute__ ((noinline))
++int foo (int a, unsigned b)
++{
++ unsigned c = 1;
++ if (b >= 1 && b <= ((unsigned)(-1) - 1))
++ return 0;
++ c = b >> 4;
++ if (c == 268435455)
++ ;
++ else
++ __builtin_abort ();
++ return 0;
++}
++
++int main ()
++{
++ volatile unsigned b = (unsigned)(-1);
++ foo (-1, b);
++}
++
++/* Scan for ~[1, 4294967294] >> 4 in function foo. */
++/* { dg-final { scan-tree-dump-times "0 : 268435455" 1 "vrp1" } } */
++/* { dg-final { scan-tree-dump-times "268435455" 0 "optimized" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/scev-11.c
+@@ -0,0 +1,28 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fdump-tree-ivopts-details" } */
++
++int a[128];
++extern int b[];
++
++int bar (int *);
++
++int
++foo (int n)
++{
++ int i;
++
++ for (i = 0; i < n; i++)
++ {
++ unsigned char uc = (unsigned char)i;
++ a[i] = i;
++ b[uc] = 0;
++ }
++
++ bar (a);
++ return 0;
++}
++
++/* Address of array reference to b is scev. */
++/* { dg-final { scan-tree-dump-times "use \[0-9\]\n address" 2 "ivopts" } } */
++
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/scev-12.c
+@@ -0,0 +1,30 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fdump-tree-ivopts-details" } */
++
++int a[128];
++extern int b[];
++
++int bar (int *);
++
++int
++foo (int x, int n)
++{
++ int i;
++
++ for (i = 0; i < n; i++)
++ {
++ unsigned char uc = (unsigned char)i;
++ if (x)
++ a[i] = i;
++ b[uc] = 0;
++ }
++
++ bar (a);
++ return 0;
++}
++
++/* Address of array reference to b is not scev. */
++/* { dg-final { scan-tree-dump-times "use \[0-9\]\n address" 1 "ivopts" } } */
++
++
++
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c
+@@ -25,6 +25,7 @@ f1 (int i, ...)
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -45,6 +46,7 @@ f2 (int i, ...)
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 8 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 1 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -60,6 +62,7 @@ f3 (int i, ...)
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 1 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 16 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[1-9\]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[1-9\]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */
+@@ -78,6 +81,7 @@ f4 (int i, ...)
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -96,6 +100,7 @@ f5 (int i, ...)
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -116,6 +121,7 @@ f6 (int i, ...)
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 24 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 3 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -133,6 +139,7 @@ f7 (int i, ...)
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -152,6 +159,7 @@ f8 (int i, ...)
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -169,6 +177,7 @@ f9 (int i, ...)
+ /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -188,6 +197,7 @@ f10 (int i, ...)
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -208,6 +218,7 @@ f11 (int i, ...)
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 24 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 3 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -228,6 +239,7 @@ f12 (int i, ...)
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 24 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and 3 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and 48 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -248,6 +260,7 @@ f13 (int i, ...)
+ /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
+ /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 24 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and 3 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and 48 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -268,6 +281,7 @@ f14 (int i, ...)
+ /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
+ /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 24 GPR units and 3" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 1 GPR units and 2 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -291,6 +305,7 @@ f15 (int i, ...)
+ /* { dg-final { scan-tree-dump "f15: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
+ /* { dg-final { scan-tree-dump "f15: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
+ /* { dg-final { scan-tree-dump "f15: va_list escapes 0, needs to save 1 GPR units and 2 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f15: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+
+ /* We may be able to improve upon this after fixing PR66010/PR66013. */
+ /* { dg-final { scan-tree-dump "f15: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-3.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-3.c
+@@ -24,6 +24,7 @@ f1 (int i, ...)
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f1: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -39,6 +40,7 @@ f2 (int i, ...)
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f2: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -57,6 +59,7 @@ f3 (int i, ...)
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f3: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -73,6 +76,7 @@ f4 (int i, ...)
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -89,6 +93,7 @@ f5 (int i, ...)
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -107,6 +112,7 @@ f6 (int i, ...)
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f6: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -123,6 +129,7 @@ f7 (int i, ...)
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -139,6 +146,7 @@ f8 (int i, ...)
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -155,6 +163,7 @@ f10 (int i, ...)
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -171,6 +180,7 @@ f11 (int i, ...)
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f11: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f11: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -187,6 +197,7 @@ f12 (int i, ...)
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f12: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f12: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-4.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-4.c
+@@ -27,6 +27,7 @@ f1 (int i, ...)
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -44,6 +45,7 @@ f2 (int i, ...)
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -67,6 +69,7 @@ f3 (int i, ...)
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 1 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+@@ -88,6 +91,7 @@ f4 (int i, ...)
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 8 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 0 GPR units and 1 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 0 GPR units and 16 FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-5.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-5.c
+@@ -25,6 +25,7 @@ f1 (int i, ...)
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+
+ void
+ f2 (int i, ...)
+@@ -38,6 +39,7 @@ f2 (int i, ...)
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+
+ /* Here va_arg can be executed at most as many times as va_start. */
+ void
+@@ -56,6 +58,7 @@ f3 (int i, ...)
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 32 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 1 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+
+ void
+ f4 (int i, ...)
+@@ -74,6 +77,7 @@ f4 (int i, ...)
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 16 GPR units and 16 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 24 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 2 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+
+ void
+ f5 (int i, ...)
+@@ -88,6 +92,7 @@ f5 (int i, ...)
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 16 GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 32 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save (4|2) GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 16 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
+
+ void
+ f6 (int i, ...)
+@@ -102,6 +107,7 @@ f6 (int i, ...)
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 32 GPR units and 3" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|2) GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target aarch64*-*-* } } } */
+
+ void
+ f7 (int i, ...)
+@@ -116,3 +122,4 @@ f7 (int i, ...)
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 0 GPR units and 64 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 32 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 2 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 0 GPR units and 64 FPR units" "stdarg" { target aarch64*-*-* } } } */
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-6.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/stdarg-6.c
+@@ -30,6 +30,7 @@ bar (int x, char const *y, ...)
+ /* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
+ /* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
+ /* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
++/* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
+ /* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
+ /* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
+ /* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
+--- a/src/gcc/testsuite/gcc.dg/uninit-pred-8_a.c
++++ b/src/gcc/testsuite/gcc.dg/uninit-pred-8_a.c
+@@ -1,6 +1,8 @@
+
+ /* { dg-do compile } */
+ /* { dg-options "-Wuninitialized -O2" } */
++/* Pick a particular tuning to pin down BRANCH_COST. */
++/* { dg-additional-options "-mtune=cortex-a15" { target arm*-*-* } } */
+
+ int g;
+ void bar();
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/vect/aligned-section-anchors-vect-70.c
+@@ -0,0 +1,33 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target section_anchors } */
++/* { dg-require-effective-target vect_int } */
++
++#define N 32
++
++/* Increase alignment of struct if an array's offset is multiple of alignment of
++ vector type corresponding to it's scalar type.
++ For the below test-case:
++ offsetof(e) == 8 bytes.
++ i) For arm: let x = alignment of vector type corresponding to int,
++ x == 8 bytes.
++ Since offsetof(e) % x == 0, set DECL_ALIGN(a, b, c) to x.
++ ii) For aarch64, ppc: x == 16 bytes.
++ Since offsetof(e) % x != 0, don't increase alignment of a, b, c.
++*/
++
++static struct A {
++ int p1, p2;
++ int e[N];
++} a, b, c;
++
++int foo(void)
++{
++ for (int i = 0; i < N; i++)
++ a.e[i] = b.e[i] + c.e[i];
++
++ return a.e[0];
++}
++
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 0 "increase_alignment" { target aarch64*-*-* } } } */
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 0 "increase_alignment" { target powerpc64*-*-* } } } */
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 3 "increase_alignment" { target arm*-*-* } } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/vect/aligned-section-anchors-vect-71.c
+@@ -0,0 +1,25 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target section_anchors } */
++/* { dg-require-effective-target vect_int } */
++
++/* Should not increase alignment of the struct because
++ sizeof (A.e) < sizeof(corresponding vector type). */
++
++#define N 3
++
++static struct A {
++ int p1, p2;
++ int e[N];
++} a, b, c;
++
++int foo(void)
++{
++ for (int i = 0; i < N; i++)
++ a.e[i] = b.e[i] + c.e[i];
++
++ return a.e[0];
++}
++
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 0 "increase_alignment" { target aarch64*-*-* } } } */
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 0 "increase_alignment" { target powerpc64*-*-* } } } */
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 0 "increase_alignment" { target arm*-*-* } } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/vect/aligned-section-anchors-vect-72.c
+@@ -0,0 +1,29 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target section_anchors } */
++/* { dg-require-effective-target vect_int } */
++
++#define N 32
++
++/* Clone of section-anchors-vect-70.c having nested struct. */
++
++struct S
++{
++ int e[N];
++};
++
++static struct A {
++ int p1, p2;
++ struct S s;
++} a, b, c;
++
++int foo(void)
++{
++ for (int i = 0; i < N; i++)
++ a.s.e[i] = b.s.e[i] + c.s.e[i];
++
++ return a.s.e[0];
++}
++
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 0 "increase_alignment" { target aarch64*-*-* } } } */
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 0 "increase_alignment" { target powerpc64*-*-* } } } */
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 3 "increase_alignment" { target arm*-*-* } } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/vect/pr57206.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target vect_float } */
++
++void bad0(float * d, unsigned int n)
++{
++ unsigned int i;
++ for (i=n; i>0; --i)
++ d[n-i] = 0.0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/vect/pr65951.c
+@@ -0,0 +1,63 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 512
++
++/* These multiplications should be vectorizable with additions when
++ no vector shift is available. */
++
++__attribute__ ((noinline)) void
++foo (int *arr)
++{
++ for (int i = 0; i < N; i++)
++ arr[i] *= 2;
++}
++
++__attribute__ ((noinline)) void
++foo2 (int *arr)
++{
++ for (int i = 0; i < N; i++)
++ arr[i] *= 4;
++}
++
++int
++main (void)
++{
++ check_vect ();
++ int data[N];
++ int i;
++
++ for (i = 0; i < N; i++)
++ {
++ data[i] = i;
++ __asm__ volatile ("");
++ }
++
++ foo (data);
++ for (i = 0; i < N; i++)
++ {
++ if (data[i] / 2 != i)
++ __builtin_abort ();
++ __asm__ volatile ("");
++ }
++
++ for (i = 0; i < N; i++)
++ {
++ data[i] = i;
++ __asm__ volatile ("");
++ }
++
++ foo2 (data);
++ for (i = 0; i < N; i++)
++ {
++ if (data[i] / 4 != i)
++ __builtin_abort ();
++ __asm__ volatile ("");
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/vect/pr71818.c
+@@ -0,0 +1,16 @@
++/* { dg-do compile } */
++
++char a;
++short b;
++int c, d;
++void fn1() {
++ char e = 75, g;
++ unsigned char *f = &e;
++ a = 21;
++ for (; a <= 48; a++) {
++ for (; e <= 6;)
++ ;
++ g -= e -= b || g <= c;
++ }
++ d = *f;
++}
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-iv-9.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-iv-9.c
+@@ -33,5 +33,4 @@ int main (void)
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_int_mult } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target {! vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-load-lanes-peeling-1.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_load_lanes } */
++
++void
++f (int *__restrict a, int *__restrict b)
++{
++ for (int i = 0; i < 96; ++i)
++ a[i] = b[i * 3] + b[i * 3 + 1] + b[i * 3 + 2];
++}
++
++/* { dg-final { scan-tree-dump-not "Data access with gaps" "vect" } } */
++/* { dg-final { scan-tree-dump-not "epilog loop required" "vect" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-mult-const-pattern-1.c
+@@ -0,0 +1,41 @@
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_shift } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 256
++
++__attribute__ ((noinline)) void
++foo (long long *arr)
++{
++ for (int i = 0; i < N; i++)
++ arr[i] *= 123;
++}
++
++int
++main (void)
++{
++ check_vect ();
++ long long data[N];
++ int i;
++
++ for (i = 0; i < N; i++)
++ {
++ data[i] = i;
++ __asm__ volatile ("");
++ }
++
++ foo (data);
++ for (i = 0; i < N; i++)
++ {
++ if (data[i] / 123 != i)
++ __builtin_abort ();
++ __asm__ volatile ("");
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vect_recog_mult_pattern: detected" 2 "vect" { target aarch64*-*-* } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target aarch64*-*-* } } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-mult-const-pattern-2.c
+@@ -0,0 +1,40 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 256
++
++__attribute__ ((noinline)) void
++foo (long long *arr)
++{
++ for (int i = 0; i < N; i++)
++ arr[i] *= -19594LL;
++}
++
++int
++main (void)
++{
++ check_vect ();
++ long long data[N];
++ int i;
++
++ for (i = 0; i < N; i++)
++ {
++ data[i] = i;
++ __asm__ volatile ("");
++ }
++
++ foo (data);
++ for (i = 0; i < N; i++)
++ {
++ if (data[i] / -19594LL != i)
++ __builtin_abort ();
++ __asm__ volatile ("");
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vect_recog_mult_pattern: detected" 2 "vect" { target aarch64*-*-* } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target aarch64*-*-* } } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp
+@@ -53,7 +53,10 @@ torture-init
+ set-torture-options $C_TORTURE_OPTIONS {{}} $LTO_TORTURE_OPTIONS
+
+ # Make sure Neon flags are provided, if necessary. Use fp16 if we can.
+-if {[check_effective_target_arm_neon_fp16_ok]} then {
++# Use fp16 arithmetic operations if the hardware supports it.
++if {[check_effective_target_arm_v8_2a_fp16_neon_hw]} then {
++ set additional_flags [add_options_for_arm_v8_2a_fp16_neon ""]
++} elseif {[check_effective_target_arm_neon_fp16_ok]} then {
+ set additional_flags [add_options_for_arm_neon_fp16 ""]
+ } else {
+ set additional_flags [add_options_for_arm_neon ""]
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
+@@ -16,6 +16,14 @@ extern void *memset(void *, int, size_t);
+ extern void *memcpy(void *, const void *, size_t);
+ extern size_t strlen(const char *);
+
++/* Helper macro to select FP16 tests. */
++#if (defined (__ARM_FP16_FORMAT_IEEE) \
++ || defined (__ARM_FP16_FORMAT_ALTERNATIVE))
++#define FP16_SUPPORTED (1)
++#else
++#undef FP16_SUPPORTED
++#endif
++
+ /* Various string construction helpers. */
+
+ /*
+@@ -24,6 +32,13 @@ extern size_t strlen(const char *);
+ VECT_VAR(expected, int, 16, 4) -> expected_int16x4
+ VECT_VAR_DECL(expected, int, 16, 4) -> int16x4_t expected_int16x4
+ */
++/* Some instructions don't exist on ARM.
++ Use this macro to guard against them. */
++#ifdef __aarch64__
++#define AARCH64_ONLY(X) X
++#else
++#define AARCH64_ONLY(X)
++#endif
+
+ #define xSTR(X) #X
+ #define STR(X) xSTR(X)
+@@ -81,7 +96,7 @@ extern size_t strlen(const char *);
+ abort(); \
+ } \
+ } \
+- fprintf(stderr, "CHECKED %s\n", MSG); \
++ fprintf(stderr, "CHECKED %s %s\n", STR(VECT_TYPE(T, W, N)), MSG); \
+ }
+
+ /* Floating-point variant. */
+@@ -110,7 +125,36 @@ extern size_t strlen(const char *);
+ abort(); \
+ } \
+ } \
+- fprintf(stderr, "CHECKED %s\n", MSG); \
++ fprintf(stderr, "CHECKED %s %s\n", STR(VECT_TYPE(T, W, N)), MSG); \
++ }
++
++/* poly variant. */
++#define CHECK_POLY(MSG,T,W,N,FMT,EXPECTED,COMMENT) \
++ { \
++ int i; \
++ for(i=0; i<N ; i++) \
++ { \
++ union poly_operand { \
++ uint##W##_t i; \
++ poly##W##_t p; \
++ } tmp_res, tmp_exp; \
++ tmp_res.p = VECT_VAR(result, T, W, N)[i]; \
++ tmp_exp.i = VECT_VAR(EXPECTED, T, W, N)[i]; \
++ if (tmp_res.i != tmp_exp.i) { \
++ fprintf(stderr, \
++ "ERROR in %s (%s line %d in buffer '%s') at type %s " \
++ "index %d: got 0x%" FMT " != 0x%" FMT " %s\n", \
++ MSG, __FILE__, __LINE__, \
++ STR(EXPECTED), \
++ STR(VECT_NAME(T, W, N)), \
++ i, \
++ tmp_res.i, \
++ tmp_exp.i, \
++ strlen(COMMENT) > 0 ? COMMENT : ""); \
++ abort(); \
++ } \
++ } \
++ fprintf(stderr, "CHECKED %s %s\n", STR(VECT_TYPE(T, W, N)), MSG); \
+ }
+
+ /* Clean buffer with a non-zero pattern to help diagnose buffer
+@@ -133,10 +177,16 @@ static ARRAY(result, uint, 32, 2);
+ static ARRAY(result, uint, 64, 1);
+ static ARRAY(result, poly, 8, 8);
+ static ARRAY(result, poly, 16, 4);
++#if defined (__ARM_FEATURE_CRYPTO)
++static ARRAY(result, poly, 64, 1);
++#endif
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ static ARRAY(result, float, 16, 4);
+ #endif
+ static ARRAY(result, float, 32, 2);
++#ifdef __aarch64__
++static ARRAY(result, float, 64, 1);
++#endif
+ static ARRAY(result, int, 8, 16);
+ static ARRAY(result, int, 16, 8);
+ static ARRAY(result, int, 32, 4);
+@@ -147,6 +197,9 @@ static ARRAY(result, uint, 32, 4);
+ static ARRAY(result, uint, 64, 2);
+ static ARRAY(result, poly, 8, 16);
+ static ARRAY(result, poly, 16, 8);
++#if defined (__ARM_FEATURE_CRYPTO)
++static ARRAY(result, poly, 64, 2);
++#endif
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ static ARRAY(result, float, 16, 8);
+ #endif
+@@ -169,6 +222,7 @@ extern ARRAY(expected, poly, 8, 8);
+ extern ARRAY(expected, poly, 16, 4);
+ extern ARRAY(expected, hfloat, 16, 4);
+ extern ARRAY(expected, hfloat, 32, 2);
++extern ARRAY(expected, hfloat, 64, 1);
+ extern ARRAY(expected, int, 8, 16);
+ extern ARRAY(expected, int, 16, 8);
+ extern ARRAY(expected, int, 32, 4);
+@@ -193,8 +247,8 @@ extern ARRAY(expected, hfloat, 64, 2);
+ CHECK(test_name, uint, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, uint, 32, 2, PRIx32, EXPECTED, comment); \
+ CHECK(test_name, uint, 64, 1, PRIx64, EXPECTED, comment); \
+- CHECK(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
+- CHECK(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK_FP(test_name, float, 32, 2, PRIx32, EXPECTED, comment); \
+ \
+ CHECK(test_name, int, 8, 16, PRIx8, EXPECTED, comment); \
+@@ -205,8 +259,8 @@ extern ARRAY(expected, hfloat, 64, 2);
+ CHECK(test_name, uint, 16, 8, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, uint, 32, 4, PRIx32, EXPECTED, comment); \
+ CHECK(test_name, uint, 64, 2, PRIx64, EXPECTED, comment); \
+- CHECK(test_name, poly, 8, 16, PRIx8, EXPECTED, comment); \
+- CHECK(test_name, poly, 16, 8, PRIx16, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 8, 16, PRIx8, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 16, 8, PRIx16, EXPECTED, comment); \
+ CHECK_FP(test_name, float, 32, 4, PRIx32, EXPECTED, comment); \
+ } \
+
+@@ -335,7 +389,8 @@ extern int VECT_VAR(expected_cumulative_sat, uint, 64, 2);
+ strlen(COMMENT) > 0 ? " " COMMENT : ""); \
+ abort(); \
+ } \
+- fprintf(stderr, "CHECKED CUMULATIVE SAT %s\n", MSG); \
++ fprintf(stderr, "CHECKED CUMULATIVE SAT %s %s\n", \
++ STR(VECT_TYPE(T, W, N)), MSG); \
+ }
+
+ #define CHECK_CUMULATIVE_SAT_NAMED(test_name,EXPECTED,comment) \
+@@ -379,6 +434,9 @@ static void clean_results (void)
+ CLEAN(result, uint, 64, 1);
+ CLEAN(result, poly, 8, 8);
+ CLEAN(result, poly, 16, 4);
++#if defined (__ARM_FEATURE_CRYPTO)
++ CLEAN(result, poly, 64, 1);
++#endif
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ CLEAN(result, float, 16, 4);
+ #endif
+@@ -394,6 +452,9 @@ static void clean_results (void)
+ CLEAN(result, uint, 64, 2);
+ CLEAN(result, poly, 8, 16);
+ CLEAN(result, poly, 16, 8);
++#if defined (__ARM_FEATURE_CRYPTO)
++ CLEAN(result, poly, 64, 2);
++#endif
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ CLEAN(result, float, 16, 8);
+ #endif
+@@ -419,6 +480,13 @@ static void clean_results (void)
+ #define DECL_VARIABLE(VAR, T1, W, N) \
+ VECT_TYPE(T1, W, N) VECT_VAR(VAR, T1, W, N)
+
++#if defined (__ARM_FEATURE_CRYPTO)
++#define DECL_VARIABLE_CRYPTO(VAR, T1, W, N) \
++ DECL_VARIABLE(VAR, T1, W, N)
++#else
++#define DECL_VARIABLE_CRYPTO(VAR, T1, W, N)
++#endif
++
+ /* Declare only 64 bits signed variants. */
+ #define DECL_VARIABLE_64BITS_SIGNED_VARIANTS(VAR) \
+ DECL_VARIABLE(VAR, int, 8, 8); \
+@@ -454,6 +522,7 @@ static void clean_results (void)
+ DECL_VARIABLE_64BITS_UNSIGNED_VARIANTS(VAR); \
+ DECL_VARIABLE(VAR, poly, 8, 8); \
+ DECL_VARIABLE(VAR, poly, 16, 4); \
++ DECL_VARIABLE_CRYPTO(VAR, poly, 64, 1); \
+ DECL_VARIABLE(VAR, float, 16, 4); \
+ DECL_VARIABLE(VAR, float, 32, 2)
+ #else
+@@ -462,6 +531,7 @@ static void clean_results (void)
+ DECL_VARIABLE_64BITS_UNSIGNED_VARIANTS(VAR); \
+ DECL_VARIABLE(VAR, poly, 8, 8); \
+ DECL_VARIABLE(VAR, poly, 16, 4); \
++ DECL_VARIABLE_CRYPTO(VAR, poly, 64, 1); \
+ DECL_VARIABLE(VAR, float, 32, 2)
+ #endif
+
+@@ -472,6 +542,7 @@ static void clean_results (void)
+ DECL_VARIABLE_128BITS_UNSIGNED_VARIANTS(VAR); \
+ DECL_VARIABLE(VAR, poly, 8, 16); \
+ DECL_VARIABLE(VAR, poly, 16, 8); \
++ DECL_VARIABLE_CRYPTO(VAR, poly, 64, 2); \
+ DECL_VARIABLE(VAR, float, 16, 8); \
+ DECL_VARIABLE(VAR, float, 32, 4)
+ #else
+@@ -480,6 +551,7 @@ static void clean_results (void)
+ DECL_VARIABLE_128BITS_UNSIGNED_VARIANTS(VAR); \
+ DECL_VARIABLE(VAR, poly, 8, 16); \
+ DECL_VARIABLE(VAR, poly, 16, 8); \
++ DECL_VARIABLE_CRYPTO(VAR, poly, 64, 2); \
+ DECL_VARIABLE(VAR, float, 32, 4)
+ #endif
+ /* Declare all variants. */
+@@ -500,15 +572,6 @@ static void clean_results (void)
+ /* Helpers to initialize vectors. */
+ #define VDUP(VAR, Q, T1, T2, W, N, V) \
+ VECT_VAR(VAR, T1, W, N) = vdup##Q##_n_##T2##W(V)
+-#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+-/* Work around that there is no vdup_n_f16 intrinsic. */
+-#define vdup_n_f16(VAL) \
+- __extension__ \
+- ({ \
+- float16_t f = VAL; \
+- vld1_dup_f16(&f); \
+- })
+-#endif
+
+ #define VSET_LANE(VAR, Q, T1, T2, W, N, L, V) \
+ VECT_VAR(VAR, T1, W, N) = vset##Q##_lane_##T2##W(V, \
+@@ -521,6 +584,13 @@ static void clean_results (void)
+
+ /* Helpers to call macros with 1 constant and 5 variable
+ arguments. */
++#if defined (__ARM_FEATURE_CRYPTO)
++#define MACRO_CRYPTO(MACRO, VAR1, VAR2, T1, T2, T3, W, N) \
++ MACRO(VAR1, VAR2, T1, T2, T3, W, N)
++#else
++#define MACRO_CRYPTO(MACRO, VAR1, VAR2, T1, T2, T3, W, N)
++#endif
++
+ #define TEST_MACRO_64BITS_SIGNED_VARIANTS_1_5(MACRO, VAR) \
+ MACRO(VAR, , int, s, 8, 8); \
+ MACRO(VAR, , int, s, 16, 4); \
+@@ -591,13 +661,15 @@ static void clean_results (void)
+ TEST_MACRO_64BITS_SIGNED_VARIANTS_2_5(MACRO, VAR1, VAR2); \
+ TEST_MACRO_64BITS_UNSIGNED_VARIANTS_2_5(MACRO, VAR1, VAR2); \
+ MACRO(VAR1, VAR2, , poly, p, 8, 8); \
+- MACRO(VAR1, VAR2, , poly, p, 16, 4)
++ MACRO(VAR1, VAR2, , poly, p, 16, 4); \
++ MACRO_CRYPTO(MACRO, VAR1, VAR2, , poly, p, 64, 1)
+
+ #define TEST_MACRO_128BITS_VARIANTS_2_5(MACRO, VAR1, VAR2) \
+ TEST_MACRO_128BITS_SIGNED_VARIANTS_2_5(MACRO, VAR1, VAR2); \
+ TEST_MACRO_128BITS_UNSIGNED_VARIANTS_2_5(MACRO, VAR1, VAR2); \
+ MACRO(VAR1, VAR2, q, poly, p, 8, 16); \
+- MACRO(VAR1, VAR2, q, poly, p, 16, 8)
++ MACRO(VAR1, VAR2, q, poly, p, 16, 8); \
++ MACRO_CRYPTO(MACRO, VAR1, VAR2, q, poly, p, 64, 2)
+
+ #define TEST_MACRO_ALL_VARIANTS_2_5(MACRO, VAR1, VAR2) \
+ TEST_MACRO_64BITS_VARIANTS_2_5(MACRO, VAR1, VAR2); \
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/binary_op_float.inc
+@@ -0,0 +1,170 @@
++/* Floating-point only version of binary_op_no64.inc template. Currently only
++ float16_t is used. */
++
++#include <math.h>
++
++#define FNNAME1(NAME) exec_ ## NAME
++#define FNNAME(NAME) FNNAME1(NAME)
++
++void FNNAME (INSN_NAME) (void)
++{
++ int i;
++
++ /* Basic test: z = INSN (x, y), then store the result. */
++#define TEST_BINARY_OP1(INSN, Q, T1, T2, W, N) \
++ VECT_VAR(vector_res, T1, W, N) = \
++ INSN##Q##_##T2##W(VECT_VAR(vector, T1, W, N), \
++ VECT_VAR(vector2, T1, W, N)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
++
++#define TEST_BINARY_OP(INSN, Q, T1, T2, W, N) \
++ TEST_BINARY_OP1(INSN, Q, T1, T2, W, N) \
++
++#ifdef HAS_FLOAT16_VARIANT
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 4);
++
++ DECL_VARIABLE(vector, float, 16, 8);
++ DECL_VARIABLE(vector2, float, 16, 8);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
++
++#ifdef HAS_FLOAT_VARIANT
++ DECL_VARIABLE(vector, float, 32, 2);
++ DECL_VARIABLE(vector2, float, 32, 2);
++ DECL_VARIABLE(vector_res, float, 32, 2);
++
++ DECL_VARIABLE(vector, float, 32, 4);
++ DECL_VARIABLE(vector2, float, 32, 4);
++ DECL_VARIABLE(vector_res, float, 32, 4);
++#endif
++
++ clean_results ();
++
++ /* Initialize input "vector" from "buffer". */
++#ifdef HAS_FLOAT16_VARIANT
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
++#ifdef HAS_FLOAT_VARIANT
++ VLOAD(vector, buffer, , float, f, 32, 2);
++ VLOAD(vector, buffer, q, float, f, 32, 4);
++#endif
++
++ /* Choose init value arbitrarily, will be used as comparison value. */
++#ifdef HAS_FLOAT16_VARIANT
++ VDUP(vector2, , float, f, 16, 4, -15.5f);
++ VDUP(vector2, q, float, f, 16, 8, -14.5f);
++#endif
++#ifdef HAS_FLOAT_VARIANT
++ VDUP(vector2, , float, f, 32, 2, -15.5f);
++ VDUP(vector2, q, float, f, 32, 4, -14.5f);
++#endif
++
++#ifdef HAS_FLOAT16_VARIANT
++#define FLOAT16_VARIANT(MACRO, VAR) \
++ MACRO(VAR, , float, f, 16, 4); \
++ MACRO(VAR, q, float, f, 16, 8);
++#else
++#define FLOAT16_VARIANT(MACRO, VAR)
++#endif
++
++#ifdef HAS_FLOAT_VARIANT
++#define FLOAT_VARIANT(MACRO, VAR) \
++ MACRO(VAR, , float, f, 32, 2); \
++ MACRO(VAR, q, float, f, 32, 4);
++#else
++#define FLOAT_VARIANT(MACRO, VAR)
++#endif
++
++#define TEST_MACRO_NO64BIT_VARIANT_1_5(MACRO, VAR) \
++
++ /* Apply a binary operator named INSN_NAME. */
++ FLOAT16_VARIANT(TEST_BINARY_OP, INSN_NAME);
++ FLOAT_VARIANT(TEST_BINARY_OP, INSN_NAME);
++
++#ifdef HAS_FLOAT16_VARIANT
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
++
++ /* Extra FP tests with special values (NaN, ....) */
++ VDUP(vector, q, float, f, 16, 8, 1.0f);
++ VDUP(vector2, q, float, f, 16, 8, NAN);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_nan,
++ " FP special (NaN)");
++
++ VDUP(vector, q, float, f, 16, 8, -NAN);
++ VDUP(vector2, q, float, f, 16, 8, 1.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_mnan,
++ " FP special (-NaN)");
++
++ VDUP(vector, q, float, f, 16, 8, 1.0f);
++ VDUP(vector2, q, float, f, 16, 8, HUGE_VALF);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_inf,
++ " FP special (inf)");
++
++ VDUP(vector, q, float, f, 16, 8, -HUGE_VALF);
++ VDUP(vector2, q, float, f, 16, 8, 1.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_minf,
++ " FP special (-inf)");
++
++ VDUP(vector, q, float, f, 16, 8, 0.0f);
++ VDUP(vector2, q, float, f, 16, 8, -0.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_zero1,
++ " FP special (-0.0)");
++
++ VDUP(vector, q, float, f, 16, 8, -0.0f);
++ VDUP(vector2, q, float, f, 16, 8, 0.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_zero2,
++ " FP special (-0.0)");
++#endif
++
++#ifdef HAS_FLOAT_VARIANT
++ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, "");
++ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, "");
++
++ /* Extra FP tests with special values (NaN, ....) */
++ VDUP(vector, q, float, f, 32, 4, 1.0f);
++ VDUP(vector2, q, float, f, 32, 4, NAN);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
++ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_nan, " FP special (NaN)");
++
++ VDUP(vector, q, float, f, 32, 4, -NAN);
++ VDUP(vector2, q, float, f, 32, 4, 1.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
++ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_mnan, " FP special (-NaN)");
++
++ VDUP(vector, q, float, f, 32, 4, 1.0f);
++ VDUP(vector2, q, float, f, 32, 4, HUGE_VALF);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
++ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_inf, " FP special (inf)");
++
++ VDUP(vector, q, float, f, 32, 4, -HUGE_VALF);
++ VDUP(vector2, q, float, f, 32, 4, 1.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
++ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_minf, " FP special (-inf)");
++
++ VDUP(vector, q, float, f, 32, 4, 0.0f);
++ VDUP(vector2, q, float, f, 32, 4, -0.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
++ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_zero1, " FP special (-0.0)");
++
++ VDUP(vector, q, float, f, 32, 4, -0.0f);
++ VDUP(vector2, q, float, f, 32, 4, 0.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
++ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_zero2, " FP special (-0.0)");
++#endif
++}
++
++int main (void)
++{
++ FNNAME (INSN_NAME) ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/binary_op_no64.inc
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/binary_op_no64.inc
+@@ -28,6 +28,10 @@ void FNNAME (INSN_NAME) (void)
+
+ /* Initialize input "vector" from "buffer". */
+ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#ifdef HAS_FLOAT16_VARIANT
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
+ #ifdef HAS_FLOAT_VARIANT
+ VLOAD(vector, buffer, , float, f, 32, 2);
+ VLOAD(vector, buffer, q, float, f, 32, 4);
+@@ -46,15 +50,27 @@ void FNNAME (INSN_NAME) (void)
+ VDUP(vector2, q, uint, u, 8, 16, 0xf9);
+ VDUP(vector2, q, uint, u, 16, 8, 0xfff2);
+ VDUP(vector2, q, uint, u, 32, 4, 0xfffffff1);
++#ifdef HAS_FLOAT16_VARIANT
++ VDUP(vector2, , float, f, 16, 4, -15.5f);
++ VDUP(vector2, q, float, f, 16, 8, -14.5f);
++#endif
+ #ifdef HAS_FLOAT_VARIANT
+ VDUP(vector2, , float, f, 32, 2, -15.5f);
+ VDUP(vector2, q, float, f, 32, 4, -14.5f);
+ #endif
+
++#ifdef HAS_FLOAT16_VARIANT
++#define FLOAT16_VARIANT(MACRO, VAR) \
++ MACRO(VAR, , float, f, 16, 4); \
++ MACRO(VAR, q, float, f, 16, 8);
++#else
++#define FLOAT16_VARIANT(MACRO, VAR)
++#endif
++
+ #ifdef HAS_FLOAT_VARIANT
+ #define FLOAT_VARIANT(MACRO, VAR) \
+ MACRO(VAR, , float, f, 32, 2); \
+- MACRO(VAR, q, float, f, 32, 4)
++ MACRO(VAR, q, float, f, 32, 4);
+ #else
+ #define FLOAT_VARIANT(MACRO, VAR)
+ #endif
+@@ -72,7 +88,8 @@ void FNNAME (INSN_NAME) (void)
+ MACRO(VAR, q, uint, u, 8, 16); \
+ MACRO(VAR, q, uint, u, 16, 8); \
+ MACRO(VAR, q, uint, u, 32, 4); \
+- FLOAT_VARIANT(MACRO, VAR)
++ FLOAT_VARIANT(MACRO, VAR); \
++ FLOAT16_VARIANT(MACRO, VAR);
+
+ /* Apply a binary operator named INSN_NAME. */
+ TEST_MACRO_NO64BIT_VARIANT_1_5(TEST_BINARY_OP, INSN_NAME);
+@@ -90,6 +107,42 @@ void FNNAME (INSN_NAME) (void)
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
+
++#ifdef HAS_FLOAT16_VARIANT
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
++
++ /* Extra FP tests with special values (NaN, ....) */
++ VDUP(vector, q, float, f, 16, 8, 1.0f);
++ VDUP(vector2, q, float, f, 16, 8, NAN);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_nan, " FP special (NaN)");
++
++ VDUP(vector, q, float, f, 16, 8, -NAN);
++ VDUP(vector2, q, float, f, 16, 8, 1.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_mnan, " FP special (-NaN)");
++
++ VDUP(vector, q, float, f, 16, 8, 1.0f);
++ VDUP(vector2, q, float, f, 16, 8, HUGE_VALF);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_inf, " FP special (inf)");
++
++ VDUP(vector, q, float, f, 16, 8, -HUGE_VALF);
++ VDUP(vector2, q, float, f, 16, 8, 1.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_minf, " FP special (-inf)");
++
++ VDUP(vector, q, float, f, 16, 8, 0.0f);
++ VDUP(vector2, q, float, f, 16, 8, -0.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_zero1, " FP special (-0.0)");
++
++ VDUP(vector, q, float, f, 16, 8, -0.0f);
++ VDUP(vector2, q, float, f, 16, 8, 0.0f);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_zero2, " FP special (-0.0)");
++#endif
++
+ #ifdef HAS_FLOAT_VARIANT
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, "");
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, "");
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/binary_scalar_op.inc
+@@ -0,0 +1,160 @@
++/* Template file for binary scalar operator validation.
++
++ This file is meant to be included by test files for binary scalar
++ operations. */
++
++/* Check for required settings. */
++
++#ifndef INSN_NAME
++#error INSN_NAME (the intrinsic to test) must be defined.
++#endif
++
++#ifndef INPUT_TYPE
++#error INPUT_TYPE (basic type of an input value) must be defined.
++#endif
++
++#ifndef OUTPUT_TYPE
++#error OUTPUT_TYPE (basic type of an output value) must be defined.
++#endif
++
++#ifndef OUTPUT_TYPE_SIZE
++#error OUTPUT_TYPE_SIZE (size in bits of an output value) must be defined.
++#endif
++
++/* Optional settings:
++
++ INPUT_1: Input values for the first parameter. Must be of type INPUT_TYPE.
++ INPUT_2: Input values for the first parameter. Must be of type
++ INPUT_TYPE. */
++
++#ifndef TEST_MSG
++#define TEST_MSG "unnamed test"
++#endif
++
++/* The test framework. */
++
++#include <stdio.h>
++
++extern void abort ();
++
++#define INFF __builtin_inf ()
++
++/* Stringify a macro. */
++#define STR0(A) #A
++#define STR(A) STR0 (A)
++
++/* Macro concatenation. */
++#define CAT0(A, B) A##B
++#define CAT(A, B) CAT0 (A, B)
++
++/* Format strings for error reporting. */
++#define FMT16 "0x%04x"
++#define FMT32 "0x%08x"
++#define FMT CAT (FMT,OUTPUT_TYPE_SIZE)
++
++/* Type construction: forms TS_t, where T is the base type and S the size in
++ bits. */
++#define MK_TYPE0(T, S) T##S##_t
++#define MK_TYPE(T, S) MK_TYPE0 (T, S)
++
++/* Convenience types for input and output data. */
++typedef MK_TYPE (uint, OUTPUT_TYPE_SIZE) output_hex_type;
++
++/* Conversion between typed values and their hexadecimal representation. */
++typedef union
++{
++ OUTPUT_TYPE value;
++ output_hex_type hex;
++} output_conv_type;
++
++/* Default input values. */
++
++float16_t input_1_float16_t[] =
++{
++ 0.0, -0.0,
++ 2.0, 3.1,
++ 20.0, 0.40,
++ -2.3, 1.33,
++ -7.6, 0.31,
++ 0.3353, 0.5,
++ 1.0, 13.13,
++ -6.3, 20.0,
++ (float16_t)INFF, (float16_t)-INFF,
++};
++
++float16_t input_2_float16_t[] =
++{
++ 1.0, 1.0,
++ -4.33, 100.0,
++ 30.0, -0.02,
++ 0.5, -7.231,
++ -6.3, 20.0,
++ -7.231, 2.3,
++ -7.6, 5.1,
++ 0.31, 0.33353,
++ (float16_t)-INFF, (float16_t)INFF,
++};
++
++#ifndef INPUT_1
++#define INPUT_1 CAT (input_1_,INPUT_TYPE)
++#endif
++
++#ifndef INPUT_2
++#define INPUT_2 CAT (input_2_,INPUT_TYPE)
++#endif
++
++/* Support macros and routines for the test function. */
++
++#define CHECK() \
++ { \
++ output_conv_type actual; \
++ output_conv_type expect; \
++ \
++ expect.hex = ((output_hex_type*)EXPECTED)[index]; \
++ actual.value = INSN_NAME ((INPUT_1)[index], \
++ (INPUT_2)[index]); \
++ \
++ if (actual.hex != expect.hex) \
++ { \
++ fprintf (stderr, \
++ "ERROR in %s (%s line %d), buffer %s, " \
++ "index %d: got " \
++ FMT " != " FMT "\n", \
++ TEST_MSG, __FILE__, __LINE__, \
++ STR (EXPECTED), index, \
++ actual.hex, expect.hex); \
++ abort (); \
++ } \
++ fprintf (stderr, "CHECKED %s %s\n", \
++ STR (EXPECTED), TEST_MSG); \
++ }
++
++#define FNNAME1(NAME) exec_ ## NAME
++#define FNNAME(NAME) FNNAME1 (NAME)
++
++/* The test function. */
++
++void
++FNNAME (INSN_NAME) (void)
++{
++ /* Basic test: y[i] = OP (x[i]), for each INPUT[i], then compare the result
++ against EXPECTED[i]. */
++
++ const int num_tests = sizeof (INPUT_1) / sizeof (INPUT_1[0]);
++ int index;
++
++ for (index = 0; index < num_tests; index++)
++ CHECK ();
++
++#ifdef EXTRA_TESTS
++ EXTRA_TESTS ();
++#endif
++}
++
++int
++main (void)
++{
++ FNNAME (INSN_NAME) ();
++
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/cmp_fp_op.inc
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/cmp_fp_op.inc
+@@ -15,6 +15,10 @@
+ each test file. */
+ extern ARRAY(expected2, uint, 32, 2);
+ extern ARRAY(expected2, uint, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++extern ARRAY(expected2, uint, 16, 4);
++extern ARRAY(expected2, uint, 16, 8);
++#endif
+
+ #define FNNAME1(NAME) exec_ ## NAME
+ #define FNNAME(NAME) FNNAME1(NAME)
+@@ -37,17 +41,33 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VARIABLE(vector2, float, 32, 4);
+ DECL_VARIABLE(vector_res, uint, 32, 2);
+ DECL_VARIABLE(vector_res, uint, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 8);
++ DECL_VARIABLE(vector_res, uint, 16, 4);
++ DECL_VARIABLE(vector_res, uint, 16, 8);
++#endif
+
+ clean_results ();
+
+ /* Initialize input "vector" from "buffer". */
+ VLOAD(vector, buffer, , float, f, 32, 2);
+ VLOAD(vector, buffer, q, float, f, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
+
+ /* Choose init value arbitrarily, will be used for vector
+ comparison. */
+ VDUP(vector2, , float, f, 32, 2, -16.0f);
+ VDUP(vector2, q, float, f, 32, 4, -14.0f);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector2, , float, f, 16, 4, -16.0f);
++ VDUP(vector2, q, float, f, 16, 8, -14.0f);
++#endif
+
+ /* Apply operator named INSN_NAME. */
+ TEST_VCOMP(INSN_NAME, , float, f, uint, 32, 2);
+@@ -56,15 +76,36 @@ void FNNAME (INSN_NAME) (void)
+ TEST_VCOMP(INSN_NAME, q, float, f, uint, 32, 4);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VCOMP(INSN_NAME, , float, f, uint, 16, 4);
++ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
++
++ TEST_VCOMP(INSN_NAME, q, float, f, uint, 16, 8);
++ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
++#endif
++
+ /* Test again, with different input values. */
+ VDUP(vector2, , float, f, 32, 2, -10.0f);
+ VDUP(vector2, q, float, f, 32, 4, 10.0f);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector2, , float, f, 16, 4, -10.0f);
++ VDUP(vector2, q, float, f, 16, 8, 10.0f);
++#endif
++
+ TEST_VCOMP(INSN_NAME, , float, f, uint, 32, 2);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected2, "");
+
+ TEST_VCOMP(INSN_NAME, q, float, f, uint, 32, 4);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected2,"");
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VCOMP(INSN_NAME, , float, f, uint, 16, 4);
++ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected2, "");
++
++ TEST_VCOMP(INSN_NAME, q, float, f, uint, 16, 8);
++ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected2,"");
++#endif
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/cmp_op.inc
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/cmp_op.inc
+@@ -11,6 +11,17 @@ extern ARRAY(expected_uint, uint, 32, 2);
+ extern ARRAY(expected_q_uint, uint, 8, 16);
+ extern ARRAY(expected_q_uint, uint, 16, 8);
+ extern ARRAY(expected_q_uint, uint, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++extern ARRAY(expected_float, uint, 16, 4);
++extern ARRAY(expected_q_float, uint, 16, 8);
++extern ARRAY(expected_nan, uint, 16, 4);
++extern ARRAY(expected_mnan, uint, 16, 4);
++extern ARRAY(expected_nan2, uint, 16, 4);
++extern ARRAY(expected_inf, uint, 16, 4);
++extern ARRAY(expected_minf, uint, 16, 4);
++extern ARRAY(expected_inf2, uint, 16, 4);
++extern ARRAY(expected_mzero, uint, 16, 4);
++#endif
+ extern ARRAY(expected_float, uint, 32, 2);
+ extern ARRAY(expected_q_float, uint, 32, 4);
+ extern ARRAY(expected_uint2, uint, 32, 2);
+@@ -48,6 +59,9 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VARIABLE(vector, uint, 8, 8);
+ DECL_VARIABLE(vector, uint, 16, 4);
+ DECL_VARIABLE(vector, uint, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE (vector, float, 16, 4);
++#endif
+ DECL_VARIABLE(vector, float, 32, 2);
+ DECL_VARIABLE(vector, int, 8, 16);
+ DECL_VARIABLE(vector, int, 16, 8);
+@@ -55,6 +69,9 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VARIABLE(vector, uint, 8, 16);
+ DECL_VARIABLE(vector, uint, 16, 8);
+ DECL_VARIABLE(vector, uint, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE (vector, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector, float, 32, 4);
+
+ DECL_VARIABLE(vector2, int, 8, 8);
+@@ -63,6 +80,9 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VARIABLE(vector2, uint, 8, 8);
+ DECL_VARIABLE(vector2, uint, 16, 4);
+ DECL_VARIABLE(vector2, uint, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE (vector2, float, 16, 4);
++#endif
+ DECL_VARIABLE(vector2, float, 32, 2);
+ DECL_VARIABLE(vector2, int, 8, 16);
+ DECL_VARIABLE(vector2, int, 16, 8);
+@@ -70,6 +90,9 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VARIABLE(vector2, uint, 8, 16);
+ DECL_VARIABLE(vector2, uint, 16, 8);
+ DECL_VARIABLE(vector2, uint, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE (vector2, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector2, float, 32, 4);
+
+ DECL_VARIABLE(vector_res, uint, 8, 8);
+@@ -88,6 +111,9 @@ void FNNAME (INSN_NAME) (void)
+ VLOAD(vector, buffer, , uint, u, 8, 8);
+ VLOAD(vector, buffer, , uint, u, 16, 4);
+ VLOAD(vector, buffer, , uint, u, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD (vector, buffer, , float, f, 16, 4);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+
+ VLOAD(vector, buffer, q, int, s, 8, 16);
+@@ -96,6 +122,9 @@ void FNNAME (INSN_NAME) (void)
+ VLOAD(vector, buffer, q, uint, u, 8, 16);
+ VLOAD(vector, buffer, q, uint, u, 16, 8);
+ VLOAD(vector, buffer, q, uint, u, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD (vector, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector, buffer, q, float, f, 32, 4);
+
+ /* Choose init value arbitrarily, will be used for vector
+@@ -106,6 +135,9 @@ void FNNAME (INSN_NAME) (void)
+ VDUP(vector2, , uint, u, 8, 8, 0xF3);
+ VDUP(vector2, , uint, u, 16, 4, 0xFFF2);
+ VDUP(vector2, , uint, u, 32, 2, 0xFFFFFFF1);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP (vector2, , float, f, 16, 4, -15.0f);
++#endif
+ VDUP(vector2, , float, f, 32, 2, -15.0f);
+
+ VDUP(vector2, q, int, s, 8, 16, -4);
+@@ -114,6 +146,9 @@ void FNNAME (INSN_NAME) (void)
+ VDUP(vector2, q, uint, u, 8, 16, 0xF4);
+ VDUP(vector2, q, uint, u, 16, 8, 0xFFF6);
+ VDUP(vector2, q, uint, u, 32, 4, 0xFFFFFFF2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP (vector2, q, float, f, 16, 8, -14.0f);
++#endif
+ VDUP(vector2, q, float, f, 32, 4, -14.0f);
+
+ /* The comparison operators produce only unsigned results, which
+@@ -154,9 +189,17 @@ void FNNAME (INSN_NAME) (void)
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_q_uint, "");
+
+ /* The float variants. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_float, "");
++#endif
+ TEST_VCOMP(INSN_NAME, , float, f, uint, 32, 2);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_float, "");
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VCOMP (INSN_NAME, q, float, f, uint, 16, 8);
++ CHECK (TEST_MSG, uint, 16, 8, PRIx16, expected_q_float, "");
++#endif
+ TEST_VCOMP(INSN_NAME, q, float, f, uint, 32, 4);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_q_float, "");
+
+@@ -176,6 +219,43 @@ void FNNAME (INSN_NAME) (void)
+
+
+ /* Extra FP tests with special values (NaN, ....). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP (vector, , float, f, 16, 4, 1.0);
++ VDUP (vector2, , float, f, 16, 4, NAN);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_nan, "FP special (NaN)");
++
++ VDUP (vector, , float, f, 16, 4, 1.0);
++ VDUP (vector2, , float, f, 16, 4, -NAN);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_mnan, " FP special (-NaN)");
++
++ VDUP (vector, , float, f, 16, 4, NAN);
++ VDUP (vector2, , float, f, 16, 4, 1.0);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_nan2, " FP special (NaN)");
++
++ VDUP (vector, , float, f, 16, 4, 1.0);
++ VDUP (vector2, , float, f, 16, 4, HUGE_VALF);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_inf, " FP special (inf)");
++
++ VDUP (vector, , float, f, 16, 4, 1.0);
++ VDUP (vector2, , float, f, 16, 4, -HUGE_VALF);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_minf, " FP special (-inf)");
++
++ VDUP (vector, , float, f, 16, 4, HUGE_VALF);
++ VDUP (vector2, , float, f, 16, 4, 1.0);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_inf2, " FP special (inf)");
++
++ VDUP (vector, , float, f, 16, 4, -0.0);
++ VDUP (vector2, , float, f, 16, 4, 0.0);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_mzero, " FP special (-0.0)");
++#endif
++
+ VDUP(vector, , float, f, 32, 2, 1.0);
+ VDUP(vector2, , float, f, 32, 2, NAN);
+ TEST_VCOMP(INSN_NAME, , float, f, uint, 32, 2);
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/cmp_zero_op.inc
+@@ -0,0 +1,111 @@
++/* Template file for the validation of compare against zero operators.
++
++ This file is base on cmp_op.inc. It is meant to be included by the relevant
++ test files, which have to define the intrinsic family to test. If a given
++ intrinsic supports variants which are not supported by all the other
++ operators, these can be tested by providing a definition for EXTRA_TESTS. */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++#include <math.h>
++
++/* Additional expected results declaration, they are initialized in
++ each test file. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++extern ARRAY(expected_float, uint, 16, 4);
++extern ARRAY(expected_q_float, uint, 16, 8);
++extern ARRAY(expected_uint2, uint, 16, 4);
++extern ARRAY(expected_uint3, uint, 16, 4);
++extern ARRAY(expected_uint4, uint, 16, 4);
++extern ARRAY(expected_nan, uint, 16, 4);
++extern ARRAY(expected_mnan, uint, 16, 4);
++extern ARRAY(expected_inf, uint, 16, 4);
++extern ARRAY(expected_minf, uint, 16, 4);
++extern ARRAY(expected_zero, uint, 16, 4);
++extern ARRAY(expected_mzero, uint, 16, 4);
++#endif
++
++#define FNNAME1(NAME) exec_ ## NAME
++#define FNNAME(NAME) FNNAME1(NAME)
++
++void FNNAME (INSN_NAME) (void)
++{
++ /* Basic test: y=vcomp(x1,x2), then store the result. */
++#define TEST_VCOMP1(INSN, Q, T1, T2, T3, W, N) \
++ VECT_VAR(vector_res, T3, W, N) = \
++ INSN##Q##_##T2##W(VECT_VAR(vector, T1, W, N)); \
++ vst1##Q##_u##W(VECT_VAR(result, T3, W, N), VECT_VAR(vector_res, T3, W, N))
++
++#define TEST_VCOMP(INSN, Q, T1, T2, T3, W, N) \
++ TEST_VCOMP1(INSN, Q, T1, T2, T3, W, N)
++
++ /* No need for 64 bits elements. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE (vector, float, 16, 4);
++ DECL_VARIABLE (vector, float, 16, 8);
++#endif
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, uint, 16, 4);
++ DECL_VARIABLE(vector_res, uint, 16, 8);
++#endif
++
++ clean_results ();
++
++ /* Choose init value arbitrarily, will be used for vector
++ comparison. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP (vector, , float, f, 16, 4, -15.0f);
++ VDUP (vector, q, float, f, 16, 8, 14.0f);
++#endif
++
++ /* Float variants. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ TEST_VCOMP (INSN_NAME, q, float, f, uint, 16, 8);
++#endif
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_float, "");
++ CHECK (TEST_MSG, uint, 16, 8, PRIx16, expected_q_float, "");
++#endif
++
++ /* Extra FP tests with special values (NaN, ....). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP (vector, , float, f, 16, 4, NAN);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_nan, "FP special (NaN)");
++
++ VDUP (vector, , float, f, 16, 4, -NAN);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_mnan, " FP special (-NaN)");
++
++ VDUP (vector, , float, f, 16, 4, HUGE_VALF);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_inf, " FP special (inf)");
++
++ VDUP (vector, , float, f, 16, 4, -HUGE_VALF);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_minf, " FP special (-inf)");
++
++ VDUP (vector, , float, f, 16, 4, 0.0);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_zero, " FP special (0.0)");
++
++ VDUP (vector, , float, f, 16, 4, 0.0);
++ TEST_VCOMP (INSN_NAME, , float, f, uint, 16, 4);
++ CHECK (TEST_MSG, uint, 16, 4, PRIx16, expected_mzero, " FP special (-0.0)");
++#endif
++
++#ifdef EXTRA_TESTS
++ EXTRA_TESTS();
++#endif
++}
++
++int main (void)
++{
++ FNNAME (INSN_NAME) ();
++
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/compute-ref-data.h
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/compute-ref-data.h
+@@ -118,6 +118,10 @@ VECT_VAR_DECL_INIT(buffer, uint, 32, 2);
+ PAD(buffer_pad, uint, 32, 2);
+ VECT_VAR_DECL_INIT(buffer, uint, 64, 1);
+ PAD(buffer_pad, uint, 64, 1);
++#if defined (__ARM_FEATURE_CRYPTO)
++VECT_VAR_DECL_INIT(buffer, poly, 64, 1);
++PAD(buffer_pad, poly, 64, 1);
++#endif
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ VECT_VAR_DECL_INIT(buffer, float, 16, 4);
+ PAD(buffer_pad, float, 16, 4);
+@@ -144,6 +148,10 @@ VECT_VAR_DECL_INIT(buffer, poly, 8, 16);
+ PAD(buffer_pad, poly, 8, 16);
+ VECT_VAR_DECL_INIT(buffer, poly, 16, 8);
+ PAD(buffer_pad, poly, 16, 8);
++#if defined (__ARM_FEATURE_CRYPTO)
++VECT_VAR_DECL_INIT(buffer, poly, 64, 2);
++PAD(buffer_pad, poly, 64, 2);
++#endif
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ VECT_VAR_DECL_INIT(buffer, float, 16, 8);
+ PAD(buffer_pad, float, 16, 8);
+@@ -178,6 +186,10 @@ VECT_VAR_DECL_INIT(buffer_dup, poly, 8, 8);
+ VECT_VAR_DECL(buffer_dup_pad, poly, 8, 8);
+ VECT_VAR_DECL_INIT(buffer_dup, poly, 16, 4);
+ VECT_VAR_DECL(buffer_dup_pad, poly, 16, 4);
++#if defined (__ARM_FEATURE_CRYPTO)
++VECT_VAR_DECL_INIT4(buffer_dup, poly, 64, 1);
++VECT_VAR_DECL(buffer_dup_pad, poly, 64, 1);
++#endif
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ VECT_VAR_DECL_INIT4(buffer_dup, float, 16, 4);
+ VECT_VAR_DECL(buffer_dup_pad, float, 16, 4);
+@@ -205,6 +217,10 @@ VECT_VAR_DECL_INIT(buffer_dup, poly, 8, 16);
+ VECT_VAR_DECL(buffer_dup_pad, poly, 8, 16);
+ VECT_VAR_DECL_INIT(buffer_dup, poly, 16, 8);
+ VECT_VAR_DECL(buffer_dup_pad, poly, 16, 8);
++#if defined (__ARM_FEATURE_CRYPTO)
++VECT_VAR_DECL_INIT4(buffer_dup, poly, 64, 2);
++VECT_VAR_DECL(buffer_dup_pad, poly, 64, 2);
++#endif
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ VECT_VAR_DECL_INIT(buffer_dup, float, 16, 8);
+ VECT_VAR_DECL(buffer_dup_pad, float, 16, 8);
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/p64_p128.c
+@@ -0,0 +1,1024 @@
++/* This file contains tests for all the *p64 intrinsics, except for
++ vreinterpret which have their own testcase. */
++
++/* { dg-require-effective-target arm_crypto_ok { target { arm*-*-* } } } */
++/* { dg-add-options arm_crypto } */
++/* { dg-additional-options "-march=armv8-a+crypto" { target { aarch64*-*-* } } }*/
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results: vbsl. */
++VECT_VAR_DECL(vbsl_expected,poly,64,1) [] = { 0xfffffff1 };
++VECT_VAR_DECL(vbsl_expected,poly,64,2) [] = { 0xfffffff1,
++ 0xfffffff1 };
++
++/* Expected results: vceq. */
++VECT_VAR_DECL(vceq_expected,uint,64,1) [] = { 0x0 };
++
++/* Expected results: vcombine. */
++VECT_VAR_DECL(vcombine_expected,poly,64,2) [] = { 0xfffffffffffffff0, 0x88 };
++
++/* Expected results: vcreate. */
++VECT_VAR_DECL(vcreate_expected,poly,64,1) [] = { 0x123456789abcdef0 };
++
++/* Expected results: vdup_lane. */
++VECT_VAR_DECL(vdup_lane_expected,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vdup_lane_expected,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff0 };
++
++/* Expected results: vdup_n. */
++VECT_VAR_DECL(vdup_n_expected0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vdup_n_expected0,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff0 };
++VECT_VAR_DECL(vdup_n_expected1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(vdup_n_expected1,poly,64,2) [] = { 0xfffffffffffffff1,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vdup_n_expected2,poly,64,1) [] = { 0xfffffffffffffff2 };
++VECT_VAR_DECL(vdup_n_expected2,poly,64,2) [] = { 0xfffffffffffffff2,
++ 0xfffffffffffffff2 };
++
++/* Expected results: vmov_n. */
++VECT_VAR_DECL(vmov_n_expected0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vmov_n_expected0,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff0 };
++VECT_VAR_DECL(vmov_n_expected1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(vmov_n_expected1,poly,64,2) [] = { 0xfffffffffffffff1,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vmov_n_expected2,poly,64,1) [] = { 0xfffffffffffffff2 };
++VECT_VAR_DECL(vmov_n_expected2,poly,64,2) [] = { 0xfffffffffffffff2,
++ 0xfffffffffffffff2 };
++
++/* Expected results: vext. */
++VECT_VAR_DECL(vext_expected,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vext_expected,poly,64,2) [] = { 0xfffffffffffffff1, 0x88 };
++
++/* Expected results: vget_low. */
++VECT_VAR_DECL(vget_low_expected,poly,64,1) [] = { 0xfffffffffffffff0 };
++
++/* Expected results: vget_high. */
++VECT_VAR_DECL(vget_high_expected,poly,64,1) [] = { 0xfffffffffffffff1 };
++
++/* Expected results: vld1. */
++VECT_VAR_DECL(vld1_expected,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld1_expected,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++
++/* Expected results: vld1_dup. */
++VECT_VAR_DECL(vld1_dup_expected0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld1_dup_expected0,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld1_dup_expected1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(vld1_dup_expected1,poly,64,2) [] = { 0xfffffffffffffff1,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vld1_dup_expected2,poly,64,1) [] = { 0xfffffffffffffff2 };
++VECT_VAR_DECL(vld1_dup_expected2,poly,64,2) [] = { 0xfffffffffffffff2,
++ 0xfffffffffffffff2 };
++
++/* Expected results: vld1_lane. */
++VECT_VAR_DECL(vld1_lane_expected,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld1_lane_expected,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xaaaaaaaaaaaaaaaa };
++
++/* Expected results: vldX. */
++VECT_VAR_DECL(vld2_expected_0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld2_expected_1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(vld3_expected_0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld3_expected_1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(vld3_expected_2,poly,64,1) [] = { 0xfffffffffffffff2 };
++VECT_VAR_DECL(vld4_expected_0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld4_expected_1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(vld4_expected_2,poly,64,1) [] = { 0xfffffffffffffff2 };
++VECT_VAR_DECL(vld4_expected_3,poly,64,1) [] = { 0xfffffffffffffff3 };
++
++/* Expected results: vldX_dup. */
++VECT_VAR_DECL(vld2_dup_expected_0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld2_dup_expected_1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(vld3_dup_expected_0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld3_dup_expected_1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(vld3_dup_expected_2,poly,64,1) [] = { 0xfffffffffffffff2 };
++VECT_VAR_DECL(vld4_dup_expected_0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vld4_dup_expected_1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(vld4_dup_expected_2,poly,64,1) [] = { 0xfffffffffffffff2 };
++VECT_VAR_DECL(vld4_dup_expected_3,poly,64,1) [] = { 0xfffffffffffffff3 };
++
++/* Expected results: vsli. */
++VECT_VAR_DECL(vsli_expected,poly,64,1) [] = { 0x10 };
++VECT_VAR_DECL(vsli_expected,poly,64,2) [] = { 0x7ffffffffffff0,
++ 0x7ffffffffffff1 };
++VECT_VAR_DECL(vsli_expected_max_shift,poly,64,1) [] = { 0x7ffffffffffffff0 };
++VECT_VAR_DECL(vsli_expected_max_shift,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++
++/* Expected results: vsri. */
++VECT_VAR_DECL(vsri_expected,poly,64,1) [] = { 0xe000000000000000 };
++VECT_VAR_DECL(vsri_expected,poly,64,2) [] = { 0xfffffffffffff800,
++ 0xfffffffffffff800 };
++VECT_VAR_DECL(vsri_expected_max_shift,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vsri_expected_max_shift,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++
++/* Expected results: vst1_lane. */
++VECT_VAR_DECL(vst1_lane_expected,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vst1_lane_expected,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0x3333333333333333 };
++
++/* Expected results: vldX_lane. */
++VECT_VAR_DECL(expected_vld_st2_0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected_vld_st2_0,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected_vld_st2_1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected_vld_st2_1,poly,64,2) [] = { 0xaaaaaaaaaaaaaaaa,
++ 0xaaaaaaaaaaaaaaaa };
++VECT_VAR_DECL(expected_vld_st3_0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected_vld_st3_0,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected_vld_st3_1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected_vld_st3_1,poly,64,2) [] = { 0xfffffffffffffff2,
++ 0xaaaaaaaaaaaaaaaa };
++VECT_VAR_DECL(expected_vld_st3_2,poly,64,1) [] = { 0xfffffffffffffff2 };
++VECT_VAR_DECL(expected_vld_st3_2,poly,64,2) [] = { 0xaaaaaaaaaaaaaaaa,
++ 0xaaaaaaaaaaaaaaaa };
++VECT_VAR_DECL(expected_vld_st4_0,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected_vld_st4_0,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected_vld_st4_1,poly,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected_vld_st4_1,poly,64,2) [] = { 0xfffffffffffffff2,
++ 0xfffffffffffffff3 };
++VECT_VAR_DECL(expected_vld_st4_2,poly,64,1) [] = { 0xfffffffffffffff2 };
++VECT_VAR_DECL(expected_vld_st4_2,poly,64,2) [] = { 0xaaaaaaaaaaaaaaaa,
++ 0xaaaaaaaaaaaaaaaa };
++VECT_VAR_DECL(expected_vld_st4_3,poly,64,1) [] = { 0xfffffffffffffff3 };
++VECT_VAR_DECL(expected_vld_st4_3,poly,64,2) [] = { 0xaaaaaaaaaaaaaaaa,
++ 0xaaaaaaaaaaaaaaaa };
++
++/* Expected results: vget_lane. */
++VECT_VAR_DECL(vget_lane_expected,poly,64,1) = 0xfffffffffffffff0;
++VECT_VAR_DECL(vget_lane_expected,poly,64,2) = 0xfffffffffffffff0;
++
++int main (void)
++{
++ int i;
++
++ /* vbsl_p64 tests. */
++#define TEST_MSG "VBSL/VBSLQ"
++
++#define TEST_VBSL(T3, Q, T1, T2, W, N) \
++ VECT_VAR(vbsl_vector_res, T1, W, N) = \
++ vbsl##Q##_##T2##W(VECT_VAR(vbsl_vector_first, T3, W, N), \
++ VECT_VAR(vbsl_vector, T1, W, N), \
++ VECT_VAR(vbsl_vector2, T1, W, N)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vbsl_vector_res, T1, W, N))
++
++ DECL_VARIABLE(vbsl_vector, poly, 64, 1);
++ DECL_VARIABLE(vbsl_vector, poly, 64, 2);
++ DECL_VARIABLE(vbsl_vector2, poly, 64, 1);
++ DECL_VARIABLE(vbsl_vector2, poly, 64, 2);
++ DECL_VARIABLE(vbsl_vector_res, poly, 64, 1);
++ DECL_VARIABLE(vbsl_vector_res, poly, 64, 2);
++
++ DECL_VARIABLE(vbsl_vector_first, uint, 64, 1);
++ DECL_VARIABLE(vbsl_vector_first, uint, 64, 2);
++
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ VLOAD(vbsl_vector, buffer, , poly, p, 64, 1);
++ VLOAD(vbsl_vector, buffer, q, poly, p, 64, 2);
++
++ VDUP(vbsl_vector2, , poly, p, 64, 1, 0xFFFFFFF3);
++ VDUP(vbsl_vector2, q, poly, p, 64, 2, 0xFFFFFFF3);
++
++ VDUP(vbsl_vector_first, , uint, u, 64, 1, 0xFFFFFFF2);
++ VDUP(vbsl_vector_first, q, uint, u, 64, 2, 0xFFFFFFF2);
++
++ TEST_VBSL(uint, , poly, p, 64, 1);
++ TEST_VBSL(uint, q, poly, p, 64, 2);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vbsl_expected, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vbsl_expected, "");
++
++ /* vceq_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VCEQ"
++
++#define TEST_VCOMP1(INSN, Q, T1, T2, T3, W, N) \
++ VECT_VAR(vceq_vector_res, T3, W, N) = \
++ INSN##Q##_##T2##W(VECT_VAR(vceq_vector, T1, W, N), \
++ VECT_VAR(vceq_vector2, T1, W, N)); \
++ vst1##Q##_u##W(VECT_VAR(result, T3, W, N), VECT_VAR(vceq_vector_res, T3, W, N))
++
++#define TEST_VCOMP(INSN, Q, T1, T2, T3, W, N) \
++ TEST_VCOMP1(INSN, Q, T1, T2, T3, W, N)
++
++ DECL_VARIABLE(vceq_vector, poly, 64, 1);
++ DECL_VARIABLE(vceq_vector2, poly, 64, 1);
++ DECL_VARIABLE(vceq_vector_res, uint, 64, 1);
++
++ CLEAN(result, uint, 64, 1);
++
++ VLOAD(vceq_vector, buffer, , poly, p, 64, 1);
++
++ VDUP(vceq_vector2, , poly, p, 64, 1, 0x88);
++
++ TEST_VCOMP(vceq, , poly, p, uint, 64, 1);
++
++ CHECK(TEST_MSG, uint, 64, 1, PRIx64, vceq_expected, "");
++
++ /* vcombine_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VCOMBINE"
++
++#define TEST_VCOMBINE(T1, T2, W, N, N2) \
++ VECT_VAR(vcombine_vector128, T1, W, N2) = \
++ vcombine_##T2##W(VECT_VAR(vcombine_vector64_a, T1, W, N), \
++ VECT_VAR(vcombine_vector64_b, T1, W, N)); \
++ vst1q_##T2##W(VECT_VAR(result, T1, W, N2), VECT_VAR(vcombine_vector128, T1, W, N2))
++
++ DECL_VARIABLE(vcombine_vector64_a, poly, 64, 1);
++ DECL_VARIABLE(vcombine_vector64_b, poly, 64, 1);
++ DECL_VARIABLE(vcombine_vector128, poly, 64, 2);
++
++ CLEAN(result, poly, 64, 2);
++
++ VLOAD(vcombine_vector64_a, buffer, , poly, p, 64, 1);
++
++ VDUP(vcombine_vector64_b, , poly, p, 64, 1, 0x88);
++
++ TEST_VCOMBINE(poly, p, 64, 1, 2);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vcombine_expected, "");
++
++ /* vcreate_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VCREATE"
++
++#define TEST_VCREATE(T1, T2, W, N) \
++ VECT_VAR(vcreate_vector_res, T1, W, N) = \
++ vcreate_##T2##W(VECT_VAR(vcreate_val, T1, W, N)); \
++ vst1_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vcreate_vector_res, T1, W, N))
++
++#define DECL_VAL(VAR, T1, W, N) \
++ uint64_t VECT_VAR(VAR, T1, W, N)
++
++ DECL_VAL(vcreate_val, poly, 64, 1);
++ DECL_VARIABLE(vcreate_vector_res, poly, 64, 1);
++
++ CLEAN(result, poly, 64, 2);
++
++ VECT_VAR(vcreate_val, poly, 64, 1) = 0x123456789abcdef0ULL;
++
++ TEST_VCREATE(poly, p, 64, 1);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vcreate_expected, "");
++
++ /* vdup_lane_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VDUP_LANE/VDUP_LANEQ"
++
++#define TEST_VDUP_LANE(Q, T1, T2, W, N, N2, L) \
++ VECT_VAR(vdup_lane_vector_res, T1, W, N) = \
++ vdup##Q##_lane_##T2##W(VECT_VAR(vdup_lane_vector, T1, W, N2), L); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vdup_lane_vector_res, T1, W, N))
++
++ DECL_VARIABLE(vdup_lane_vector, poly, 64, 1);
++ DECL_VARIABLE(vdup_lane_vector, poly, 64, 2);
++ DECL_VARIABLE(vdup_lane_vector_res, poly, 64, 1);
++ DECL_VARIABLE(vdup_lane_vector_res, poly, 64, 2);
++
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ VLOAD(vdup_lane_vector, buffer, , poly, p, 64, 1);
++
++ TEST_VDUP_LANE(, poly, p, 64, 1, 1, 0);
++ TEST_VDUP_LANE(q, poly, p, 64, 2, 1, 0);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vdup_lane_expected, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vdup_lane_expected, "");
++
++ /* vdup_n_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VDUP/VDUPQ"
++
++#define TEST_VDUP(Q, T1, T2, W, N) \
++ VECT_VAR(vdup_n_vector, T1, W, N) = \
++ vdup##Q##_n_##T2##W(VECT_VAR(buffer_dup, T1, W, N)[i]); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vdup_n_vector, T1, W, N))
++
++ DECL_VARIABLE(vdup_n_vector, poly, 64, 1);
++ DECL_VARIABLE(vdup_n_vector, poly, 64, 2);
++
++ /* Try to read different places from the input buffer. */
++ for (i=0; i< 3; i++) {
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ TEST_VDUP(, poly, p, 64, 1);
++ TEST_VDUP(q, poly, p, 64, 2);
++
++ switch (i) {
++ case 0:
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vdup_n_expected0, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vdup_n_expected0, "");
++ break;
++ case 1:
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vdup_n_expected1, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vdup_n_expected1, "");
++ break;
++ case 2:
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vdup_n_expected2, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vdup_n_expected2, "");
++ break;
++ default:
++ abort();
++ }
++ }
++
++ /* vexit_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VEXT/VEXTQ"
++
++#define TEST_VEXT(Q, T1, T2, W, N, V) \
++ VECT_VAR(vext_vector_res, T1, W, N) = \
++ vext##Q##_##T2##W(VECT_VAR(vext_vector1, T1, W, N), \
++ VECT_VAR(vext_vector2, T1, W, N), \
++ V); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vext_vector_res, T1, W, N))
++
++ DECL_VARIABLE(vext_vector1, poly, 64, 1);
++ DECL_VARIABLE(vext_vector1, poly, 64, 2);
++ DECL_VARIABLE(vext_vector2, poly, 64, 1);
++ DECL_VARIABLE(vext_vector2, poly, 64, 2);
++ DECL_VARIABLE(vext_vector_res, poly, 64, 1);
++ DECL_VARIABLE(vext_vector_res, poly, 64, 2);
++
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ VLOAD(vext_vector1, buffer, , poly, p, 64, 1);
++ VLOAD(vext_vector1, buffer, q, poly, p, 64, 2);
++
++ VDUP(vext_vector2, , poly, p, 64, 1, 0x88);
++ VDUP(vext_vector2, q, poly, p, 64, 2, 0x88);
++
++ TEST_VEXT(, poly, p, 64, 1, 0);
++ TEST_VEXT(q, poly, p, 64, 2, 1);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vext_expected, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vext_expected, "");
++
++ /* vget_low_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VGET_LOW"
++
++#define TEST_VGET_LOW(T1, T2, W, N, N2) \
++ VECT_VAR(vget_low_vector64, T1, W, N) = \
++ vget_low_##T2##W(VECT_VAR(vget_low_vector128, T1, W, N2)); \
++ vst1_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vget_low_vector64, T1, W, N))
++
++ DECL_VARIABLE(vget_low_vector64, poly, 64, 1);
++ DECL_VARIABLE(vget_low_vector128, poly, 64, 2);
++
++ CLEAN(result, poly, 64, 1);
++
++ VLOAD(vget_low_vector128, buffer, q, poly, p, 64, 2);
++
++ TEST_VGET_LOW(poly, p, 64, 1, 2);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vget_low_expected, "");
++
++ /* vget_high_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VGET_HIGH"
++
++#define TEST_VGET_HIGH(T1, T2, W, N, N2) \
++ VECT_VAR(vget_high_vector64, T1, W, N) = \
++ vget_high_##T2##W(VECT_VAR(vget_high_vector128, T1, W, N2)); \
++ vst1_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vget_high_vector64, T1, W, N))
++
++ DECL_VARIABLE(vget_high_vector64, poly, 64, 1);
++ DECL_VARIABLE(vget_high_vector128, poly, 64, 2);
++
++ CLEAN(result, poly, 64, 1);
++
++ VLOAD(vget_high_vector128, buffer, q, poly, p, 64, 2);
++
++ TEST_VGET_HIGH(poly, p, 64, 1, 2);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vget_high_expected, "");
++
++ /* vld1_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VLD1/VLD1Q"
++
++#define TEST_VLD1(VAR, BUF, Q, T1, T2, W, N) \
++ VECT_VAR(VAR, T1, W, N) = vld1##Q##_##T2##W(VECT_VAR(BUF, T1, W, N)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(VAR, T1, W, N))
++
++ DECL_VARIABLE(vld1_vector, poly, 64, 1);
++ DECL_VARIABLE(vld1_vector, poly, 64, 2);
++
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ VLOAD(vld1_vector, buffer, , poly, p, 64, 1);
++ VLOAD(vld1_vector, buffer, q, poly, p, 64, 2);
++
++ TEST_VLD1(vld1_vector, buffer, , poly, p, 64, 1);
++ TEST_VLD1(vld1_vector, buffer, q, poly, p, 64, 2);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld1_expected, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vld1_expected, "");
++
++ /* vld1_dup_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VLD1_DUP/VLD1_DUPQ"
++
++#define TEST_VLD1_DUP(VAR, BUF, Q, T1, T2, W, N) \
++ VECT_VAR(VAR, T1, W, N) = \
++ vld1##Q##_dup_##T2##W(&VECT_VAR(BUF, T1, W, N)[i]); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(VAR, T1, W, N))
++
++ DECL_VARIABLE(vld1_dup_vector, poly, 64, 1);
++ DECL_VARIABLE(vld1_dup_vector, poly, 64, 2);
++
++ /* Try to read different places from the input buffer. */
++ for (i=0; i<3; i++) {
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ TEST_VLD1_DUP(vld1_dup_vector, buffer_dup, , poly, p, 64, 1);
++ TEST_VLD1_DUP(vld1_dup_vector, buffer_dup, q, poly, p, 64, 2);
++
++ switch (i) {
++ case 0:
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld1_dup_expected0, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vld1_dup_expected0, "");
++ break;
++ case 1:
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld1_dup_expected1, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vld1_dup_expected1, "");
++ break;
++ case 2:
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld1_dup_expected2, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vld1_dup_expected2, "");
++ break;
++ default:
++ abort();
++ }
++ }
++
++ /* vld1_lane_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VLD1_LANE/VLD1_LANEQ"
++
++#define TEST_VLD1_LANE(Q, T1, T2, W, N, L) \
++ memset (VECT_VAR(vld1_lane_buffer_src, T1, W, N), 0xAA, W/8*N); \
++ VECT_VAR(vld1_lane_vector_src, T1, W, N) = \
++ vld1##Q##_##T2##W(VECT_VAR(vld1_lane_buffer_src, T1, W, N)); \
++ VECT_VAR(vld1_lane_vector, T1, W, N) = \
++ vld1##Q##_lane_##T2##W(VECT_VAR(buffer, T1, W, N), \
++ VECT_VAR(vld1_lane_vector_src, T1, W, N), L); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vld1_lane_vector, T1, W, N))
++
++ DECL_VARIABLE(vld1_lane_vector, poly, 64, 1);
++ DECL_VARIABLE(vld1_lane_vector, poly, 64, 2);
++ DECL_VARIABLE(vld1_lane_vector_src, poly, 64, 1);
++ DECL_VARIABLE(vld1_lane_vector_src, poly, 64, 2);
++
++ ARRAY(vld1_lane_buffer_src, poly, 64, 1);
++ ARRAY(vld1_lane_buffer_src, poly, 64, 2);
++
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ TEST_VLD1_LANE(, poly, p, 64, 1, 0);
++ TEST_VLD1_LANE(q, poly, p, 64, 2, 0);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld1_lane_expected, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vld1_lane_expected, "");
++
++ /* vldX_p64 tests. */
++#define DECL_VLDX(T1, W, N, X) \
++ VECT_ARRAY_TYPE(T1, W, N, X) VECT_ARRAY_VAR(vldX_vector, T1, W, N, X); \
++ VECT_VAR_DECL(vldX_result_bis_##X, T1, W, N)[X * N]
++
++#define TEST_VLDX(Q, T1, T2, W, N, X) \
++ VECT_ARRAY_VAR(vldX_vector, T1, W, N, X) = \
++ /* Use dedicated init buffer, of size X */ \
++ vld##X##Q##_##T2##W(VECT_ARRAY_VAR(buffer_vld##X, T1, W, N, X)); \
++ vst##X##Q##_##T2##W(VECT_VAR(vldX_result_bis_##X, T1, W, N), \
++ VECT_ARRAY_VAR(vldX_vector, T1, W, N, X)); \
++ memcpy(VECT_VAR(result, T1, W, N), VECT_VAR(vldX_result_bis_##X, T1, W, N), \
++ sizeof(VECT_VAR(result, T1, W, N)));
++
++ /* Overwrite "result" with the contents of "result_bis"[Y]. */
++#define TEST_EXTRA_CHUNK(T1, W, N, X,Y) \
++ memcpy(VECT_VAR(result, T1, W, N), \
++ &(VECT_VAR(vldX_result_bis_##X, T1, W, N)[Y*N]), \
++ sizeof(VECT_VAR(result, T1, W, N)));
++
++ DECL_VLDX(poly, 64, 1, 2);
++ DECL_VLDX(poly, 64, 1, 3);
++ DECL_VLDX(poly, 64, 1, 4);
++
++ VECT_ARRAY_INIT2(buffer_vld2, poly, 64, 1);
++ PAD(buffer_vld2_pad, poly, 64, 1);
++ VECT_ARRAY_INIT3(buffer_vld3, poly, 64, 1);
++ PAD(buffer_vld3_pad, poly, 64, 1);
++ VECT_ARRAY_INIT4(buffer_vld4, poly, 64, 1);
++ PAD(buffer_vld4_pad, poly, 64, 1);
++
++#undef TEST_MSG
++#define TEST_MSG "VLD2/VLD2Q"
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX(, poly, p, 64, 1, 2);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld2_expected_0, "chunk 0");
++ CLEAN(result, poly, 64, 1);
++ TEST_EXTRA_CHUNK(poly, 64, 1, 2, 1);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld2_expected_1, "chunk 1");
++
++#undef TEST_MSG
++#define TEST_MSG "VLD3/VLD3Q"
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX(, poly, p, 64, 1, 3);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld3_expected_0, "chunk 0");
++ CLEAN(result, poly, 64, 1);
++ TEST_EXTRA_CHUNK(poly, 64, 1, 3, 1);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld3_expected_1, "chunk 1");
++ CLEAN(result, poly, 64, 1);
++ TEST_EXTRA_CHUNK(poly, 64, 1, 3, 2);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld3_expected_2, "chunk 2");
++
++#undef TEST_MSG
++#define TEST_MSG "VLD4/VLD4Q"
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX(, poly, p, 64, 1, 4);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld4_expected_0, "chunk 0");
++ CLEAN(result, poly, 64, 1);
++ TEST_EXTRA_CHUNK(poly, 64, 1, 4, 1);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld4_expected_1, "chunk 1");
++ CLEAN(result, poly, 64, 1);
++ TEST_EXTRA_CHUNK(poly, 64, 1, 4, 2);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld4_expected_2, "chunk 2");
++ CLEAN(result, poly, 64, 1);
++ TEST_EXTRA_CHUNK(poly, 64, 1, 4, 3);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld4_expected_3, "chunk 3");
++
++ /* vldX_dup_p64 tests. */
++#define DECL_VLDX_DUP(T1, W, N, X) \
++ VECT_ARRAY_TYPE(T1, W, N, X) VECT_ARRAY_VAR(vldX_dup_vector, T1, W, N, X); \
++ VECT_VAR_DECL(vldX_dup_result_bis_##X, T1, W, N)[X * N]
++
++#define TEST_VLDX_DUP(Q, T1, T2, W, N, X) \
++ VECT_ARRAY_VAR(vldX_dup_vector, T1, W, N, X) = \
++ vld##X##Q##_dup_##T2##W(&VECT_VAR(buffer_dup, T1, W, N)[0]); \
++ \
++ vst##X##Q##_##T2##W(VECT_VAR(vldX_dup_result_bis_##X, T1, W, N), \
++ VECT_ARRAY_VAR(vldX_dup_vector, T1, W, N, X)); \
++ memcpy(VECT_VAR(result, T1, W, N), VECT_VAR(vldX_dup_result_bis_##X, T1, W, N), \
++ sizeof(VECT_VAR(result, T1, W, N)));
++
++ /* Overwrite "result" with the contents of "result_bis"[Y]. */
++#define TEST_VLDX_DUP_EXTRA_CHUNK(T1, W, N, X,Y) \
++ memcpy(VECT_VAR(result, T1, W, N), \
++ &(VECT_VAR(vldX_dup_result_bis_##X, T1, W, N)[Y*N]), \
++ sizeof(VECT_VAR(result, T1, W, N)));
++
++ DECL_VLDX_DUP(poly, 64, 1, 2);
++ DECL_VLDX_DUP(poly, 64, 1, 3);
++ DECL_VLDX_DUP(poly, 64, 1, 4);
++
++
++#undef TEST_MSG
++#define TEST_MSG "VLD2_DUP/VLD2Q_DUP"
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX_DUP(, poly, p, 64, 1, 2);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld2_dup_expected_0, "chunk 0");
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX_DUP_EXTRA_CHUNK(poly, 64, 1, 2, 1);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld2_dup_expected_1, "chunk 1");
++
++#undef TEST_MSG
++#define TEST_MSG "VLD3_DUP/VLD3Q_DUP"
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX_DUP(, poly, p, 64, 1, 3);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld3_dup_expected_0, "chunk 0");
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX_DUP_EXTRA_CHUNK(poly, 64, 1, 3, 1);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld3_dup_expected_1, "chunk 1");
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX_DUP_EXTRA_CHUNK(poly, 64, 1, 3, 2);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld3_dup_expected_2, "chunk 2");
++
++#undef TEST_MSG
++#define TEST_MSG "VLD4_DUP/VLD4Q_DUP"
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX_DUP(, poly, p, 64, 1, 4);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld4_dup_expected_0, "chunk 0");
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX_DUP_EXTRA_CHUNK(poly, 64, 1, 4, 1);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld4_dup_expected_1, "chunk 1");
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX_DUP_EXTRA_CHUNK(poly, 64, 1, 4, 2);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld4_dup_expected_2, "chunk 2");
++ CLEAN(result, poly, 64, 1);
++ TEST_VLDX_DUP_EXTRA_CHUNK(poly, 64, 1, 4, 3);
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vld4_dup_expected_3, "chunk 3");
++
++ /* vsli_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VSLI"
++
++#define TEST_VSXI1(INSN, Q, T1, T2, W, N, V) \
++ VECT_VAR(vsXi_vector_res, T1, W, N) = \
++ INSN##Q##_n_##T2##W(VECT_VAR(vsXi_vector, T1, W, N), \
++ VECT_VAR(vsXi_vector2, T1, W, N), \
++ V); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vsXi_vector_res, T1, W, N))
++
++#define TEST_VSXI(INSN, Q, T1, T2, W, N, V) \
++ TEST_VSXI1(INSN, Q, T1, T2, W, N, V)
++
++ DECL_VARIABLE(vsXi_vector, poly, 64, 1);
++ DECL_VARIABLE(vsXi_vector, poly, 64, 2);
++ DECL_VARIABLE(vsXi_vector2, poly, 64, 1);
++ DECL_VARIABLE(vsXi_vector2, poly, 64, 2);
++ DECL_VARIABLE(vsXi_vector_res, poly, 64, 1);
++ DECL_VARIABLE(vsXi_vector_res, poly, 64, 2);
++
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ VLOAD(vsXi_vector, buffer, , poly, p, 64, 1);
++ VLOAD(vsXi_vector, buffer, q, poly, p, 64, 2);
++
++ VDUP(vsXi_vector2, , poly, p, 64, 1, 2);
++ VDUP(vsXi_vector2, q, poly, p, 64, 2, 3);
++
++ TEST_VSXI(vsli, , poly, p, 64, 1, 3);
++ TEST_VSXI(vsli, q, poly, p, 64, 2, 53);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vsli_expected, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vsli_expected, "");
++
++ /* Test cases with maximum shift amount. */
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ TEST_VSXI(vsli, , poly, p, 64, 1, 63);
++ TEST_VSXI(vsli, q, poly, p, 64, 2, 63);
++
++#define COMMENT "(max shift amount)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vsli_expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vsli_expected_max_shift, COMMENT);
++
++ /* vsri_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VSRI"
++
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ VLOAD(vsXi_vector, buffer, , poly, p, 64, 1);
++ VLOAD(vsXi_vector, buffer, q, poly, p, 64, 2);
++
++ VDUP(vsXi_vector2, , poly, p, 64, 1, 2);
++ VDUP(vsXi_vector2, q, poly, p, 64, 2, 3);
++
++ TEST_VSXI(vsri, , poly, p, 64, 1, 3);
++ TEST_VSXI(vsri, q, poly, p, 64, 2, 53);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vsri_expected, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vsri_expected, "");
++
++ /* Test cases with maximum shift amount. */
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ TEST_VSXI(vsri, , poly, p, 64, 1, 64);
++ TEST_VSXI(vsri, q, poly, p, 64, 2, 64);
++
++#define COMMENT "(max shift amount)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vsri_expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vsri_expected_max_shift, COMMENT);
++
++ /* vst1_lane_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VST1_LANE/VST1_LANEQ"
++
++#define TEST_VST1_LANE(Q, T1, T2, W, N, L) \
++ VECT_VAR(vst1_lane_vector, T1, W, N) = \
++ vld1##Q##_##T2##W(VECT_VAR(buffer, T1, W, N)); \
++ vst1##Q##_lane_##T2##W(VECT_VAR(result, T1, W, N), \
++ VECT_VAR(vst1_lane_vector, T1, W, N), L);
++
++ DECL_VARIABLE(vst1_lane_vector, poly, 64, 1);
++ DECL_VARIABLE(vst1_lane_vector, poly, 64, 2);
++
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ TEST_VST1_LANE(, poly, p, 64, 1, 0);
++ TEST_VST1_LANE(q, poly, p, 64, 2, 0);
++
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vst1_lane_expected, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vst1_lane_expected, "");
++
++#ifdef __aarch64__
++
++ /* vmov_n_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VMOV/VMOVQ"
++
++#define TEST_VMOV(Q, T1, T2, W, N) \
++ VECT_VAR(vmov_n_vector, T1, W, N) = \
++ vmov##Q##_n_##T2##W(VECT_VAR(buffer_dup, T1, W, N)[i]); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vmov_n_vector, T1, W, N))
++
++ DECL_VARIABLE(vmov_n_vector, poly, 64, 1);
++ DECL_VARIABLE(vmov_n_vector, poly, 64, 2);
++
++ /* Try to read different places from the input buffer. */
++ for (i=0; i< 3; i++) {
++ CLEAN(result, poly, 64, 1);
++ CLEAN(result, poly, 64, 2);
++
++ TEST_VMOV(, poly, p, 64, 1);
++ TEST_VMOV(q, poly, p, 64, 2);
++
++ switch (i) {
++ case 0:
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vmov_n_expected0, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vmov_n_expected0, "");
++ break;
++ case 1:
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vmov_n_expected1, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vmov_n_expected1, "");
++ break;
++ case 2:
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, vmov_n_expected2, "");
++ CHECK_POLY(TEST_MSG, poly, 64, 2, PRIx64, vmov_n_expected2, "");
++ break;
++ default:
++ abort();
++ }
++ }
++
++ /* vget_lane_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VGET_LANE/VGETQ_LANE"
++
++#define TEST_VGET_LANE(Q, T1, T2, W, N, L) \
++ VECT_VAR(vget_lane_vector, T1, W, N) = vget##Q##_lane_##T2##W(VECT_VAR(vector, T1, W, N), L); \
++ if (VECT_VAR(vget_lane_vector, T1, W, N) != VECT_VAR(vget_lane_expected, T1, W, N)) { \
++ fprintf(stderr, \
++ "ERROR in %s (%s line %d in result '%s') at type %s " \
++ "got 0x%" PRIx##W " != 0x%" PRIx##W "\n", \
++ TEST_MSG, __FILE__, __LINE__, \
++ STR(VECT_VAR(vget_lane_expected, T1, W, N)), \
++ STR(VECT_NAME(T1, W, N)), \
++ (uint##W##_t)VECT_VAR(vget_lane_vector, T1, W, N), \
++ (uint##W##_t)VECT_VAR(vget_lane_expected, T1, W, N)); \
++ abort (); \
++ }
++
++ /* Initialize input values. */
++ DECL_VARIABLE(vector, poly, 64, 1);
++ DECL_VARIABLE(vector, poly, 64, 2);
++
++ VLOAD(vector, buffer, , poly, p, 64, 1);
++ VLOAD(vector, buffer, q, poly, p, 64, 2);
++
++ VECT_VAR_DECL(vget_lane_vector, poly, 64, 1);
++ VECT_VAR_DECL(vget_lane_vector, poly, 64, 2);
++
++ TEST_VGET_LANE( , poly, p, 64, 1, 0);
++ TEST_VGET_LANE(q, poly, p, 64, 2, 0);
++
++ /* vldx_lane_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VLDX_LANE/VLDXQ_LANE"
++
++VECT_VAR_DECL_INIT(buffer_vld2_lane, poly, 64, 2);
++VECT_VAR_DECL_INIT(buffer_vld3_lane, poly, 64, 3);
++VECT_VAR_DECL_INIT(buffer_vld4_lane, poly, 64, 4);
++
++ /* In this case, input variables are arrays of vectors. */
++#define DECL_VLD_STX_LANE(T1, W, N, X) \
++ VECT_ARRAY_TYPE(T1, W, N, X) VECT_ARRAY_VAR(vector, T1, W, N, X); \
++ VECT_ARRAY_TYPE(T1, W, N, X) VECT_ARRAY_VAR(vector_src, T1, W, N, X); \
++ VECT_VAR_DECL(result_bis_##X, T1, W, N)[X * N]
++
++ /* We need to use a temporary result buffer (result_bis), because
++ the one used for other tests is not large enough. A subset of the
++ result data is moved from result_bis to result, and it is this
++ subset which is used to check the actual behavior. The next
++ macro enables to move another chunk of data from result_bis to
++ result. */
++ /* We also use another extra input buffer (buffer_src), which we
++ fill with 0xAA, and which it used to load a vector from which we
++ read a given lane. */
++
++#define TEST_VLDX_LANE(Q, T1, T2, W, N, X, L) \
++ memset (VECT_VAR(buffer_src, T1, W, N), 0xAA, \
++ sizeof(VECT_VAR(buffer_src, T1, W, N))); \
++ \
++ VECT_ARRAY_VAR(vector_src, T1, W, N, X) = \
++ vld##X##Q##_##T2##W(VECT_VAR(buffer_src, T1, W, N)); \
++ \
++ VECT_ARRAY_VAR(vector, T1, W, N, X) = \
++ /* Use dedicated init buffer, of size. X */ \
++ vld##X##Q##_lane_##T2##W(VECT_VAR(buffer_vld##X##_lane, T1, W, X), \
++ VECT_ARRAY_VAR(vector_src, T1, W, N, X), \
++ L); \
++ vst##X##Q##_##T2##W(VECT_VAR(result_bis_##X, T1, W, N), \
++ VECT_ARRAY_VAR(vector, T1, W, N, X)); \
++ memcpy(VECT_VAR(result, T1, W, N), VECT_VAR(result_bis_##X, T1, W, N), \
++ sizeof(VECT_VAR(result, T1, W, N)))
++
++ /* Overwrite "result" with the contents of "result_bis"[Y]. */
++#undef TEST_EXTRA_CHUNK
++#define TEST_EXTRA_CHUNK(T1, W, N, X, Y) \
++ memcpy(VECT_VAR(result, T1, W, N), \
++ &(VECT_VAR(result_bis_##X, T1, W, N)[Y*N]), \
++ sizeof(VECT_VAR(result, T1, W, N)));
++
++ /* Add some padding to try to catch out of bound accesses. */
++#define ARRAY1(V, T, W, N) VECT_VAR_DECL(V,T,W,N)[1]={42}
++#define DUMMY_ARRAY(V, T, W, N, L) \
++ VECT_VAR_DECL(V,T,W,N)[N*L]={0}; \
++ ARRAY1(V##_pad,T,W,N)
++
++#define DECL_ALL_VLD_STX_LANE(X) \
++ DECL_VLD_STX_LANE(poly, 64, 1, X); \
++ DECL_VLD_STX_LANE(poly, 64, 2, X);
++
++#define TEST_ALL_VLDX_LANE(X) \
++ TEST_VLDX_LANE(, poly, p, 64, 1, X, 0); \
++ TEST_VLDX_LANE(q, poly, p, 64, 2, X, 0);
++
++#define TEST_ALL_EXTRA_CHUNKS(X,Y) \
++ TEST_EXTRA_CHUNK(poly, 64, 1, X, Y) \
++ TEST_EXTRA_CHUNK(poly, 64, 2, X, Y)
++
++#define CHECK_RESULTS_VLD_STX_LANE(test_name,EXPECTED,comment) \
++ CHECK_POLY(test_name, poly, 64, 1, PRIx64, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 64, 2, PRIx64, EXPECTED, comment);
++
++ /* Declare the temporary buffers / variables. */
++ DECL_ALL_VLD_STX_LANE(2);
++ DECL_ALL_VLD_STX_LANE(3);
++ DECL_ALL_VLD_STX_LANE(4);
++
++ DUMMY_ARRAY(buffer_src, poly, 64, 1, 4);
++ DUMMY_ARRAY(buffer_src, poly, 64, 2, 4);
++
++ /* Check vld2_lane/vld2q_lane. */
++ clean_results ();
++#undef TEST_MSG
++#define TEST_MSG "VLD2_LANE/VLD2Q_LANE"
++ TEST_ALL_VLDX_LANE(2);
++ CHECK_RESULTS_VLD_STX_LANE (TEST_MSG, expected_vld_st2_0, " chunk 0");
++
++ TEST_ALL_EXTRA_CHUNKS(2, 1);
++ CHECK_RESULTS_VLD_STX_LANE (TEST_MSG, expected_vld_st2_1, " chunk 1");
++
++ /* Check vld3_lane/vld3q_lane. */
++ clean_results ();
++#undef TEST_MSG
++#define TEST_MSG "VLD3_LANE/VLD3Q_LANE"
++ TEST_ALL_VLDX_LANE(3);
++ CHECK_RESULTS_VLD_STX_LANE (TEST_MSG, expected_vld_st3_0, " chunk 0");
++
++ TEST_ALL_EXTRA_CHUNKS(3, 1);
++ CHECK_RESULTS_VLD_STX_LANE (TEST_MSG, expected_vld_st3_1, " chunk 1");
++
++ TEST_ALL_EXTRA_CHUNKS(3, 2);
++ CHECK_RESULTS_VLD_STX_LANE (TEST_MSG, expected_vld_st3_2, " chunk 2");
++
++ /* Check vld4_lane/vld4q_lane. */
++ clean_results ();
++#undef TEST_MSG
++#define TEST_MSG "VLD4_LANE/VLD4Q_LANE"
++ TEST_ALL_VLDX_LANE(4);
++ CHECK_RESULTS_VLD_STX_LANE (TEST_MSG, expected_vld_st4_0, " chunk 0");
++
++ TEST_ALL_EXTRA_CHUNKS(4, 1);
++ CHECK_RESULTS_VLD_STX_LANE (TEST_MSG, expected_vld_st4_1, " chunk 1");
++
++ TEST_ALL_EXTRA_CHUNKS(4, 2);
++ CHECK_RESULTS_VLD_STX_LANE (TEST_MSG, expected_vld_st4_2, " chunk 2");
++
++ TEST_ALL_EXTRA_CHUNKS(4, 3);
++ CHECK_RESULTS_VLD_STX_LANE (TEST_MSG, expected_vld_st4_3, " chunk 3");
++
++ /* In this case, input variables are arrays of vectors. */
++#define DECL_VSTX_LANE(T1, W, N, X) \
++ VECT_ARRAY_TYPE(T1, W, N, X) VECT_ARRAY_VAR(vector, T1, W, N, X); \
++ VECT_ARRAY_TYPE(T1, W, N, X) VECT_ARRAY_VAR(vector_src, T1, W, N, X); \
++ VECT_VAR_DECL(result_bis_##X, T1, W, N)[X * N]
++
++ /* We need to use a temporary result buffer (result_bis), because
++ the one used for other tests is not large enough. A subset of the
++ result data is moved from result_bis to result, and it is this
++ subset which is used to check the actual behavior. The next
++ macro enables to move another chunk of data from result_bis to
++ result. */
++ /* We also use another extra input buffer (buffer_src), which we
++ fill with 0xAA, and which it used to load a vector from which we
++ read a given lane. */
++#define TEST_VSTX_LANE(Q, T1, T2, W, N, X, L) \
++ memset (VECT_VAR(buffer_src, T1, W, N), 0xAA, \
++ sizeof(VECT_VAR(buffer_src, T1, W, N))); \
++ memset (VECT_VAR(result_bis_##X, T1, W, N), 0, \
++ sizeof(VECT_VAR(result_bis_##X, T1, W, N))); \
++ \
++ VECT_ARRAY_VAR(vector_src, T1, W, N, X) = \
++ vld##X##Q##_##T2##W(VECT_VAR(buffer_src, T1, W, N)); \
++ \
++ VECT_ARRAY_VAR(vector, T1, W, N, X) = \
++ /* Use dedicated init buffer, of size X. */ \
++ vld##X##Q##_lane_##T2##W(VECT_VAR(buffer_vld##X##_lane, T1, W, X), \
++ VECT_ARRAY_VAR(vector_src, T1, W, N, X), \
++ L); \
++ vst##X##Q##_lane_##T2##W(VECT_VAR(result_bis_##X, T1, W, N), \
++ VECT_ARRAY_VAR(vector, T1, W, N, X), \
++ L); \
++ memcpy(VECT_VAR(result, T1, W, N), VECT_VAR(result_bis_##X, T1, W, N), \
++ sizeof(VECT_VAR(result, T1, W, N)));
++
++#define TEST_ALL_VSTX_LANE(X) \
++ TEST_VSTX_LANE(, poly, p, 64, 1, X, 0); \
++ TEST_VSTX_LANE(q, poly, p, 64, 2, X, 0);
++
++ /* Check vst2_lane/vst2q_lane. */
++ clean_results ();
++#undef TEST_MSG
++#define TEST_MSG "VST2_LANE/VST2Q_LANE"
++ TEST_ALL_VSTX_LANE(2);
++
++#define CMT " (chunk 0)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, expected_vld_st2_0, CMT);
++
++ TEST_ALL_EXTRA_CHUNKS(2, 1);
++#undef CMT
++#define CMT " chunk 1"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, expected_vld_st2_1, CMT);
++
++ /* Check vst3_lane/vst3q_lane. */
++ clean_results ();
++#undef TEST_MSG
++#define TEST_MSG "VST3_LANE/VST3Q_LANE"
++ TEST_ALL_VSTX_LANE(3);
++
++#undef CMT
++#define CMT " (chunk 0)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, expected_vld_st3_0, CMT);
++
++ TEST_ALL_EXTRA_CHUNKS(3, 1);
++
++#undef CMT
++#define CMT " (chunk 1)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, expected_vld_st3_1, CMT);
++
++ TEST_ALL_EXTRA_CHUNKS(3, 2);
++
++#undef CMT
++#define CMT " (chunk 2)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, expected_vld_st3_2, CMT);
++
++ /* Check vst4_lane/vst4q_lane. */
++ clean_results ();
++#undef TEST_MSG
++#define TEST_MSG "VST4_LANE/VST4Q_LANE"
++ TEST_ALL_VSTX_LANE(4);
++
++#undef CMT
++#define CMT " (chunk 0)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, expected_vld_st4_0, CMT);
++
++ TEST_ALL_EXTRA_CHUNKS(4, 1);
++
++#undef CMT
++#define CMT " (chunk 1)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, expected_vld_st4_1, CMT);
++
++ TEST_ALL_EXTRA_CHUNKS(4, 2);
++
++#undef CMT
++#define CMT " (chunk 2)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, expected_vld_st4_2, CMT);
++
++ TEST_ALL_EXTRA_CHUNKS(4, 3);
++
++#undef CMT
++#define CMT " (chunk 3)"
++ CHECK_POLY(TEST_MSG, poly, 64, 1, PRIx64, expected_vld_st4_3, CMT);
++
++#endif /* __aarch64__. */
++
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/ternary_scalar_op.inc
+@@ -0,0 +1,206 @@
++/* Template file for ternary scalar operator validation.
++
++ This file is meant to be included by test files for binary scalar
++ operations. */
++
++/* Check for required settings. */
++
++#ifndef INSN_NAME
++#error INSN_NAME (the intrinsic to test) must be defined.
++#endif
++
++#ifndef INPUT_TYPE
++#error INPUT_TYPE (basic type of an input value) must be defined.
++#endif
++
++#ifndef OUTPUT_TYPE
++#error OUTPUT_TYPE (basic type of an output value) must be defined.
++#endif
++
++#ifndef OUTPUT_TYPE_SIZE
++#error OUTPUT_TYPE_SIZE (size in bits of an output value) must be defined.
++#endif
++
++/* Optional settings:
++
++ INPUT_1: Input values for the first parameter. Must be of type INPUT_TYPE.
++ INPUT_2: Input values for the second parameter. Must be of type INPUT_TYPE.
++ INPUT_3: Input values for the third parameter. Must be of type
++ INPUT_TYPE. */
++
++#ifndef TEST_MSG
++#define TEST_MSG "unnamed test"
++#endif
++
++/* The test framework. */
++
++#include <stdio.h>
++
++extern void abort ();
++
++#define INFF __builtin_inf ()
++
++/* Stringify a macro. */
++#define STR0(A) #A
++#define STR(A) STR0 (A)
++
++/* Macro concatenation. */
++#define CAT0(A, B) A##B
++#define CAT(A, B) CAT0 (A, B)
++
++/* Format strings for error reporting. */
++#define FMT16 "0x%04x"
++#define FMT32 "0x%08x"
++#define FMT CAT (FMT,OUTPUT_TYPE_SIZE)
++
++/* Type construction: forms TS_t, where T is the base type and S the size in
++ bits. */
++#define MK_TYPE0(T, S) T##S##_t
++#define MK_TYPE(T, S) MK_TYPE0 (T, S)
++
++/* Convenience types for input and output data. */
++typedef MK_TYPE (uint, OUTPUT_TYPE_SIZE) output_hex_type;
++
++/* Conversion between typed values and their hexadecimal representation. */
++typedef union
++{
++ OUTPUT_TYPE value;
++ output_hex_type hex;
++} output_conv_type;
++
++/* Default input values. */
++
++float16_t input_1_float16_t[] =
++{
++ 0.0,
++ -0.0,
++ 2.0,
++ 3.1,
++ 20.0,
++ 0.40,
++ -2.3,
++ 1.33,
++ -7.6,
++ 0.31,
++ 0.3353,
++ 0.5,
++ 1.0,
++ 13.13,
++ -6.3,
++ 20.0,
++ (float16_t)INFF,
++ (float16_t)-INFF,
++};
++
++float16_t input_2_float16_t[] =
++{
++ 1.0,
++ 1.0,
++ -4.33,
++ 100.0,
++ 30.0,
++ -0.02,
++ 0.5,
++ -7.231,
++ -6.3,
++ 20.0,
++ -7.231,
++ 2.3,
++ -7.6,
++ 5.1,
++ 0.31,
++ 0.33353,
++ (float16_t)-INFF,
++ (float16_t)INFF,
++};
++
++float16_t input_3_float16_t[] =
++{
++ -0.0,
++ 0.0,
++ 0.31,
++ -0.31,
++ 1.31,
++ 2.1,
++ -6.3,
++ 1.0,
++ -1.5,
++ 5.1,
++ 0.3353,
++ 9.3,
++ -9.3,
++ -7.231,
++ 0.5,
++ -0.33,
++ (float16_t)INFF,
++ (float16_t)INFF,
++};
++
++#ifndef INPUT_1
++#define INPUT_1 CAT (input_1_,INPUT_TYPE)
++#endif
++
++#ifndef INPUT_2
++#define INPUT_2 CAT (input_2_,INPUT_TYPE)
++#endif
++
++#ifndef INPUT_3
++#define INPUT_3 CAT (input_3_,INPUT_TYPE)
++#endif
++
++/* Support macros and routines for the test function. */
++
++#define CHECK() \
++ { \
++ output_conv_type actual; \
++ output_conv_type expect; \
++ \
++ expect.hex = ((output_hex_type*)EXPECTED)[index]; \
++ actual.value = INSN_NAME ((INPUT_1)[index], \
++ (INPUT_2)[index], \
++ (INPUT_3)[index]); \
++ \
++ if (actual.hex != expect.hex) \
++ { \
++ fprintf (stderr, \
++ "ERROR in %s (%s line %d), buffer %s, " \
++ "index %d: got " \
++ FMT " != " FMT "\n", \
++ TEST_MSG, __FILE__, __LINE__, \
++ STR (EXPECTED), index, \
++ actual.hex, expect.hex); \
++ abort (); \
++ } \
++ fprintf (stderr, "CHECKED %s %s\n", \
++ STR (EXPECTED), TEST_MSG); \
++ }
++
++#define FNNAME1(NAME) exec_ ## NAME
++#define FNNAME(NAME) FNNAME1 (NAME)
++
++/* The test function. */
++
++void
++FNNAME (INSN_NAME) (void)
++{
++ /* Basic test: y[i] = OP (x[i]), for each INPUT[i], then compare the result
++ against EXPECTED[i]. */
++
++ const int num_tests = sizeof (INPUT_1) / sizeof (INPUT_1[0]);
++ int index;
++
++ for (index = 0; index < num_tests; index++)
++ CHECK ();
++
++#ifdef EXTRA_TESTS
++ EXTRA_TESTS ();
++#endif
++}
++
++int
++main (void)
++{
++ FNNAME (INSN_NAME) ();
++
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/unary_sat_op.inc
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/unary_sat_op.inc
+@@ -61,11 +61,11 @@ void FNNAME (INSN_NAME) (void)
+ TEST_UNARY_SAT_OP(INSN_NAME, q, int, s, 32, 4, expected_cumulative_sat, "");
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected, "");
+- CHECK(TEST_MSG, int, 16, 4, PRIx8, expected, "");
+- CHECK(TEST_MSG, int, 32, 2, PRIx8, expected, "");
++ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected, "");
++ CHECK(TEST_MSG, int, 32, 2, PRIx32, expected, "");
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected, "");
+- CHECK(TEST_MSG, int, 16, 8, PRIx8, expected, "");
+- CHECK(TEST_MSG, int, 32, 4, PRIx8, expected, "");
++ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected, "");
++ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected, "");
+
+ #ifdef EXTRA_TESTS
+ EXTRA_TESTS();
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/unary_scalar_op.inc
+@@ -0,0 +1,200 @@
++/* Template file for unary scalar operator validation.
++
++ This file is meant to be included by test files for unary scalar
++ operations. */
++
++/* Check for required settings. */
++
++#ifndef INSN_NAME
++#error INSN_NAME (the intrinsic to test) must be defined.
++#endif
++
++#ifndef INPUT_TYPE
++#error INPUT_TYPE (basic type of an input value) must be defined.
++#endif
++
++#ifndef SCALAR_OPERANDS
++#ifndef EXPECTED
++#error EXPECTED (an array of expected output values) must be defined.
++#endif
++#endif
++
++#ifndef OUTPUT_TYPE
++#error OUTPUT_TYPE (basic type of an output value) must be defined.
++#endif
++
++#ifndef OUTPUT_TYPE_SIZE
++#error OUTPUT_TYPE_SIZE (size in bits of an output value) must be defined.
++#endif
++
++/* Optional settings. */
++
++/* SCALAR_OPERANDS: Defined iff the intrinsic has a scalar operand.
++
++ SCALAR_1, SCALAR_2, .., SCALAR_4: If SCALAR_OPERANDS is defined, SCALAR_<n>
++ is the scalar and EXPECTED_<n> is array of expected values.
++
++ INPUT: Input values for the first parameter. Must be of type INPUT_TYPE. */
++
++/* Additional comments for the error message. */
++#ifndef COMMENT
++#define COMMENT ""
++#endif
++
++#ifndef TEST_MSG
++#define TEST_MSG "unnamed test"
++#endif
++
++/* The test framework. */
++
++#include <stdio.h>
++
++extern void abort ();
++
++#define INFF __builtin_inf ()
++
++/* Stringify a macro. */
++#define STR0(A) #A
++#define STR(A) STR0 (A)
++
++/* Macro concatenation. */
++#define CAT0(A, B) A##B
++#define CAT(A, B) CAT0 (A, B)
++
++/* Format strings for error reporting. */
++#define FMT16 "0x%04x"
++#define FMT32 "0x%08x"
++#define FMT64 "0x%016x"
++#define FMT CAT (FMT,OUTPUT_TYPE_SIZE)
++
++/* Type construction: forms TS_t, where T is the base type and S the size in
++ bits. */
++#define MK_TYPE0(T, S) T##S##_t
++#define MK_TYPE(T, S) MK_TYPE0 (T, S)
++
++/* Convenience types for input and output data. */
++typedef MK_TYPE (uint, OUTPUT_TYPE_SIZE) output_hex_type;
++
++/* Conversion between typed values and their hexadecimal representation. */
++typedef union
++{
++ OUTPUT_TYPE value;
++ output_hex_type hex;
++} output_conv_type;
++
++/* Default input values. */
++
++float16_t input_1_float16_t[] =
++{
++ 0.0, -0.0,
++ 2.0, 3.1,
++ 20.0, 0.40,
++ -2.3, 1.33,
++ -7.6, 0.31,
++ 0.3353, 0.5,
++ 1.0, 13.13,
++ -6.3, 20.0,
++ (float16_t)INFF, (float16_t)-INFF,
++};
++
++#ifndef INPUT
++#define INPUT CAT(input_1_,INPUT_TYPE)
++#endif
++
++/* Support macros and routines for the test function. */
++
++#define CHECK() \
++ { \
++ output_conv_type actual; \
++ output_conv_type expect; \
++ \
++ expect.hex = ((output_hex_type*)EXPECTED)[index]; \
++ actual.value = INSN_NAME ((INPUT)[index]); \
++ \
++ if (actual.hex != expect.hex) \
++ { \
++ fprintf (stderr, \
++ "ERROR in %s (%s line %d), buffer %s, " \
++ "index %d: got " \
++ FMT " != " FMT "\n", \
++ TEST_MSG, __FILE__, __LINE__, \
++ STR (EXPECTED), index, \
++ actual.hex, expect.hex); \
++ abort (); \
++ } \
++ fprintf (stderr, "CHECKED %s %s\n", \
++ STR (EXPECTED), TEST_MSG); \
++ }
++
++#define CHECK_N(SCALAR, EXPECTED) \
++ { \
++ output_conv_type actual; \
++ output_conv_type expect; \
++ \
++ expect.hex \
++ = ((output_hex_type*)EXPECTED)[index]; \
++ actual.value = INSN_NAME ((INPUT)[index], (SCALAR)); \
++ \
++ if (actual.hex != expect.hex) \
++ { \
++ fprintf (stderr, \
++ "ERROR in %s (%s line %d), buffer %s, " \
++ "index %d: got " \
++ FMT " != " FMT "\n", \
++ TEST_MSG, __FILE__, __LINE__, \
++ STR (EXPECTED), index, \
++ actual.hex, expect.hex); \
++ abort (); \
++ } \
++ fprintf (stderr, "CHECKED %s %s\n", \
++ STR (EXPECTED), TEST_MSG); \
++ }
++
++#define FNNAME1(NAME) exec_ ## NAME
++#define FNNAME(NAME) FNNAME1 (NAME)
++
++/* The test function. */
++
++void
++FNNAME (INSN_NAME) (void)
++{
++ /* Basic test: y[i] = OP (x[i]), for each INPUT[i], then compare the result
++ against EXPECTED[i]. */
++
++ const int num_tests = sizeof (INPUT) / sizeof (INPUT[0]);
++ int index;
++
++ for (index = 0; index < num_tests; index++)
++ {
++#if defined (SCALAR_OPERANDS)
++
++#ifdef SCALAR_1
++ CHECK_N (SCALAR_1, EXPECTED_1);
++#endif
++#ifdef SCALAR_2
++ CHECK_N (SCALAR_2, EXPECTED_2);
++#endif
++#ifdef SCALAR_3
++ CHECK_N (SCALAR_3, EXPECTED_3);
++#endif
++#ifdef SCALAR_4
++ CHECK_N (SCALAR_4, EXPECTED_4);
++#endif
++
++#else /* !defined (SCALAR_OPERAND). */
++ CHECK ();
++#endif
++ }
++
++#ifdef EXTRA_TESTS
++ EXTRA_TESTS ();
++#endif
++}
++
++int
++main (void)
++{
++ FNNAME (INSN_NAME) ();
++
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vabd.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vabd.c
+@@ -30,10 +30,20 @@ VECT_VAR_DECL(expected,uint,32,4) [] = { 0xffffffd0, 0xffffffd1,
+ 0xffffffd2, 0xffffffd3 };
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0x42407ae1, 0x423c7ae1,
+ 0x42387ae1, 0x42347ae1 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0x4e13, 0x4dd3,
++ 0x4d93, 0x4d53 };
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0x5204, 0x51e4, 0x51c4, 0x51a4,
++ 0x5184, 0x5164, 0x5144, 0x5124 };
++#endif
+
+ /* Additional expected results for float32 variants with specially
+ chosen input values. */
+ VECT_VAR_DECL(expected_float32,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_float16, hfloat, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++#endif
+
+ #define TEST_MSG "VABD/VABDQ"
+ void exec_vabd (void)
+@@ -65,6 +75,17 @@ void exec_vabd (void)
+ DECL_VABD_VAR(vector2);
+ DECL_VABD_VAR(vector_res);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector1, float, 16, 4);
++ DECL_VARIABLE(vector1, float, 16, 8);
++
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 8);
++
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
++
+ clean_results ();
+
+ /* Initialize input "vector1" from "buffer". */
+@@ -82,6 +103,12 @@ void exec_vabd (void)
+ VLOAD(vector1, buffer, q, uint, u, 16, 8);
+ VLOAD(vector1, buffer, q, uint, u, 32, 4);
+ VLOAD(vector1, buffer, q, float, f, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector1, buffer, , float, f, 16, 4);
++ VLOAD(vector1, buffer, , float, f, 16, 4);
++ VLOAD(vector1, buffer, q, float, f, 16, 8);
++ VLOAD(vector1, buffer, q, float, f, 16, 8);
++#endif
+
+ /* Choose init value arbitrarily. */
+ VDUP(vector2, , int, s, 8, 8, 1);
+@@ -98,6 +125,10 @@ void exec_vabd (void)
+ VDUP(vector2, q, uint, u, 16, 8, 12);
+ VDUP(vector2, q, uint, u, 32, 4, 32);
+ VDUP(vector2, q, float, f, 32, 4, 32.12f);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector2, , float, f, 16, 4, 8.3f);
++ VDUP(vector2, q, float, f, 16, 8, 32.12f);
++#endif
+
+ /* Execute the tests. */
+ TEST_VABD(, int, s, 8, 8);
+@@ -115,6 +146,11 @@ void exec_vabd (void)
+ TEST_VABD(q, uint, u, 32, 4);
+ TEST_VABD(q, float, f, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VABD(, float, f, 16, 4);
++ TEST_VABD(q, float, f, 16, 8);
++#endif
++
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected, "");
+ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 2, PRIx32, expected, "");
+@@ -129,7 +165,10 @@ void exec_vabd (void)
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, "");
+-
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
++#endif
+
+ /* Extra FP tests with special values (-0.0, ....) */
+ VDUP(vector1, q, float, f, 32, 4, -0.0f);
+@@ -137,11 +176,27 @@ void exec_vabd (void)
+ TEST_VABD(q, float, f, 32, 4);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_float32, " FP special (-0.0)");
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector1, q, float, f, 16, 8, -0.0f);
++ VDUP(vector2, q, float, f, 16, 8, 0.0);
++ TEST_VABD(q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_float16,
++ " FP special (-0.0)");
++#endif
++
+ /* Extra FP tests with special values (-0.0, ....) */
+ VDUP(vector1, q, float, f, 32, 4, 0.0f);
+ VDUP(vector2, q, float, f, 32, 4, -0.0);
+ TEST_VABD(q, float, f, 32, 4);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_float32, " FP special (-0.0)");
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector1, q, float, f, 16, 8, 0.0f);
++ VDUP(vector2, q, float, f, 16, 8, -0.0);
++ TEST_VABD(q, float, f, 16, 8);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_float16,
++ " FP special (-0.0)");
++#endif
+ }
+
+ int main (void)
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vabdh_f16_1.c
+@@ -0,0 +1,44 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++#define INFF __builtin_inf ()
++
++/* Expected results.
++ Absolute difference between INPUT1 and INPUT2 in binary_scalar_op.inc. */
++uint16_t expected[] =
++{
++ 0x3C00,
++ 0x3C00,
++ 0x4654,
++ 0x560E,
++ 0x4900,
++ 0x36B8,
++ 0x419a,
++ 0x4848,
++ 0x3d34,
++ 0x4cec,
++ 0x4791,
++ 0x3f34,
++ 0x484d,
++ 0x4804,
++ 0x469c,
++ 0x4ceb,
++ 0x7c00,
++ 0x7c00
++};
++
++#define TEST_MSG "VABDH_F16"
++#define INSN_NAME vabdh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vabs.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vabs.c
+@@ -21,24 +21,52 @@ VECT_VAR_DECL(expected,int,32,4) [] = { 0x10, 0xf, 0xe, 0xd };
+ /* Expected results for float32 variants. Needs to be separated since
+ the generic test function does not test floating-point
+ versions. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_float16, hfloat, 16, 4) [] = { 0x409a, 0x409a,
++ 0x409a, 0x409a };
++VECT_VAR_DECL(expected_float16, hfloat, 16, 8) [] = { 0x42cd, 0x42cd,
++ 0x42cd, 0x42cd,
++ 0x42cd, 0x42cd,
++ 0x42cd, 0x42cd };
++#endif
+ VECT_VAR_DECL(expected_float32,hfloat,32,2) [] = { 0x40133333, 0x40133333 };
+ VECT_VAR_DECL(expected_float32,hfloat,32,4) [] = { 0x4059999a, 0x4059999a,
+ 0x4059999a, 0x4059999a };
+
+ void exec_vabs_f32(void)
+ {
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector, float, 32, 2);
+ DECL_VARIABLE(vector, float, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector_res, float, 32, 2);
+ DECL_VARIABLE(vector_res, float, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, -2.3f);
++ VDUP(vector, q, float, f, 16, 8, 3.4f);
++#endif
+ VDUP(vector, , float, f, 32, 2, -2.3f);
+ VDUP(vector, q, float, f, 32, 4, 3.4f);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_UNARY_OP(INSN_NAME, , float, f, 16, 4);
++ TEST_UNARY_OP(INSN_NAME, q, float, f, 16, 8);
++#endif
+ TEST_UNARY_OP(INSN_NAME, , float, f, 32, 2);
+ TEST_UNARY_OP(INSN_NAME, q, float, f, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_float16, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_float16, "");
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_float32, "");
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_float32, "");
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vabsh_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0x4233 /* 3.099609 */,
++ 0x4d00 /* 20.000000 */,
++ 0x3666 /* 0.399902 */,
++ 0x409a /* 2.300781 */,
++ 0x3d52 /* 1.330078 */,
++ 0x479a /* 7.601562 */,
++ 0x34f6 /* 0.310059 */,
++ 0x355d /* 0.335205 */,
++ 0x3800 /* 0.500000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4a91 /* 13.132812 */,
++ 0x464d /* 6.300781 */,
++ 0x4d00 /* 20.000000 */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */
++};
++
++#define TEST_MSG "VABSH_F16"
++#define INSN_NAME vabsh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vadd.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vadd.c
+@@ -43,6 +43,14 @@ VECT_VAR_DECL(expected,uint,64,2) [] = { 0xfffffffffffffff3,
+ VECT_VAR_DECL(expected_float32,hfloat,32,2) [] = { 0x40d9999a, 0x40d9999a };
+ VECT_VAR_DECL(expected_float32,hfloat,32,4) [] = { 0x41100000, 0x41100000,
+ 0x41100000, 0x41100000 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_float16, hfloat, 16, 4) [] = { 0x46cd, 0x46cd,
++ 0x46cd, 0x46cd };
++VECT_VAR_DECL(expected_float16, hfloat, 16, 8) [] = { 0x4880, 0x4880,
++ 0x4880, 0x4880,
++ 0x4880, 0x4880,
++ 0x4880, 0x4880 };
++#endif
+
+ void exec_vadd_f32(void)
+ {
+@@ -66,4 +74,27 @@ void exec_vadd_f32(void)
+
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_float32, "");
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_float32, "");
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 8);
++
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++
++ VDUP(vector, , float, f, 16, 4, 2.3f);
++ VDUP(vector, q, float, f, 16, 8, 3.4f);
++
++ VDUP(vector2, , float, f, 16, 4, 4.5f);
++ VDUP(vector2, q, float, f, 16, 8, 5.6f);
++
++ TEST_BINARY_OP(INSN_NAME, , float, f, 16, 4);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_float16, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_float16, "");
++#endif
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vaddh_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0xc0a8 /* -2.328125 */,
++ 0x5672 /* 103.125000 */,
++ 0x5240 /* 50.000000 */,
++ 0x3614 /* 0.379883 */,
++ 0xbf34 /* -1.800781 */,
++ 0xc5e6 /* -5.898438 */,
++ 0xcaf4 /* -13.906250 */,
++ 0x4d14 /* 20.312500 */,
++ 0xc6e5 /* -6.894531 */,
++ 0x419a /* 2.800781 */,
++ 0xc69a /* -6.601562 */,
++ 0x4c8f /* 18.234375 */,
++ 0xc5fe /* -5.992188 */,
++ 0x4d15 /* 20.328125 */,
++ 0x7e00 /* nan */,
++ 0x7e00 /* nan */,
++};
++
++#define TEST_MSG "VADDH_F16"
++#define INSN_NAME vaddh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vbsl.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vbsl.c
+@@ -16,6 +16,10 @@ VECT_VAR_DECL(expected,uint,64,1) [] = { 0xfffffff1 };
+ VECT_VAR_DECL(expected,poly,8,8) [] = { 0xf3, 0xf3, 0xf3, 0xf3,
+ 0xf7, 0xf7, 0xf7, 0xf7 };
+ VECT_VAR_DECL(expected,poly,16,4) [] = { 0xfff0, 0xfff0, 0xfff2, 0xfff2 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc09, 0xcb89,
++ 0xcb09, 0xca89 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1800004, 0xc1700004 };
+ VECT_VAR_DECL(expected,int,8,16) [] = { 0xf2, 0xf2, 0xf2, 0xf2,
+ 0xf6, 0xf6, 0xf6, 0xf6,
+@@ -43,6 +47,12 @@ VECT_VAR_DECL(expected,poly,8,16) [] = { 0xf3, 0xf3, 0xf3, 0xf3,
+ 0xf7, 0xf7, 0xf7, 0xf7 };
+ VECT_VAR_DECL(expected,poly,16,8) [] = { 0xfff0, 0xfff0, 0xfff2, 0xfff2,
+ 0xfff4, 0xfff4, 0xfff6, 0xfff6 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc09, 0xcb89,
++ 0xcb09, 0xca89,
++ 0xca09, 0xc989,
++ 0xc909, 0xc889 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1800001, 0xc1700001,
+ 0xc1600001, 0xc1500001 };
+
+@@ -66,6 +76,10 @@ void exec_vbsl (void)
+ clean_results ();
+
+ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (FP16_SUPPORTED)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+ VLOAD(vector, buffer, q, float, f, 32, 4);
+
+@@ -80,6 +94,9 @@ void exec_vbsl (void)
+ VDUP(vector2, , uint, u, 16, 4, 0xFFF2);
+ VDUP(vector2, , uint, u, 32, 2, 0xFFFFFFF0);
+ VDUP(vector2, , uint, u, 64, 1, 0xFFFFFFF3);
++#if defined (FP16_SUPPORTED)
++ VDUP(vector2, , float, f, 16, 4, -2.4f); /* -2.4f is 0xC0CD. */
++#endif
+ VDUP(vector2, , float, f, 32, 2, -30.3f);
+ VDUP(vector2, , poly, p, 8, 8, 0xF3);
+ VDUP(vector2, , poly, p, 16, 4, 0xFFF2);
+@@ -94,6 +111,9 @@ void exec_vbsl (void)
+ VDUP(vector2, q, uint, u, 64, 2, 0xFFFFFFF3);
+ VDUP(vector2, q, poly, p, 8, 16, 0xF3);
+ VDUP(vector2, q, poly, p, 16, 8, 0xFFF2);
++#if defined (FP16_SUPPORTED)
++ VDUP(vector2, q, float, f, 16, 8, -2.4f);
++#endif
+ VDUP(vector2, q, float, f, 32, 4, -30.4f);
+
+ VDUP(vector_first, , uint, u, 8, 8, 0xF4);
+@@ -111,10 +131,18 @@ void exec_vbsl (void)
+ TEST_VBSL(uint, , poly, p, 16, 4);
+ TEST_VBSL(uint, q, poly, p, 8, 16);
+ TEST_VBSL(uint, q, poly, p, 16, 8);
++#if defined (FP16_SUPPORTED)
++ TEST_VBSL(uint, , float, f, 16, 4);
++ TEST_VBSL(uint, q, float, f, 16, 8);
++#endif
+ TEST_VBSL(uint, , float, f, 32, 2);
+ TEST_VBSL(uint, q, float, f, 32, 4);
+
++#if defined (FP16_SUPPORTED)
++ CHECK_RESULTS (TEST_MSG, "");
++#else
+ CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
++#endif
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcage.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcage.c
+@@ -11,3 +11,13 @@ VECT_VAR_DECL(expected,uint,32,4) [] = { 0xffffffff, 0xffffffff,
+ VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xffffffff, 0xffffffff };
+ VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xffffffff, 0xffffffff,
+ 0xffffffff, 0xffffffff };
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, uint, 16, 4) [] = { 0xffff, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected, uint, 16, 8) [] = { 0xffff, 0xffff, 0xffff, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected2, uint, 16, 4) [] = { 0xffff, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL (expected2, uint, 16, 8) [] = { 0xffff, 0xffff, 0xffff, 0xffff,
++ 0xffff, 0xffff, 0xffff, 0x0 };
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcageh_f16_1.c
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0xFFFF, 0x0, 0xFFFF,
++ 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
++ 0xFFFF};
++
++#define TEST_MSG "VCAGEH_F16"
++#define INSN_NAME vcageh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcagt.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcagt.c
+@@ -11,3 +11,13 @@ VECT_VAR_DECL(expected,uint,32,4) [] = { 0xffffffff, 0xffffffff,
+ VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xffffffff, 0xffffffff };
+ VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xffffffff, 0xffffffff,
+ 0xffffffff, 0xffffffff };
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected, uint, 16, 8) [] = { 0xffff, 0xffff, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected2, uint, 16, 4) [] = { 0xffff, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL (expected2, uint, 16, 8) [] = { 0xffff, 0xffff, 0xffff, 0xffff,
++ 0xffff, 0xffff, 0x0, 0x0 };
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcagth_f16_1.c
+@@ -0,0 +1,21 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0xFFFF, 0x0, 0xFFFF,
++ 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0};
++
++#define TEST_MSG "VCAGTH_F16"
++#define INSN_NAME vcagth_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcale.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcale.c
+@@ -9,3 +9,13 @@ VECT_VAR_DECL(expected,uint,32,4) [] = { 0x0, 0x0, 0xffffffff, 0xffffffff };
+
+ VECT_VAR_DECL(expected2,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected2,uint,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, uint, 16, 4) [] = { 0xffff, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL (expected, uint, 16, 8) [] = { 0x0, 0x0, 0xffff, 0xffff,
++ 0xffff, 0xffff, 0xffff, 0xffff };
++
++VECT_VAR_DECL (expected2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected2, uint, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0xffff, 0xffff };
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcaleh_f16_1.c
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0,
++ 0xFFFF, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0,
++ 0x0, 0xFFFF, 0xFFFF};
++
++#define TEST_MSG "VCALEH_F16"
++#define INSN_NAME vcaleh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcalt.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcalt.c
+@@ -9,3 +9,13 @@ VECT_VAR_DECL(expected,uint,32,4) [] = { 0x0, 0x0, 0x0, 0xffffffff };
+
+ VECT_VAR_DECL(expected2,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected2,uint,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, uint, 16, 4) [] = { 0x0, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL (expected, uint, 16, 8) [] = { 0x0, 0x0, 0x0, 0xffff,
++ 0xffff, 0xffff, 0xffff, 0xffff };
++
++VECT_VAR_DECL (expected2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected2, uint, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0xffff };
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcalth_f16_1.c
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0,
++ 0xFFFF, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0,
++ 0x0, 0x0, 0x0};
++
++#define TEST_MSG "VCALTH_F16"
++#define INSN_NAME vcalth_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vceq.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vceq.c
+@@ -32,6 +32,12 @@ VECT_VAR_DECL(expected_q_uint,uint,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xffff, 0x0 };
+ VECT_VAR_DECL(expected_q_uint,uint,32,4) [] = { 0x0, 0x0, 0xffffffff, 0x0 };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0x0, 0xffff, 0x0, 0x0 };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0x0, 0x0, 0xffff, 0x0,
++ 0x0, 0x0, 0x0, 0x0, };
++#endif
++
+ VECT_VAR_DECL(expected_float,uint,32,2) [] = { 0x0, 0xffffffff };
+ VECT_VAR_DECL(expected_q_float,uint,32,4) [] = { 0x0, 0x0, 0xffffffff, 0x0 };
+
+@@ -39,6 +45,18 @@ VECT_VAR_DECL(expected_uint2,uint,32,2) [] = { 0xffffffff, 0x0 };
+ VECT_VAR_DECL(expected_uint3,uint,32,2) [] = { 0x0, 0xffffffff };
+ VECT_VAR_DECL(expected_uint4,uint,32,2) [] = { 0xffffffff, 0x0 };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_nan2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_inf2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
++
+ VECT_VAR_DECL(expected_nan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_mnan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_nan2,uint,32,2) [] = { 0x0, 0x0 };
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vceqh_f16_1.c
+@@ -0,0 +1,21 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
++
++#define TEST_MSG "VCEQH_F16"
++#define INSN_NAME vceqh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vceqz_1.c
+@@ -0,0 +1,27 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#define INSN_NAME vceqz
++#define TEST_MSG "VCEQZ/VCEQZQ"
++
++#include "cmp_zero_op.inc"
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++#endif
++
++/* Extra FP tests with special values (NaN, ....). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_zero, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vceqzh_f16_1.c
+@@ -0,0 +1,21 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0xFFFF, 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
++
++#define TEST_MSG "VCEQZH_F16"
++#define INSN_NAME vceqzh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcge.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcge.c
+@@ -28,6 +28,14 @@ VECT_VAR_DECL(expected_q_uint,uint,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0, 0x0, 0xffff, 0xffff };
+ VECT_VAR_DECL(expected_q_uint,uint,32,4) [] = { 0x0, 0x0, 0xffffffff, 0xffffffff };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0x0, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0x0, 0x0,
++ 0xffff, 0xffff,
++ 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
++
+ VECT_VAR_DECL(expected_float,uint,32,2) [] = { 0x0, 0xffffffff };
+ VECT_VAR_DECL(expected_q_float,uint,32,4) [] = { 0x0, 0x0, 0xffffffff, 0xffffffff };
+
+@@ -35,6 +43,20 @@ VECT_VAR_DECL(expected_uint2,uint,32,2) [] = { 0xffffffff, 0xffffffff };
+ VECT_VAR_DECL(expected_uint3,uint,32,2) [] = { 0x0, 0xffffffff };
+ VECT_VAR_DECL(expected_uint4,uint,32,2) [] = { 0xffffffff, 0xffffffff };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_nan2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_inf2, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
++
+ VECT_VAR_DECL(expected_nan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_mnan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_nan2,uint,32,2) [] = { 0x0, 0x0 };
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcgeh_f16_1.c
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0x0, 0x0, 0xFFFF, 0x0, 0x0, 0xFFFF, 0x0, 0xFFFF,
++ 0x0, 0x0, 0xFFFF, 0x0, 0xFFFF, 0xFFFF, 0x0, 0xFFFF,
++ 0xFFFF, 0x0};
++
++#define TEST_MSG "VCGEH_F16"
++#define INSN_NAME vcgeh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcgez_1.c
+@@ -0,0 +1,30 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#define INSN_NAME vcgez
++#define TEST_MSG "VCGEZ/VCGEZQ"
++
++#include "cmp_zero_op.inc"
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff,
++ 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
++
++/* Extra FP tests with special values (NaN, ....). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_zero, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcgezh_f16_1.c
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0,
++ 0xFFFF, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
++ 0x0, 0xFFFF, 0xFFFF, 0x0};
++
++#define TEST_MSG "VCGEZH_F16"
++#define INSN_NAME vcgezh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcgt.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcgt.c
+@@ -28,6 +28,14 @@ VECT_VAR_DECL(expected_q_uint,uint,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xffff };
+ VECT_VAR_DECL(expected_q_uint,uint,32,4) [] = { 0x0, 0x0, 0x0, 0xffffffff };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0x0, 0x0, 0xffff, 0xffff };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0x0, 0x0,
++ 0x0, 0xffff,
++ 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
++
+ VECT_VAR_DECL(expected_float,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_q_float,uint,32,4) [] = { 0x0, 0x0, 0x0, 0xffffffff };
+
+@@ -35,6 +43,19 @@ VECT_VAR_DECL(expected_uint2,uint,32,2) [] = { 0x0, 0xffffffff };
+ VECT_VAR_DECL(expected_uint3,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_uint4,uint,32,2) [] = { 0x0, 0xffffffff };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_nan2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_inf2, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++#endif
++
+ VECT_VAR_DECL(expected_nan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_mnan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_nan2,uint,32,2) [] = { 0x0, 0x0 };
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcgth_f16_1.c
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0x0, 0x0, 0xFFFF, 0x0, 0x0, 0xFFFF, 0x0, 0xFFFF,
++ 0x0, 0x0, 0xFFFF, 0x0, 0xFFFF, 0xFFFF, 0x0, 0xFFFF,
++ 0xFFFF, 0x0};
++
++#define TEST_MSG "VCGTH_F16"
++#define INSN_NAME vcgth_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcgtz_1.c
+@@ -0,0 +1,28 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#define INSN_NAME vcgtz
++#define TEST_MSG "VCGTZ/VCGTZQ"
++
++#include "cmp_zero_op.inc"
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff,
++ 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
++
++/* Extra FP tests with special values (NaN, ....). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_zero, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcgtzh_f16_1.c
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0x0, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0xFFFF,
++ 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0,
++ 0xFFFF, 0xFFFF, 0x0};
++
++#define TEST_MSG "VCGTZH_F16"
++#define INSN_NAME vcgtzh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcle.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcle.c
+@@ -31,6 +31,14 @@ VECT_VAR_DECL(expected_q_uint,uint,16,8) [] = { 0xffff, 0xffff, 0xffff, 0xffff,
+ VECT_VAR_DECL(expected_q_uint,uint,32,4) [] = { 0xffffffff, 0xffffffff,
+ 0xffffffff, 0x0 };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0xffff, 0xffff, 0x0, 0x0 };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0xffff, 0xffff,
++ 0xffff, 0x0,
++ 0x0, 0x0,
++ 0x0, 0x0 };
++#endif
++
+ VECT_VAR_DECL(expected_float,uint,32,2) [] = { 0xffffffff, 0xffffffff };
+ VECT_VAR_DECL(expected_q_float,uint,32,4) [] = { 0xffffffff, 0xffffffff,
+ 0xffffffff, 0x0 };
+@@ -39,6 +47,20 @@ VECT_VAR_DECL(expected_uint2,uint,32,2) [] = { 0xffffffff, 0x0 };
+ VECT_VAR_DECL(expected_uint3,uint,32,2) [] = { 0xffffffff, 0xffffffff };
+ VECT_VAR_DECL(expected_uint4,uint,32,2) [] = { 0xffffffff, 0x0 };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_nan2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_inf2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
++
+ VECT_VAR_DECL(expected_nan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_mnan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_nan2,uint,32,2) [] = { 0x0, 0x0 };
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcleh_f16_1.c
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0xFFFF, 0xFFFF, 0x0, 0xFFFF, 0xFFFF, 0x0, 0xFFFF, 0x0,
++ 0xFFFF, 0xFFFF, 0x0, 0xFFFF, 0x0, 0x0, 0xFFFF, 0x0, 0x0,
++ 0xFFFF};
++
++#define TEST_MSG "VCLEH_F16"
++#define INSN_NAME vcleh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vclez_1.c
+@@ -0,0 +1,29 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#define INSN_NAME vclez
++#define TEST_MSG "VCLEZ/VCLEZQ"
++
++#include "cmp_zero_op.inc"
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0 };
++#endif
++
++/* Extra FP tests with special values (NaN, ....). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_zero, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vclezh_f16_1.c
+@@ -0,0 +1,21 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0xFFFF, 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0x0, 0xFFFF,
++ 0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0x0, 0x0, 0xFFFF};
++
++#define TEST_MSG "VCLEZH_F16"
++#define INSN_NAME vclezh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vclt.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vclt.c
+@@ -30,6 +30,14 @@ VECT_VAR_DECL(expected_q_uint,uint,16,8) [] = { 0xffff, 0xffff, 0xffff, 0xffff,
+ VECT_VAR_DECL(expected_q_uint,uint,32,4) [] = { 0xffffffff, 0xffffffff,
+ 0x0, 0x0 };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0xffff, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0xffff, 0xffff,
++ 0x0, 0x0,
++ 0x0, 0x0,
++ 0x0, 0x0 };
++#endif
++
+ VECT_VAR_DECL(expected_float,uint,32,2) [] = { 0xffffffff, 0x0 };
+ VECT_VAR_DECL(expected_q_float,uint,32,4) [] = { 0xffffffff, 0xffffffff,
+ 0x0, 0x0 };
+@@ -38,6 +46,19 @@ VECT_VAR_DECL(expected_uint2,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_uint3,uint,32,2) [] = { 0xffffffff, 0x0 };
+ VECT_VAR_DECL(expected_uint4,uint,32,2) [] = { 0x0, 0x0 };
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_nan2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_inf2, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++#endif
++
+ VECT_VAR_DECL(expected_nan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_mnan,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_nan2,uint,32,2) [] = { 0x0, 0x0 };
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vclth_f16_1.c
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0xFFFF, 0xFFFF, 0x0, 0xFFFF, 0xFFFF, 0x0, 0xFFFF, 0x0,
++ 0xFFFF, 0xFFFF, 0x0, 0xFFFF, 0x0, 0x0, 0xFFFF, 0x0, 0x0,
++ 0xFFFF};
++
++#define TEST_MSG "VCLTH_F16"
++#define INSN_NAME vclth_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcltz_1.c
+@@ -0,0 +1,27 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#define INSN_NAME vcltz
++#define TEST_MSG "VCLTZ/VCLTZQ"
++
++#include "cmp_zero_op.inc"
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_float, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_q_float, uint, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0 };
++#endif
++
++/* Extra FP tests with special values (NaN, ....). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected_nan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mnan, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_inf, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++
++VECT_VAR_DECL (expected_minf, uint, 16, 4) [] = { 0xffff, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL (expected_zero, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL (expected_mzero, uint, 16, 4) [] = { 0x0, 0x0, 0x0, 0x0 };
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcltzh_f16_1.c
+@@ -0,0 +1,21 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0x0, 0xFFFF,
++ 0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0x0, 0x0, 0xFFFF};
++
++#define TEST_MSG "VCltZH_F16"
++#define INSN_NAME vcltzh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcnt.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcnt.c
+@@ -65,10 +65,10 @@ FNNAME (INSN_NAME)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcombine.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcombine.c
+@@ -93,8 +93,8 @@ void exec_vcombine (void)
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
+ CHECK(TEST_MSG, uint, 64, 2, PRIx64, expected, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected, "");
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
+ #endif
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcreate.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcreate.c
+@@ -106,8 +106,8 @@ FNNAME (INSN_NAME)
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
+ CHECK(TEST_MSG, uint, 64, 1, PRIx64, expected, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected, "");
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
+ #endif
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvt.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvt.c
+@@ -4,36 +4,99 @@
+ #include <math.h>
+
+ /* Expected results for vcvt. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_s, hfloat, 16, 4) [] =
++{ 0xcc00, 0xcb80, 0xcb00, 0xca80 };
++VECT_VAR_DECL(expected_u, hfloat, 16, 4) [] =
++{ 0x7c00, 0x7c00, 0x7c00, 0x7c00, };
++VECT_VAR_DECL(expected_s, hfloat, 16, 8) [] =
++{ 0xcc00, 0xcb80, 0xcb00, 0xca80,
++ 0xca00, 0xc980, 0xc900, 0xc880 };
++VECT_VAR_DECL(expected_u, hfloat, 16, 8) [] =
++{ 0x7c00, 0x7c00, 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00, 0x7c00, 0x7c00, };
++#endif
+ VECT_VAR_DECL(expected_s,hfloat,32,2) [] = { 0xc1800000, 0xc1700000 };
+ VECT_VAR_DECL(expected_u,hfloat,32,2) [] = { 0x4f800000, 0x4f800000 };
+ VECT_VAR_DECL(expected_s,hfloat,32,4) [] = { 0xc1800000, 0xc1700000,
+- 0xc1600000, 0xc1500000 };
++ 0xc1600000, 0xc1500000 };
+ VECT_VAR_DECL(expected_u,hfloat,32,4) [] = { 0x4f800000, 0x4f800000,
+- 0x4f800000, 0x4f800000 };
++ 0x4f800000, 0x4f800000 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, int, 16, 4) [] = { 0xfff1, 0x5, 0xfff1, 0x5 };
++VECT_VAR_DECL(expected, uint, 16, 4) [] = { 0x0, 0x5, 0x0, 0x5 };
++VECT_VAR_DECL(expected, int, 16, 8) [] = { 0x0, 0x0, 0xf, 0xfff1,
++ 0x0, 0x0, 0xf, 0xfff1 };
++VECT_VAR_DECL(expected, uint, 16, 8) [] = { 0x0, 0x0, 0xf, 0x0,
++ 0x0, 0x0, 0xf, 0x0 };
++#endif
+ VECT_VAR_DECL(expected,int,32,2) [] = { 0xfffffff1, 0x5 };
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0x0, 0x5 };
+ VECT_VAR_DECL(expected,int,32,4) [] = { 0x0, 0x0, 0xf, 0xfffffff1 };
+ VECT_VAR_DECL(expected,uint,32,4) [] = { 0x0, 0x0, 0xf, 0x0 };
+
+ /* Expected results for vcvt_n. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_vcvt_n_s, hfloat, 16, 4) [] = { 0xc400, 0xc380,
++ 0xc300, 0xc280 };
++VECT_VAR_DECL(expected_vcvt_n_u, hfloat, 16, 4) [] = { 0x6000, 0x6000,
++ 0x6000, 0x6000 };
++VECT_VAR_DECL(expected_vcvt_n_s, hfloat, 16, 8) [] = { 0xb000, 0xaf80,
++ 0xaf00, 0xae80,
++ 0xae00, 0xad80,
++ 0xad00, 0xac80 };
++VECT_VAR_DECL(expected_vcvt_n_u, hfloat, 16, 8) [] = { 0x4c00, 0x4c00,
++ 0x4c00, 0x4c00,
++ 0x4c00, 0x4c00,
++ 0x4c00, 0x4c00 };
++#endif
+ VECT_VAR_DECL(expected_vcvt_n_s,hfloat,32,2) [] = { 0xc0800000, 0xc0700000 };
+ VECT_VAR_DECL(expected_vcvt_n_u,hfloat,32,2) [] = { 0x4c000000, 0x4c000000 };
+ VECT_VAR_DECL(expected_vcvt_n_s,hfloat,32,4) [] = { 0xb2800000, 0xb2700000,
+ 0xb2600000, 0xb2500000 };
+ VECT_VAR_DECL(expected_vcvt_n_u,hfloat,32,4) [] = { 0x49800000, 0x49800000,
+ 0x49800000, 0x49800000 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_vcvt_n, int, 16, 4) [] = { 0xffc3, 0x15,
++ 0xffc3, 0x15 };
++VECT_VAR_DECL(expected_vcvt_n, uint, 16, 4) [] = { 0x0, 0x2a6, 0x0, 0x2a6 };
++VECT_VAR_DECL(expected_vcvt_n, int, 16, 8) [] = { 0x0, 0x0, 0x78f, 0xf871,
++ 0x0, 0x0, 0x78f, 0xf871 };
++VECT_VAR_DECL(expected_vcvt_n, uint, 16, 8) [] = { 0x0, 0x0, 0xf1e0, 0x0,
++ 0x0, 0x0, 0xf1e0, 0x0 };
++#endif
+ VECT_VAR_DECL(expected_vcvt_n,int,32,2) [] = { 0xff0b3333, 0x54cccd };
+ VECT_VAR_DECL(expected_vcvt_n,uint,32,2) [] = { 0x0, 0x15 };
+ VECT_VAR_DECL(expected_vcvt_n,int,32,4) [] = { 0x0, 0x0, 0x1e3d7, 0xfffe1c29 };
+ VECT_VAR_DECL(expected_vcvt_n,uint,32,4) [] = { 0x0, 0x0, 0x1e, 0x0 };
+
+ /* Expected results for vcvt with rounding. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_rounding, int, 16, 4) [] = { 0xa, 0xa, 0xa, 0xa };
++VECT_VAR_DECL(expected_rounding, uint, 16, 4) [] = { 0xa, 0xa, 0xa, 0xa };
++VECT_VAR_DECL(expected_rounding, int, 16, 8) [] = { 0x7d, 0x7d, 0x7d, 0x7d,
++ 0x7d, 0x7d, 0x7d, 0x7d };
++VECT_VAR_DECL(expected_rounding, uint, 16, 8) [] = { 0x7d, 0x7d, 0x7d, 0x7d,
++ 0x7d, 0x7d, 0x7d, 0x7d };
++#endif
+ VECT_VAR_DECL(expected_rounding,int,32,2) [] = { 0xa, 0xa };
+ VECT_VAR_DECL(expected_rounding,uint,32,2) [] = { 0xa, 0xa };
+ VECT_VAR_DECL(expected_rounding,int,32,4) [] = { 0x7d, 0x7d, 0x7d, 0x7d };
+ VECT_VAR_DECL(expected_rounding,uint,32,4) [] = { 0x7d, 0x7d, 0x7d, 0x7d };
+
+ /* Expected results for vcvt_n with rounding. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_vcvt_n_rounding, int, 16, 4) [] =
++{ 0x533, 0x533, 0x533, 0x533 };
++VECT_VAR_DECL(expected_vcvt_n_rounding, uint, 16, 4) [] =
++{ 0x533, 0x533, 0x533, 0x533 };
++VECT_VAR_DECL(expected_vcvt_n_rounding, int, 16, 8) [] =
++{ 0x7fff, 0x7fff, 0x7fff, 0x7fff,
++ 0x7fff, 0x7fff, 0x7fff, 0x7fff };
++VECT_VAR_DECL(expected_vcvt_n_rounding, uint, 16, 8) [] =
++{ 0xffff, 0xffff, 0xffff, 0xffff,
++ 0xffff, 0xffff, 0xffff, 0xffff };
++#endif
+ VECT_VAR_DECL(expected_vcvt_n_rounding,int,32,2) [] = { 0xa66666, 0xa66666 };
+ VECT_VAR_DECL(expected_vcvt_n_rounding,uint,32,2) [] = { 0xa66666, 0xa66666 };
+ VECT_VAR_DECL(expected_vcvt_n_rounding,int,32,4) [] = { 0xfbccc, 0xfbccc,
+@@ -42,11 +105,17 @@ VECT_VAR_DECL(expected_vcvt_n_rounding,uint,32,4) [] = { 0xfbccc, 0xfbccc,
+ 0xfbccc, 0xfbccc };
+
+ /* Expected results for vcvt_n with saturation. */
+-VECT_VAR_DECL(expected_vcvt_n_saturation,int,32,2) [] = { 0x7fffffff,
+- 0x7fffffff };
+-VECT_VAR_DECL(expected_vcvt_n_saturation,int,32,4) [] = { 0x7fffffff,
+- 0x7fffffff,
+- 0x7fffffff, 0x7fffffff };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_vcvt_n_saturation, int, 16, 4) [] =
++{ 0x533, 0x533, 0x533, 0x533 };
++VECT_VAR_DECL(expected_vcvt_n_saturation, int, 16, 8) [] =
++{ 0x7fff, 0x7fff, 0x7fff, 0x7fff,
++ 0x7fff, 0x7fff, 0x7fff, 0x7fff };
++#endif
++VECT_VAR_DECL(expected_vcvt_n_saturation,int,32,2) [] =
++{ 0x7fffffff, 0x7fffffff };
++VECT_VAR_DECL(expected_vcvt_n_saturation,int,32,4) [] =
++{ 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff };
+
+ #define TEST_MSG "VCVT/VCVTQ"
+ void exec_vcvt (void)
+@@ -89,11 +158,26 @@ void exec_vcvt (void)
+
+ /* Initialize input "vector" from "buffer". */
+ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+ VLOAD(vector, buffer, q, float, f, 32, 4);
+
+ /* Make sure some elements have a fractional part, to exercise
+ integer conversions. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VSET_LANE(vector, , float, f, 16, 4, 0, -15.3f);
++ VSET_LANE(vector, , float, f, 16, 4, 1, 5.3f);
++ VSET_LANE(vector, , float, f, 16, 4, 2, -15.3f);
++ VSET_LANE(vector, , float, f, 16, 4, 3, 5.3f);
++ VSET_LANE(vector, q, float, f, 16, 8, 4, -15.3f);
++ VSET_LANE(vector, q, float, f, 16, 8, 5, 5.3f);
++ VSET_LANE(vector, q, float, f, 16, 8, 6, -15.3f);
++ VSET_LANE(vector, q, float, f, 16, 8, 7, 5.3f);
++#endif
++
+ VSET_LANE(vector, , float, f, 32, 2, 0, -15.3f);
+ VSET_LANE(vector, , float, f, 32, 2, 1, 5.3f);
+ VSET_LANE(vector, q, float, f, 32, 4, 2, -15.3f);
+@@ -103,23 +187,55 @@ void exec_vcvt (void)
+ before overwriting them. */
+ #define TEST_MSG2 ""
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt_f16_xx. */
++ TEST_VCVT_FP(, float, f, 16, 4, int, s, expected_s);
++ TEST_VCVT_FP(, float, f, 16, 4, uint, u, expected_u);
++#endif
+ /* vcvt_f32_xx. */
+ TEST_VCVT_FP(, float, f, 32, 2, int, s, expected_s);
+ TEST_VCVT_FP(, float, f, 32, 2, uint, u, expected_u);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvtq_f16_xx. */
++ TEST_VCVT_FP(q, float, f, 16, 8, int, s, expected_s);
++ TEST_VCVT_FP(q, float, f, 16, 8, uint, u, expected_u);
++#endif
+ /* vcvtq_f32_xx. */
+ TEST_VCVT_FP(q, float, f, 32, 4, int, s, expected_s);
+ TEST_VCVT_FP(q, float, f, 32, 4, uint, u, expected_u);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt_xx_f16. */
++ TEST_VCVT(, int, s, 16, 4, float, f, expected);
++ TEST_VCVT(, uint, u, 16, 4, float, f, expected);
++#endif
+ /* vcvt_xx_f32. */
+ TEST_VCVT(, int, s, 32, 2, float, f, expected);
+ TEST_VCVT(, uint, u, 32, 2, float, f, expected);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VSET_LANE(vector, q, float, f, 16, 8, 0, 0.0f);
++ VSET_LANE(vector, q, float, f, 16, 8, 1, -0.0f);
++ VSET_LANE(vector, q, float, f, 16, 8, 2, 15.12f);
++ VSET_LANE(vector, q, float, f, 16, 8, 3, -15.12f);
++ VSET_LANE(vector, q, float, f, 16, 8, 4, 0.0f);
++ VSET_LANE(vector, q, float, f, 16, 8, 5, -0.0f);
++ VSET_LANE(vector, q, float, f, 16, 8, 6, 15.12f);
++ VSET_LANE(vector, q, float, f, 16, 8, 7, -15.12f);
++#endif
++
+ VSET_LANE(vector, q, float, f, 32, 4, 0, 0.0f);
+ VSET_LANE(vector, q, float, f, 32, 4, 1, -0.0f);
+ VSET_LANE(vector, q, float, f, 32, 4, 2, 15.12f);
+ VSET_LANE(vector, q, float, f, 32, 4, 3, -15.12f);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvtq_xx_f16. */
++ TEST_VCVT(q, int, s, 16, 8, float, f, expected);
++ TEST_VCVT(q, uint, u, 16, 8, float, f, expected);
++#endif
++
+ /* vcvtq_xx_f32. */
+ TEST_VCVT(q, int, s, 32, 4, float, f, expected);
+ TEST_VCVT(q, uint, u, 32, 4, float, f, expected);
+@@ -129,18 +245,38 @@ void exec_vcvt (void)
+ #undef TEST_MSG
+ #define TEST_MSG "VCVT_N/VCVTQ_N"
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt_n_f16_xx. */
++ TEST_VCVT_N_FP(, float, f, 16, 4, int, s, 2, expected_vcvt_n_s);
++ TEST_VCVT_N_FP(, float, f, 16, 4, uint, u, 7, expected_vcvt_n_u);
++#endif
+ /* vcvt_n_f32_xx. */
+ TEST_VCVT_N_FP(, float, f, 32, 2, int, s, 2, expected_vcvt_n_s);
+ TEST_VCVT_N_FP(, float, f, 32, 2, uint, u, 7, expected_vcvt_n_u);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvtq_n_f16_xx. */
++ TEST_VCVT_N_FP(q, float, f, 16, 8, int, s, 7, expected_vcvt_n_s);
++ TEST_VCVT_N_FP(q, float, f, 16, 8, uint, u, 12, expected_vcvt_n_u);
++#endif
+ /* vcvtq_n_f32_xx. */
+ TEST_VCVT_N_FP(q, float, f, 32, 4, int, s, 30, expected_vcvt_n_s);
+ TEST_VCVT_N_FP(q, float, f, 32, 4, uint, u, 12, expected_vcvt_n_u);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt_n_xx_f16. */
++ TEST_VCVT_N(, int, s, 16, 4, float, f, 2, expected_vcvt_n);
++ TEST_VCVT_N(, uint, u, 16, 4, float, f, 7, expected_vcvt_n);
++#endif
+ /* vcvt_n_xx_f32. */
+ TEST_VCVT_N(, int, s, 32, 2, float, f, 20, expected_vcvt_n);
+ TEST_VCVT_N(, uint, u, 32, 2, float, f, 2, expected_vcvt_n);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvtq_n_xx_f16. */
++ TEST_VCVT_N(q, int, s, 16, 8, float, f, 7, expected_vcvt_n);
++ TEST_VCVT_N(q, uint, u, 16, 8, float, f, 12, expected_vcvt_n);
++#endif
+ /* vcvtq_n_xx_f32. */
+ TEST_VCVT_N(q, int, s, 32, 4, float, f, 13, expected_vcvt_n);
+ TEST_VCVT_N(q, uint, u, 32, 4, float, f, 1, expected_vcvt_n);
+@@ -150,20 +286,49 @@ void exec_vcvt (void)
+ #define TEST_MSG "VCVT/VCVTQ"
+ #undef TEST_MSG2
+ #define TEST_MSG2 "(check rounding)"
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, 10.4f);
++ VDUP(vector, q, float, f, 16, 8, 125.9f);
++#endif
+ VDUP(vector, , float, f, 32, 2, 10.4f);
+ VDUP(vector, q, float, f, 32, 4, 125.9f);
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt_xx_f16. */
++ TEST_VCVT(, int, s, 16, 4, float, f, expected_rounding);
++ TEST_VCVT(, uint, u, 16, 4, float, f, expected_rounding);
++#endif
+ /* vcvt_xx_f32. */
+ TEST_VCVT(, int, s, 32, 2, float, f, expected_rounding);
+ TEST_VCVT(, uint, u, 32, 2, float, f, expected_rounding);
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvtq_xx_f16. */
++ TEST_VCVT(q, int, s, 16, 8, float, f, expected_rounding);
++ TEST_VCVT(q, uint, u, 16, 8, float, f, expected_rounding);
++#endif
+ /* vcvtq_xx_f32. */
+ TEST_VCVT(q, int, s, 32, 4, float, f, expected_rounding);
+ TEST_VCVT(q, uint, u, 32, 4, float, f, expected_rounding);
+
+ #undef TEST_MSG
+ #define TEST_MSG "VCVT_N/VCVTQ_N"
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt_n_xx_f16. */
++ TEST_VCVT_N(, int, s, 16, 4, float, f, 7, expected_vcvt_n_rounding);
++ TEST_VCVT_N(, uint, u, 16, 4, float, f, 7, expected_vcvt_n_rounding);
++#endif
+ /* vcvt_n_xx_f32. */
+ TEST_VCVT_N(, int, s, 32, 2, float, f, 20, expected_vcvt_n_rounding);
+ TEST_VCVT_N(, uint, u, 32, 2, float, f, 20, expected_vcvt_n_rounding);
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvtq_n_xx_f16. */
++ TEST_VCVT_N(q, int, s, 16, 8, float, f, 13, expected_vcvt_n_rounding);
++ TEST_VCVT_N(q, uint, u, 16, 8, float, f, 13, expected_vcvt_n_rounding);
++#endif
+ /* vcvtq_n_xx_f32. */
+ TEST_VCVT_N(q, int, s, 32, 4, float, f, 13, expected_vcvt_n_rounding);
+ TEST_VCVT_N(q, uint, u, 32, 4, float, f, 13, expected_vcvt_n_rounding);
+@@ -172,8 +337,18 @@ void exec_vcvt (void)
+ #define TEST_MSG "VCVT_N/VCVTQ_N"
+ #undef TEST_MSG2
+ #define TEST_MSG2 "(check saturation)"
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt_n_xx_f16. */
++ TEST_VCVT_N(, int, s, 16, 4, float, f, 7, expected_vcvt_n_saturation);
++#endif
+ /* vcvt_n_xx_f32. */
+ TEST_VCVT_N(, int, s, 32, 2, float, f, 31, expected_vcvt_n_saturation);
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvtq_n_xx_f16. */
++ TEST_VCVT_N(q, int, s, 16, 8, float, f, 13, expected_vcvt_n_saturation);
++#endif
+ /* vcvtq_n_xx_f32. */
+ TEST_VCVT_N(q, int, s, 32, 4, float, f, 31, expected_vcvt_n_saturation);
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtX.inc
+@@ -0,0 +1,113 @@
++/* Template file for VCVT operator validation.
++
++ This file is meant to be included by the relevant test files, which
++ have to define the intrinsic family to test. If a given intrinsic
++ supports variants which are not supported by all the other vcvt
++ operators, these can be tested by providing a definition for
++ EXTRA_TESTS.
++
++ This file is only used for VCVT? tests, which currently have only f16 to
++ integer variants. It is based on vcvt.c. */
++
++#define FNNAME1(NAME) exec_ ## NAME
++#define FNNAME(NAME) FNNAME1 (NAME)
++
++void FNNAME (INSN_NAME) (void)
++{
++ int i;
++
++ /* Basic test: y=vcvt(x), then store the result. */
++#define TEST_VCVT1(INSN, Q, T1, T2, W, N, TS1, TS2, EXP) \
++ VECT_VAR(vector_res, T1, W, N) = \
++ INSN##Q##_##T2##W##_##TS2##W(VECT_VAR(vector, TS1, W, N)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), \
++ VECT_VAR(vector_res, T1, W, N)); \
++ CHECK(TEST_MSG, T1, W, N, PRIx##W, EXP, TEST_MSG2);
++
++#define TEST_VCVT(INSN, Q, T1, T2, W, N, TS1, TS2, EXP) \
++ TEST_VCVT1 (INSN, Q, T1, T2, W, N, TS1, TS2, EXP)
++
++ DECL_VARIABLE_ALL_VARIANTS(vector);
++ DECL_VARIABLE_ALL_VARIANTS(vector_res);
++
++ clean_results ();
++
++ /* Initialize input "vector" from "buffer". */
++ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
++
++ /* Make sure some elements have a fractional part, to exercise
++ integer conversions. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VSET_LANE(vector, , float, f, 16, 4, 0, -15.3f);
++ VSET_LANE(vector, , float, f, 16, 4, 1, 5.3f);
++ VSET_LANE(vector, , float, f, 16, 4, 2, -15.3f);
++ VSET_LANE(vector, , float, f, 16, 4, 3, 5.3f);
++ VSET_LANE(vector, q, float, f, 16, 8, 4, -15.3f);
++ VSET_LANE(vector, q, float, f, 16, 8, 5, 5.3f);
++ VSET_LANE(vector, q, float, f, 16, 8, 6, -15.3f);
++ VSET_LANE(vector, q, float, f, 16, 8, 7, 5.3f);
++#endif
++
++ /* The same result buffers are used multiple times, so we check them
++ before overwriting them. */
++#define TEST_MSG2 ""
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt?_xx_f16. */
++ TEST_VCVT(INSN_NAME, , int, s, 16, 4, float, f, expected);
++ TEST_VCVT(INSN_NAME, , uint, u, 16, 4, float, f, expected);
++#endif
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VSET_LANE(vector, q, float, f, 16, 8, 0, 0.0f);
++ VSET_LANE(vector, q, float, f, 16, 8, 1, -0.0f);
++ VSET_LANE(vector, q, float, f, 16, 8, 2, 15.12f);
++ VSET_LANE(vector, q, float, f, 16, 8, 3, -15.12f);
++ VSET_LANE(vector, q, float, f, 16, 8, 4, 0.0f);
++ VSET_LANE(vector, q, float, f, 16, 8, 5, -0.0f);
++ VSET_LANE(vector, q, float, f, 16, 8, 6, 15.12f);
++ VSET_LANE(vector, q, float, f, 16, 8, 7, -15.12f);
++#endif
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt?q_xx_f16. */
++ TEST_VCVT(INSN_NAME, q, int, s, 16, 8, float, f, expected);
++ TEST_VCVT(INSN_NAME, q, uint, u, 16, 8, float, f, expected);
++#endif
++
++ /* Check rounding. */
++#undef TEST_MSG2
++#define TEST_MSG2 "(check rounding)"
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, 10.4f);
++ VDUP(vector, q, float, f, 16, 8, 125.9f);
++#endif
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt?_xx_f16. */
++ TEST_VCVT(INSN_NAME, , int, s, 16, 4, float, f, expected_rounding);
++ TEST_VCVT(INSN_NAME, , uint, u, 16, 4, float, f, expected_rounding);
++#endif
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ /* vcvt?q_xx_f16. */
++ TEST_VCVT(INSN_NAME, q, int, s, 16, 8, float, f, expected_rounding);
++ TEST_VCVT(INSN_NAME, q, uint, u, 16, 8, float, f, expected_rounding);
++#endif
++
++#ifdef EXTRA_TESTS
++ EXTRA_TESTS();
++#endif
++}
++
++int
++main (void)
++{
++ FNNAME (INSN_NAME) ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvta_1.c
+@@ -0,0 +1,33 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++#include <math.h>
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, int, 16, 4) [] = { 0xfff1, 0x5, 0xfff1, 0x5 };
++VECT_VAR_DECL(expected, uint, 16, 4) [] = { 0x0, 0x5, 0x0, 0x5 };
++VECT_VAR_DECL(expected, int, 16, 8) [] = { 0x0, 0x0, 0xf, 0xfff1,
++ 0x0, 0x0, 0xf, 0xfff1 };
++VECT_VAR_DECL(expected, uint, 16, 8) [] = { 0x0, 0x0, 0xf, 0x0,
++ 0x0, 0x0, 0xf, 0x0 };
++#endif
++
++/* Expected results with rounding. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_rounding, int, 16, 4) [] = { 0xa, 0xa, 0xa, 0xa };
++VECT_VAR_DECL(expected_rounding, uint, 16, 4) [] = { 0xa, 0xa, 0xa, 0xa };
++VECT_VAR_DECL(expected_rounding, int, 16, 8) [] = { 0x7e, 0x7e, 0x7e, 0x7e,
++ 0x7e, 0x7e, 0x7e, 0x7e };
++VECT_VAR_DECL(expected_rounding, uint, 16, 8) [] = { 0x7e, 0x7e, 0x7e, 0x7e,
++ 0x7e, 0x7e, 0x7e, 0x7e };
++#endif
++
++#define TEST_MSG "VCVTA/VCVTAQ"
++#define INSN_NAME vcvta
++
++#include "vcvtX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtah_s16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int16_t expected[] = { 124, -57, 1, 25, -64, 169, -4, 77 };
++
++#define TEST_MSG "VCVTAH_S16_F16"
++#define INSN_NAME vcvtah_s16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtah_s32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007b,
++ 0xfffffdc8,
++ 0xffffffdd,
++ 0x00000400,
++ 0x00000297,
++ 0x000000a9,
++ 0xfffffffb,
++ 0x0000004d,
++ 0xffffff6f,
++ 0xffffffc7,
++ 0xfffffff0,
++ 0xfffffff1,
++ 0xfffffff2,
++ 0xfffffff3
++};
++
++#define TEST_MSG "VCVTAH_S32_F16"
++#define INSN_NAME vcvtah_s32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtah_s64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int64_t expected[] = { 124, -57, 1, 25, -64, 169, -4, 77 };
++
++#define TEST_MSG "VCVTAH_S64_F16"
++#define INSN_NAME vcvtah_s64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtah_u16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint16_t expected[] = { 124, 57, 1, 25, 64, 169, 4, 77 };
++
++#define TEST_MSG "VCVTAH_u16_F16"
++#define INSN_NAME vcvtah_u16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtah_u32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007b,
++ 0x00000000,
++ 0x00000000,
++ 0x00000400,
++ 0x00000297,
++ 0x000000a9,
++ 0x00000000,
++ 0x0000004d,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000
++};
++
++#define TEST_MSG "VCVTAH_U32_F16"
++#define INSN_NAME vcvtah_u32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtah_u64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint64_t expected[] = { 124, 57, 1, 25, 64, 169, 4, 77 };
++
++#define TEST_MSG "VCVTAH_u64_F16"
++#define INSN_NAME vcvtah_u64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_s16_1.c
+@@ -0,0 +1,25 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++int16_t input[] = { 123, -567, 0, 1024, -63, 169, -4, 77 };
++uint16_t expected[] = { 0x57B0 /* 123.0. */, 0xE06E /* -567.0. */,
++ 0x0000 /* 0.0. */, 0x6400 /* 1024. */,
++ 0xD3E0 /* -63. */, 0x5948 /* 169. */,
++ 0xC400 /* -4. */, 0x54D0 /* 77. */ };
++
++#define TEST_MSG "VCVTH_F16_S16"
++#define INSN_NAME vcvth_f16_s16
++
++#define EXPECTED expected
++
++#define INPUT input
++#define INPUT_TYPE int16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_s32_1.c
+@@ -0,0 +1,52 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++uint32_t input[] =
++{
++ 0, -0,
++ 123, -567,
++ -34, 1024,
++ -63, 169,
++ -4, 77,
++ -144, -56,
++ -16, -15,
++ -14, -13,
++};
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x57b0 /* 123.000000 */,
++ 0xe06e /* -567.000000 */,
++ 0xd040 /* -34.000000 */,
++ 0x6400 /* 1024.000000 */,
++ 0xd3e0 /* -63.000000 */,
++ 0x5948 /* 169.000000 */,
++ 0xc400 /* -4.000000 */,
++ 0x54d0 /* 77.000000 */,
++ 0xd880 /* -144.000000 */,
++ 0xd300 /* -56.000000 */,
++ 0xcc00 /* -16.000000 */,
++ 0xcb80 /* -15.000000 */,
++ 0xcb00 /* -14.000000 */,
++ 0xca80 /* -13.000000 */
++};
++
++#define TEST_MSG "VCVTH_F16_S32"
++#define INSN_NAME vcvth_f16_s32
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE uint32_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_s64_1.c
+@@ -0,0 +1,25 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++int64_t input[] = { 123, -567, 0, 1024, -63, 169, -4, 77 };
++uint16_t expected[] = { 0x57B0 /* 123.0. */, 0xE06E /* -567.0. */,
++ 0x0000 /* 0.0. */, 0x6400 /* 1024. */,
++ 0xD3E0 /* -63. */, 0x5948 /* 169. */,
++ 0xC400 /* -4. */, 0x54D0 /* 77. */ };
++
++#define TEST_MSG "VCVTH_F16_S64"
++#define INSN_NAME vcvth_f16_s64
++
++#define EXPECTED expected
++
++#define INPUT input
++#define INPUT_TYPE int64_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_u16_1.c
+@@ -0,0 +1,25 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint16_t input[] = { 123, 567, 0, 1024, 63, 169, 4, 77 };
++uint16_t expected[] = { 0x57B0 /* 123.0. */, 0x606E /* 567.0. */,
++ 0x0000 /* 0.0. */, 0x6400 /* 1024.0. */,
++ 0x53E0 /* 63.0. */, 0x5948 /* 169.0. */,
++ 0x4400 /* 4.0. */, 0x54D0 /* 77.0. */ };
++
++#define TEST_MSG "VCVTH_F16_U16"
++#define INSN_NAME vcvth_f16_u16
++
++#define EXPECTED expected
++
++#define INPUT input
++#define INPUT_TYPE uint16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_u32_1.c
+@@ -0,0 +1,52 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++int32_t input[] =
++{
++ 0, -0,
++ 123, -567,
++ -34, 1024,
++ -63, 169,
++ -4, 77,
++ -144, -56,
++ -16, -15,
++ -14, -13,
++};
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x57b0 /* 123.000000 */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x6400 /* 1024.000000 */,
++ 0x7c00 /* inf */,
++ 0x5948 /* 169.000000 */,
++ 0x7c00 /* inf */,
++ 0x54d0 /* 77.000000 */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */
++};
++
++#define TEST_MSG "VCVTH_F16_U32"
++#define INSN_NAME vcvth_f16_u32
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE int32_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_u64_1.c
+@@ -0,0 +1,25 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++uint64_t input[] = { 123, 567, 0, 1024, 63, 169, 4, 77 };
++uint16_t expected[] = { 0x57B0 /* 123.0. */, 0x606E /* 567.0. */,
++ 0x0000 /* 0.0. */, 0x6400 /* 1024.0. */,
++ 0x53E0 /* 63.0. */, 0x5948 /* 169.0. */,
++ 0x4400 /* 4.0. */, 0x54D0 /* 77.0. */ };
++
++#define TEST_MSG "VCVTH_F16_U64"
++#define INSN_NAME vcvth_f16_u64
++
++#define EXPECTED expected
++
++#define INPUT input
++#define INPUT_TYPE uint64_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_s16_1.c
+@@ -0,0 +1,46 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++int16_t input[] = { 1, 10, 48, 100, -1, -10, 7, -7 };
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected_1[] = { 0x3800 /* 0.5. */,
++ 0x4500 /* 5. */,
++ 0x4E00 /* 24. */,
++ 0x5240 /* 50. */,
++ 0xB800 /* -0.5. */,
++ 0xC500 /* -5. */,
++ 0x4300 /* 3.5. */,
++ 0xC300 /* -3.5. */ };
++
++uint16_t expected_2[] = { 0x3400 /* 0.25. */,
++ 0x4100 /* 2.5. */,
++ 0x4A00 /* 12. */,
++ 0x4E40 /* 25. */,
++ 0xB400 /* -0.25. */,
++ 0xC100 /* -2.5. */,
++ 0x3F00 /* 1.75. */,
++ 0xBF00 /* -1.75. */ };
++
++#define TEST_MSG "VCVTH_N_F16_S16"
++#define INSN_NAME vcvth_n_f16_s16
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++
++#define INPUT_TYPE int16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_s32_1.c
+@@ -0,0 +1,99 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++uint32_t input[] =
++{
++ 0, -0,
++ 123, -567,
++ -34, 1024,
++ -63, 169,
++ -4, 77,
++ -144, -56,
++ -16, -15,
++ -14, -13,
++};
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected_1[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x53b0 /* 61.500000 */,
++ 0xdc6e /* -283.500000 */,
++ 0xcc40 /* -17.000000 */,
++ 0x6000 /* 512.000000 */,
++ 0xcfe0 /* -31.500000 */,
++ 0x5548 /* 84.500000 */,
++ 0xc000 /* -2.000000 */,
++ 0x50d0 /* 38.500000 */,
++ 0xd480 /* -72.000000 */,
++ 0xcf00 /* -28.000000 */,
++ 0xc800 /* -8.000000 */,
++ 0xc780 /* -7.500000 */,
++ 0xc700 /* -7.000000 */,
++ 0xc680 /* -6.500000 */
++};
++
++uint16_t expected_2[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x4fb0 /* 30.750000 */,
++ 0xd86e /* -141.750000 */,
++ 0xc840 /* -8.500000 */,
++ 0x5c00 /* 256.000000 */,
++ 0xcbe0 /* -15.750000 */,
++ 0x5148 /* 42.250000 */,
++ 0xbc00 /* -1.000000 */,
++ 0x4cd0 /* 19.250000 */,
++ 0xd080 /* -36.000000 */,
++ 0xcb00 /* -14.000000 */,
++ 0xc400 /* -4.000000 */,
++ 0xc380 /* -3.750000 */,
++ 0xc300 /* -3.500000 */,
++ 0xc280 /* -3.250000 */
++};
++
++uint16_t expected_3[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x8002 /* -0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x0004 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x0001 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x8001 /* -0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x8000 /* -0.000000 */
++};
++
++#define TEST_MSG "VCVTH_N_F16_S32"
++#define INSN_NAME vcvth_n_f16_s32
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++#define EXPECTED_3 expected_3
++
++#define INPUT_TYPE int32_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++#define SCALAR_3 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_s64_1.c
+@@ -0,0 +1,46 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++int64_t input[] = { 1, 10, 48, 100, -1, -10, 7, -7 };
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected_1[] = { 0x3800 /* 0.5. */,
++ 0x4500 /* 5. */,
++ 0x4E00 /* 24. */,
++ 0x5240 /* 50. */,
++ 0xB800 /* -0.5. */,
++ 0xC500 /* -5. */,
++ 0x4300 /* 3.5. */,
++ 0xC300 /* -3.5. */ };
++
++uint16_t expected_2[] = { 0x3400 /* 0.25. */,
++ 0x4100 /* 2.5. */,
++ 0x4A00 /* 12. */,
++ 0x4E40 /* 25. */,
++ 0xB400 /* -0.25. */,
++ 0xC100 /* -2.5. */,
++ 0x3F00 /* 1.75. */,
++ 0xBF00 /* -1.75. */ };
++
++#define TEST_MSG "VCVTH_N_F16_S64"
++#define INSN_NAME vcvth_n_f16_s64
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++
++#define INPUT_TYPE int64_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_u16_1.c
+@@ -0,0 +1,46 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++uint16_t input[] = { 1, 10, 48, 100, 1000, 0, 500, 9 };
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected_1[] = { 0x3800 /* 0.5. */,
++ 0x4500 /* 5. */,
++ 0x4E00 /* 24. */,
++ 0x5240 /* 50. */,
++ 0x5FD0 /* 500. */,
++ 0x0000 /* 0.0. */,
++ 0x5BD0 /* 250. */,
++ 0x4480 /* 4.5. */ };
++
++uint16_t expected_2[] = { 0x3400 /* 0.25. */,
++ 0x4100 /* 2.5. */,
++ 0x4A00 /* 12. */,
++ 0x4E40 /* 25. */,
++ 0x5BD0 /* 250. */,
++ 0x0000 /* 0.0. */,
++ 0x57D0 /* 125. */,
++ 0x4080 /* 2.25. */ };
++
++#define TEST_MSG "VCVTH_N_F16_U16"
++#define INSN_NAME vcvth_n_f16_u16
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++
++#define INPUT_TYPE uint16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_u32_1.c
+@@ -0,0 +1,99 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++uint32_t input[] =
++{
++ 0, -0,
++ 123, -567,
++ -34, 1024,
++ -63, 169,
++ -4, 77,
++ -144, -56,
++ -16, -15,
++ -14, -13,
++};
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected_1[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x53b0 /* 61.500000 */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x6000 /* 512.000000 */,
++ 0x7c00 /* inf */,
++ 0x5548 /* 84.500000 */,
++ 0x7c00 /* inf */,
++ 0x50d0 /* 38.500000 */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */
++};
++
++uint16_t expected_2[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x4fb0 /* 30.750000 */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x5c00 /* 256.000000 */,
++ 0x7c00 /* inf */,
++ 0x5148 /* 42.250000 */,
++ 0x7c00 /* inf */,
++ 0x4cd0 /* 19.250000 */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */
++};
++
++uint16_t expected_3[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x0004 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x0001 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */
++};
++
++#define TEST_MSG "VCVTH_N_F16_U32"
++#define INSN_NAME vcvth_n_f16_u32
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++#define EXPECTED_3 expected_3
++
++#define INPUT_TYPE uint32_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++#define SCALAR_3 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_u64_1.c
+@@ -0,0 +1,46 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++uint64_t input[] = { 1, 10, 48, 100, 1000, 0, 500, 9 };
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected_1[] = { 0x3800 /* 0.5. */,
++ 0x4500 /* 5. */,
++ 0x4E00 /* 24. */,
++ 0x5240 /* 50. */,
++ 0x5FD0 /* 500. */,
++ 0x0000 /* 0.0. */,
++ 0x5BD0 /* 250. */,
++ 0x4480 /* 4.5. */ };
++
++uint16_t expected_2[] = { 0x3400 /* 0.25. */,
++ 0x4100 /* 2.5. */,
++ 0x4A00 /* 12. */,
++ 0x4E40 /* 25. */,
++ 0x5BD0 /* 250. */,
++ 0x0000 /* 0.0. */,
++ 0x57D0 /* 125. */,
++ 0x4080 /* 2.25. */ };
++
++#define TEST_MSG "VCVTH_N_F16_U64"
++#define INSN_NAME vcvth_n_f16_u64
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++
++#define INPUT_TYPE uint64_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_s16_f16_1.c
+@@ -0,0 +1,29 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 2.5, 100, 7.1, -9.9, -5.0, 9.1, -4.8, 77 };
++int16_t expected_1[] = { 5, 200, 14, -19, -10, 18, -9, 154 };
++int16_t expected_2[] = { 10, 400, 28, -39, -20, 36, -19, 308 };
++
++#define TEST_MSG "VCVTH_N_S16_F16"
++#define INSN_NAME vcvth_n_s16_f16
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int16_t
++#define OUTPUT_TYPE_SIZE 16
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_s32_f16_1.c
+@@ -0,0 +1,100 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected_1[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x000000f6,
++ 0xfffffb90,
++ 0xffffffbb,
++ 0x00000800,
++ 0x0000052e,
++ 0x00000152,
++ 0xfffffff7,
++ 0x0000009a,
++ 0xfffffedf,
++ 0xffffff8f,
++ 0xffffffe0,
++ 0xffffffe2,
++ 0xffffffe4,
++ 0xffffffe6,
++};
++
++uint32_t expected_2[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x000001ed,
++ 0xfffff720,
++ 0xffffff75,
++ 0x00001000,
++ 0x00000a5c,
++ 0x000002a4,
++ 0xffffffed,
++ 0x00000134,
++ 0xfffffdbe,
++ 0xffffff1d,
++ 0xffffffc0,
++ 0xffffffc4,
++ 0xffffffc8,
++ 0xffffffcc,
++};
++
++uint32_t expected_3[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x7fffffff,
++ 0x80000000,
++ 0x80000000,
++ 0x7fffffff,
++ 0x7fffffff,
++ 0x7fffffff,
++ 0x80000000,
++ 0x7fffffff,
++ 0x80000000,
++ 0x80000000,
++ 0x80000000,
++ 0x80000000,
++ 0x80000000,
++ 0x80000000,
++};
++
++#define TEST_MSG "VCVTH_N_S32_F16"
++#define INSN_NAME vcvth_n_s32_f16
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++#define EXPECTED_3 expected_3
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint32_t
++#define OUTPUT_TYPE_SIZE 32
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++#define SCALAR_3 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_s64_f16_1.c
+@@ -0,0 +1,29 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 2.5, 100, 7.1, -9.9, -5.0, 9.1, -4.8, 77 };
++int64_t expected_1[] = { 5, 200, 14, -19, -10, 18, -9, 154 };
++int64_t expected_2[] = { 10, 400, 28, -39, -20, 36, -19, 308 };
++
++#define TEST_MSG "VCVTH_N_S64_F16"
++#define INSN_NAME vcvth_n_s64_f16
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int64_t
++#define OUTPUT_TYPE_SIZE 64
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_u16_f16_1.c
+@@ -0,0 +1,29 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 2.5, 100, 7.1, 9.9, 5.0, 9.1, 4.8, 77 };
++uint16_t expected_1[] = {5, 200, 14, 19, 10, 18, 9, 154};
++uint16_t expected_2[] = {10, 400, 28, 39, 20, 36, 19, 308};
++
++#define TEST_MSG "VCVTH_N_U16_F16"
++#define INSN_NAME vcvth_n_u16_f16
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_u32_f16_1.c
+@@ -0,0 +1,100 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected_1[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x000000f6,
++ 0x00000000,
++ 0x00000000,
++ 0x00000800,
++ 0x0000052e,
++ 0x00000152,
++ 0x00000000,
++ 0x0000009a,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++};
++
++uint32_t expected_2[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x000001ed,
++ 0x00000000,
++ 0x00000000,
++ 0x00001000,
++ 0x00000a5c,
++ 0x000002a4,
++ 0x00000000,
++ 0x00000134,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++};
++
++uint32_t expected_3[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0xffffffff,
++ 0x00000000,
++ 0x00000000,
++ 0xffffffff,
++ 0xffffffff,
++ 0xffffffff,
++ 0x00000000,
++ 0xffffffff,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++};
++
++#define TEST_MSG "VCVTH_N_U32_F16"
++#define INSN_NAME vcvth_n_u32_f16
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++#define EXPECTED_3 expected_3
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint32_t
++#define OUTPUT_TYPE_SIZE 32
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++#define SCALAR_3 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_n_u64_f16_1.c
+@@ -0,0 +1,29 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 2.5, 100, 7.1, 9.9, 5.0, 9.1, 4.8, 77 };
++uint64_t expected_1[] = { 5, 200, 14, 19, 10, 18, 9, 154 };
++uint64_t expected_2[] = { 10, 400, 28, 39, 20, 36, 19, 308 };
++
++#define TEST_MSG "VCVTH_N_U64_F16"
++#define INSN_NAME vcvth_n_u64_f16
++
++#define INPUT input
++#define EXPECTED_1 expected_1
++#define EXPECTED_2 expected_2
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint64_t
++#define OUTPUT_TYPE_SIZE 64
++
++#define SCALAR_OPERANDS
++#define SCALAR_1 1
++#define SCALAR_2 2
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_s16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int16_t expected[] = { 123, -56, 0, 24, -63, 169, -4, 77 };
++
++#define TEST_MSG "VCVTH_S16_F16"
++#define INSN_NAME vcvth_s16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_s32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007b,
++ 0xfffffdc8,
++ 0xffffffde,
++ 0x00000400,
++ 0x00000297,
++ 0x000000a9,
++ 0xfffffffc,
++ 0x0000004d,
++ 0xffffff70,
++ 0xffffffc8,
++ 0xfffffff0,
++ 0xfffffff1,
++ 0xfffffff2,
++ 0xfffffff3,
++};
++
++#define TEST_MSG "VCVTH_S32_F16"
++#define INSN_NAME vcvth_s32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_s64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int64_t expected[] = { 123, -56, 0, 24, -63, 169, -4, 77 };
++
++#define TEST_MSG "VCVTH_S64_F16"
++#define INSN_NAME vcvth_s64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_u16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint16_t expected[] = { 123, 56, 0, 24, 63, 169, 4, 77 };
++
++#define TEST_MSG "VCVTH_u16_F16"
++#define INSN_NAME vcvth_u16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_u32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007b,
++ 0x00000000,
++ 0x00000000,
++ 0x00000400,
++ 0x00000297,
++ 0x000000a9,
++ 0x00000000,
++ 0x0000004d,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++};
++
++#define TEST_MSG "VCVTH_U32_F16"
++#define INSN_NAME vcvth_u32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvth_u64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint64_t expected[] = { 123, 56, 0, 24, 63, 169, 4, 77 };
++
++#define TEST_MSG "VCVTH_u64_F16"
++#define INSN_NAME vcvth_u64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtm_1.c
+@@ -0,0 +1,33 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++#include <math.h>
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, int, 16, 4) [] = { 0xfff0, 0x5, 0xfff0, 0x5 };
++VECT_VAR_DECL(expected, uint, 16, 4) [] = { 0x0, 0x5, 0x0, 0x5 };
++VECT_VAR_DECL(expected, int, 16, 8) [] = { 0x0, 0x0, 0xf, 0xfff0, 0x0,
++ 0x0, 0xf, 0xfff0 };
++VECT_VAR_DECL(expected, uint, 16, 8) [] = { 0x0, 0x0, 0xf, 0x0,
++ 0x0, 0x0, 0xf, 0x0 };
++#endif
++
++/* Expected results with rounding. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_rounding, int, 16, 4) [] = { 0xa, 0xa, 0xa, 0xa };
++VECT_VAR_DECL(expected_rounding, uint, 16, 4) [] = { 0xa, 0xa, 0xa, 0xa };
++VECT_VAR_DECL(expected_rounding, int, 16, 8) [] = { 0x7d, 0x7d, 0x7d, 0x7d,
++ 0x7d, 0x7d, 0x7d, 0x7d };
++VECT_VAR_DECL(expected_rounding, uint, 16, 8) [] = { 0x7d, 0x7d, 0x7d, 0x7d,
++ 0x7d, 0x7d, 0x7d, 0x7d };
++#endif
++
++#define TEST_MSG "VCVTM/VCVTMQ"
++#define INSN_NAME vcvtm
++
++#include "vcvtX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtmh_s16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int16_t expected[] = { 123, -57, 0, 24, -64, 169, -5, 77 };
++
++#define TEST_MSG "VCVTMH_S16_F16"
++#define INSN_NAME vcvtmh_s16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtmh_s32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007b,
++ 0xfffffdc8,
++ 0xffffffdd,
++ 0x00000400,
++ 0x00000297,
++ 0x000000a9,
++ 0xfffffffb,
++ 0x0000004d,
++ 0xffffff6f,
++ 0xffffffc7,
++ 0xfffffff0,
++ 0xfffffff1,
++ 0xfffffff2,
++ 0xfffffff3
++};
++
++#define TEST_MSG "VCVTMH_S32_F16"
++#define INSN_NAME vcvtmh_s32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtmh_s64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int64_t expected[] = { 123, -57, 0, 24, -64, 169, -5, 77 };
++
++#define TEST_MSG "VCVTMH_S64_F16"
++#define INSN_NAME vcvtmh_s64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtmh_u16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint16_t expected[] = { 123, 56, 0, 24, 63, 169, 4, 77 };
++
++#define TEST_MSG "VCVTMH_u16_F16"
++#define INSN_NAME vcvtmh_u16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtmh_u32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007b,
++ 0x00000000,
++ 0x00000000,
++ 0x00000400,
++ 0x00000297,
++ 0x000000a9,
++ 0x00000000,
++ 0x0000004d,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++};
++
++#define TEST_MSG "VCVTMH_U32_F16"
++#define INSN_NAME vcvtmh_u32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtmh_u64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint64_t expected[] = { 123, 56, 0, 24, 63, 169, 4, 77 };
++
++#define TEST_MSG "VCVTMH_u64_F16"
++#define INSN_NAME vcvtmh_u64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtnh_s16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int16_t expected[] = { 124, -57, 1, 25, -64, 169, -4, 77 };
++
++#define TEST_MSG "VCVTNH_S16_F16"
++#define INSN_NAME vcvtnh_s16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtnh_s32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007b,
++ 0xfffffdc8,
++ 0xffffffdd,
++ 0x00000400,
++ 0x00000297,
++ 0x000000a9,
++ 0xfffffffb,
++ 0x0000004d,
++ 0xffffff70,
++ 0xffffffc7,
++ 0xfffffff0,
++ 0xfffffff1,
++ 0xfffffff2,
++ 0xfffffff3
++};
++
++#define TEST_MSG "VCVTNH_S32_F16"
++#define INSN_NAME vcvtnh_s32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtnh_s64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int64_t expected[] = { 124, -57, 1, 25, -64, 169, -4, 77 };
++
++#define TEST_MSG "VCVTNH_S64_F16"
++#define INSN_NAME vcvtnh_s64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtnh_u16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint16_t expected[] = { 124, 57, 1, 25, 64, 169, 4, 77 };
++
++#define TEST_MSG "VCVTNH_u16_F16"
++#define INSN_NAME vcvtnh_u16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtnh_u32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007b,
++ 0x00000000,
++ 0x00000000,
++ 0x00000400,
++ 0x00000297,
++ 0x000000a9,
++ 0x00000000,
++ 0x0000004d,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++};
++
++#define TEST_MSG "VCVTNH_U32_F16"
++#define INSN_NAME vcvtnh_u32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtnh_u64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint64_t expected[] = { 124, 57, 1, 25, 64, 169, 4, 77 };
++
++#define TEST_MSG "VCVTNH_u64_F16"
++#define INSN_NAME vcvtnh_u64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtp_1.c
+@@ -0,0 +1,33 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++#include <math.h>
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, int, 16, 4) [] = { 0xfff1, 0x6, 0xfff1, 0x6 };
++VECT_VAR_DECL(expected, uint, 16, 4) [] = { 0x0, 0x6, 0x0, 0x6 };
++VECT_VAR_DECL(expected, int, 16, 8) [] = { 0x0, 0x0, 0x10, 0xfff1,
++ 0x0, 0x0, 0x10, 0xfff1 };
++VECT_VAR_DECL(expected, uint, 16, 8) [] = { 0x0, 0x0, 0x10, 0x0,
++ 0x0, 0x0, 0x10, 0x0 };
++#endif
++
++/* Expected results with rounding. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_rounding, int, 16, 4) [] = { 0xb, 0xb, 0xb, 0xb };
++VECT_VAR_DECL(expected_rounding, uint, 16, 4) [] = { 0xb, 0xb, 0xb, 0xb };
++VECT_VAR_DECL(expected_rounding, int, 16, 8) [] = { 0x7e, 0x7e, 0x7e, 0x7e,
++ 0x7e, 0x7e, 0x7e, 0x7e };
++VECT_VAR_DECL(expected_rounding, uint, 16, 8) [] = { 0x7e, 0x7e, 0x7e, 0x7e,
++ 0x7e, 0x7e, 0x7e, 0x7e };
++#endif
++
++#define TEST_MSG "VCVTP/VCVTPQ"
++#define INSN_NAME vcvtp
++
++#include "vcvtX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtph_s16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int16_t expected[] = { 124, -56, 1, 25, -63, 170, -4, 77 };
++
++#define TEST_MSG "VCVTPH_S16_F16"
++#define INSN_NAME vcvtph_s16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtph_s32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007c,
++ 0xfffffdc8,
++ 0xffffffde,
++ 0x00000400,
++ 0x00000297,
++ 0x000000aa,
++ 0xfffffffc,
++ 0x0000004d,
++ 0xffffff70,
++ 0xffffffc8,
++ 0xfffffff0,
++ 0xfffffff1,
++ 0xfffffff2,
++ 0xfffffff3
++};
++
++#define TEST_MSG "VCVTPH_S32_F16"
++#define INSN_NAME vcvtph_s32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtph_s64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, -56.8, 0.7, 24.6, -63.5, 169.4, -4.3, 77.0 };
++int64_t expected[] = { 124, -56, 1, 25, -63, 170, -4, 77 };
++
++#define TEST_MSG "VCVTPH_S64_F16"
++#define INSN_NAME vcvtph_s64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE int64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtph_u16_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint16_t expected[] = { 124, 57, 1, 25, 64, 170, 5, 77 };
++
++#define TEST_MSG "VCVTPH_u16_F16"
++#define INSN_NAME vcvtph_u16_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtph_u32_f16_1.c
+@@ -0,0 +1,53 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] =
++{
++ 0.0, -0.0,
++ 123.4, -567.8,
++ -34.8, 1024,
++ 663.1, 169.1,
++ -4.8, 77.0,
++ -144.5, -56.8,
++
++ (float16_t) -16, (float16_t) -15,
++ (float16_t) -14, (float16_t) -13,
++};
++
++/* Expected results (32-bit hexadecimal representation). */
++uint32_t expected[] =
++{
++ 0x00000000,
++ 0x00000000,
++ 0x0000007c,
++ 0x00000000,
++ 0x00000000,
++ 0x00000400,
++ 0x00000297,
++ 0x000000aa,
++ 0x00000000,
++ 0x0000004d,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++};
++
++#define TEST_MSG "VCVTPH_U32_F16"
++#define INSN_NAME vcvtph_u32_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint32_t
++#define OUTPUT_TYPE_SIZE 32
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtph_u64_f16_1.c
+@@ -0,0 +1,23 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.9, 56.8, 0.7, 24.6, 63.5, 169.4, 4.3, 77.0 };
++uint64_t expected[] = { 124, 57, 1, 25, 64, 170, 5, 77 };
++
++#define TEST_MSG "VCVTPH_u64_F16"
++#define INSN_NAME vcvtph_u64_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE uint64_t
++#define OUTPUT_TYPE_SIZE 64
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdiv_f16_1.c
+@@ -0,0 +1,86 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (13.4)
++#define B FP16_C (-56.8)
++#define C FP16_C (-34.8)
++#define D FP16_C (12)
++#define E FP16_C (63.1)
++#define F FP16_C (19.1)
++#define G FP16_C (-4.8)
++#define H FP16_C (77)
++
++#define I FP16_C (0.7)
++#define J FP16_C (-78)
++#define K FP16_C (11.23)
++#define L FP16_C (98)
++#define M FP16_C (87.1)
++#define N FP16_C (-8)
++#define O FP16_C (-1.1)
++#define P FP16_C (-9.7)
++
++/* Expected results for vdiv. */
++VECT_VAR_DECL (expected_div_static, hfloat, 16, 4) []
++ = { 0x32CC /* A / E. */, 0xC1F3 /* B / F. */,
++ 0x4740 /* C / G. */, 0x30FD /* D / H. */ };
++
++VECT_VAR_DECL (expected_div_static, hfloat, 16, 8) []
++ = { 0x32CC /* A / E. */, 0xC1F3 /* B / F. */,
++ 0x4740 /* C / G. */, 0x30FD /* D / H. */,
++ 0x201D /* I / M. */, 0x48E0 /* J / N. */,
++ 0xC91B /* K / O. */, 0xC90D /* L / P. */ };
++
++void exec_vdiv_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VDIV (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 4);
++ DECL_VARIABLE(vsrc_2, float, 16, 4);
++ VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A, B, C, D};
++ VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {E, F, G, H};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
++ VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
++
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vdiv_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4));
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_div_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VDIVQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 8);
++ DECL_VARIABLE(vsrc_2, float, 16, 8);
++ VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A, B, C, D, I, J, K, L};
++ VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {E, F, G, H, M, N, O, P};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
++ VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
++
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vdivq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8));
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_div_static, "");
++}
++
++int
++main (void)
++{
++ exec_vdiv_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdivh_f16_1.c
+@@ -0,0 +1,42 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++#define INFF __builtin_inf ()
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0xb765 /* -0.462158 */,
++ 0x27ef /* 0.030991 */,
++ 0x3955 /* 0.666504 */,
++ 0xccff /* -19.984375 */,
++ 0xc49a /* -4.601562 */,
++ 0xb1e3 /* -0.183960 */,
++ 0x3cd3 /* 1.206055 */,
++ 0x23f0 /* 0.015503 */,
++ 0xa9ef /* -0.046356 */,
++ 0x32f4 /* 0.217285 */,
++ 0xb036 /* -0.131592 */,
++ 0x4126 /* 2.574219 */,
++ 0xcd15 /* -20.328125 */,
++ 0x537f /* 59.968750 */,
++ 0x7e00 /* nan */,
++ 0x7e00 /* nan */
++};
++
++#define TEST_MSG "VDIVH_F16"
++#define INSN_NAME vdivh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdup-vmov.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdup-vmov.c
+@@ -19,6 +19,10 @@ VECT_VAR_DECL(expected0,uint,64,1) [] = { 0xfffffffffffffff0 };
+ VECT_VAR_DECL(expected0,poly,8,8) [] = { 0xf0, 0xf0, 0xf0, 0xf0,
+ 0xf0, 0xf0, 0xf0, 0xf0 };
+ VECT_VAR_DECL(expected0,poly,16,4) [] = { 0xfff0, 0xfff0, 0xfff0, 0xfff0 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected0, hfloat, 16, 4) [] = { 0xcc00, 0xcc00,
++ 0xcc00, 0xcc00 };
++#endif
+ VECT_VAR_DECL(expected0,hfloat,32,2) [] = { 0xc1800000, 0xc1800000 };
+ VECT_VAR_DECL(expected0,int,8,16) [] = { 0xf0, 0xf0, 0xf0, 0xf0,
+ 0xf0, 0xf0, 0xf0, 0xf0,
+@@ -46,6 +50,12 @@ VECT_VAR_DECL(expected0,poly,8,16) [] = { 0xf0, 0xf0, 0xf0, 0xf0,
+ 0xf0, 0xf0, 0xf0, 0xf0 };
+ VECT_VAR_DECL(expected0,poly,16,8) [] = { 0xfff0, 0xfff0, 0xfff0, 0xfff0,
+ 0xfff0, 0xfff0, 0xfff0, 0xfff0 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected0, hfloat, 16, 8) [] = { 0xcc00, 0xcc00,
++ 0xcc00, 0xcc00,
++ 0xcc00, 0xcc00,
++ 0xcc00, 0xcc00 };
++#endif
+ VECT_VAR_DECL(expected0,hfloat,32,4) [] = { 0xc1800000, 0xc1800000,
+ 0xc1800000, 0xc1800000 };
+
+@@ -63,6 +73,10 @@ VECT_VAR_DECL(expected1,uint,64,1) [] = { 0xfffffffffffffff1 };
+ VECT_VAR_DECL(expected1,poly,8,8) [] = { 0xf1, 0xf1, 0xf1, 0xf1,
+ 0xf1, 0xf1, 0xf1, 0xf1 };
+ VECT_VAR_DECL(expected1,poly,16,4) [] = { 0xfff1, 0xfff1, 0xfff1, 0xfff1 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected1, hfloat, 16, 4) [] = { 0xcb80, 0xcb80,
++ 0xcb80, 0xcb80 };
++#endif
+ VECT_VAR_DECL(expected1,hfloat,32,2) [] = { 0xc1700000, 0xc1700000 };
+ VECT_VAR_DECL(expected1,int,8,16) [] = { 0xf1, 0xf1, 0xf1, 0xf1,
+ 0xf1, 0xf1, 0xf1, 0xf1,
+@@ -90,6 +104,12 @@ VECT_VAR_DECL(expected1,poly,8,16) [] = { 0xf1, 0xf1, 0xf1, 0xf1,
+ 0xf1, 0xf1, 0xf1, 0xf1 };
+ VECT_VAR_DECL(expected1,poly,16,8) [] = { 0xfff1, 0xfff1, 0xfff1, 0xfff1,
+ 0xfff1, 0xfff1, 0xfff1, 0xfff1 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected1, hfloat, 16, 8) [] = { 0xcb80, 0xcb80,
++ 0xcb80, 0xcb80,
++ 0xcb80, 0xcb80,
++ 0xcb80, 0xcb80 };
++#endif
+ VECT_VAR_DECL(expected1,hfloat,32,4) [] = { 0xc1700000, 0xc1700000,
+ 0xc1700000, 0xc1700000 };
+
+@@ -107,6 +127,10 @@ VECT_VAR_DECL(expected2,uint,64,1) [] = { 0xfffffffffffffff2 };
+ VECT_VAR_DECL(expected2,poly,8,8) [] = { 0xf2, 0xf2, 0xf2, 0xf2,
+ 0xf2, 0xf2, 0xf2, 0xf2 };
+ VECT_VAR_DECL(expected2,poly,16,4) [] = { 0xfff2, 0xfff2, 0xfff2, 0xfff2 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 4) [] = { 0xcb00, 0xcb00,
++ 0xcb00, 0xcb00 };
++#endif
+ VECT_VAR_DECL(expected2,hfloat,32,2) [] = { 0xc1600000, 0xc1600000 };
+ VECT_VAR_DECL(expected2,int,8,16) [] = { 0xf2, 0xf2, 0xf2, 0xf2,
+ 0xf2, 0xf2, 0xf2, 0xf2,
+@@ -134,6 +158,12 @@ VECT_VAR_DECL(expected2,poly,8,16) [] = { 0xf2, 0xf2, 0xf2, 0xf2,
+ 0xf2, 0xf2, 0xf2, 0xf2 };
+ VECT_VAR_DECL(expected2,poly,16,8) [] = { 0xfff2, 0xfff2, 0xfff2, 0xfff2,
+ 0xfff2, 0xfff2, 0xfff2, 0xfff2 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 8) [] = { 0xcb00, 0xcb00,
++ 0xcb00, 0xcb00,
++ 0xcb00, 0xcb00,
++ 0xcb00, 0xcb00 };
++#endif
+ VECT_VAR_DECL(expected2,hfloat,32,4) [] = { 0xc1600000, 0xc1600000,
+ 0xc1600000, 0xc1600000 };
+
+@@ -171,6 +201,9 @@ void exec_vdup_vmov (void)
+ TEST_VDUP(, uint, u, 64, 1);
+ TEST_VDUP(, poly, p, 8, 8);
+ TEST_VDUP(, poly, p, 16, 4);
++#if defined (FP16_SUPPORTED)
++ TEST_VDUP(, float, f, 16, 4);
++#endif
+ TEST_VDUP(, float, f, 32, 2);
+
+ TEST_VDUP(q, int, s, 8, 16);
+@@ -183,8 +216,26 @@ void exec_vdup_vmov (void)
+ TEST_VDUP(q, uint, u, 64, 2);
+ TEST_VDUP(q, poly, p, 8, 16);
+ TEST_VDUP(q, poly, p, 16, 8);
++#if defined (FP16_SUPPORTED)
++ TEST_VDUP(q, float, f, 16, 8);
++#endif
+ TEST_VDUP(q, float, f, 32, 4);
+
++#if defined (FP16_SUPPORTED)
++ switch (i) {
++ case 0:
++ CHECK_RESULTS_NAMED (TEST_MSG, expected0, "");
++ break;
++ case 1:
++ CHECK_RESULTS_NAMED (TEST_MSG, expected1, "");
++ break;
++ case 2:
++ CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
++ break;
++ default:
++ abort();
++ }
++#else
+ switch (i) {
+ case 0:
+ CHECK_RESULTS_NAMED_NO_FP16 (TEST_MSG, expected0, "");
+@@ -198,6 +249,7 @@ void exec_vdup_vmov (void)
+ default:
+ abort();
+ }
++#endif
+ }
+
+ /* Do the same tests with vmov. Use the same expected results. */
+@@ -216,6 +268,9 @@ void exec_vdup_vmov (void)
+ TEST_VMOV(, uint, u, 64, 1);
+ TEST_VMOV(, poly, p, 8, 8);
+ TEST_VMOV(, poly, p, 16, 4);
++#if defined (FP16_SUPPORTED)
++ TEST_VMOV(, float, f, 16, 4);
++#endif
+ TEST_VMOV(, float, f, 32, 2);
+
+ TEST_VMOV(q, int, s, 8, 16);
+@@ -228,8 +283,26 @@ void exec_vdup_vmov (void)
+ TEST_VMOV(q, uint, u, 64, 2);
+ TEST_VMOV(q, poly, p, 8, 16);
+ TEST_VMOV(q, poly, p, 16, 8);
++#if defined (FP16_SUPPORTED)
++ TEST_VMOV(q, float, f, 16, 8);
++#endif
+ TEST_VMOV(q, float, f, 32, 4);
+
++#if defined (FP16_SUPPORTED)
++ switch (i) {
++ case 0:
++ CHECK_RESULTS_NAMED (TEST_MSG, expected0, "");
++ break;
++ case 1:
++ CHECK_RESULTS_NAMED (TEST_MSG, expected1, "");
++ break;
++ case 2:
++ CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
++ break;
++ default:
++ abort();
++ }
++#else
+ switch (i) {
+ case 0:
+ CHECK_RESULTS_NAMED_NO_FP16 (TEST_MSG, expected0, "");
+@@ -243,6 +316,8 @@ void exec_vdup_vmov (void)
+ default:
+ abort();
+ }
++#endif
++
+ }
+ }
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdup_lane.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdup_lane.c
+@@ -17,6 +17,10 @@ VECT_VAR_DECL(expected,poly,8,8) [] = { 0xf7, 0xf7, 0xf7, 0xf7,
+ 0xf7, 0xf7, 0xf7, 0xf7 };
+ VECT_VAR_DECL(expected,poly,16,4) [] = { 0xfff3, 0xfff3, 0xfff3, 0xfff3 };
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1700000, 0xc1700000 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xca80, 0xca80,
++ 0xca80, 0xca80 };
++#endif
+ VECT_VAR_DECL(expected,int,8,16) [] = { 0xf2, 0xf2, 0xf2, 0xf2,
+ 0xf2, 0xf2, 0xf2, 0xf2,
+ 0xf2, 0xf2, 0xf2, 0xf2,
+@@ -43,10 +47,16 @@ VECT_VAR_DECL(expected,poly,8,16) [] = { 0xf5, 0xf5, 0xf5, 0xf5,
+ 0xf5, 0xf5, 0xf5, 0xf5 };
+ VECT_VAR_DECL(expected,poly,16,8) [] = { 0xfff1, 0xfff1, 0xfff1, 0xfff1,
+ 0xfff1, 0xfff1, 0xfff1, 0xfff1 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xca80, 0xca80,
++ 0xca80, 0xca80,
++ 0xca80, 0xca80,
++ 0xca80, 0xca80 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1700000, 0xc1700000,
+ 0xc1700000, 0xc1700000 };
+
+-#define TEST_MSG "VDUP_LANE/VDUP_LANEQ"
++#define TEST_MSG "VDUP_LANE/VDUPQ_LANE"
+ void exec_vdup_lane (void)
+ {
+ /* Basic test: vec1=vdup_lane(vec2, lane), then store the result. */
+@@ -63,6 +73,9 @@ void exec_vdup_lane (void)
+ clean_results ();
+
+ TEST_MACRO_64BITS_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (FP16_SUPPORTED)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+
+ /* Choose lane arbitrarily. */
+@@ -76,6 +89,9 @@ void exec_vdup_lane (void)
+ TEST_VDUP_LANE(, uint, u, 64, 1, 1, 0);
+ TEST_VDUP_LANE(, poly, p, 8, 8, 8, 7);
+ TEST_VDUP_LANE(, poly, p, 16, 4, 4, 3);
++#if defined (FP16_SUPPORTED)
++ TEST_VDUP_LANE(, float, f, 16, 4, 4, 3);
++#endif
+ TEST_VDUP_LANE(, float, f, 32, 2, 2, 1);
+
+ TEST_VDUP_LANE(q, int, s, 8, 16, 8, 2);
+@@ -88,9 +104,133 @@ void exec_vdup_lane (void)
+ TEST_VDUP_LANE(q, uint, u, 64, 2, 1, 0);
+ TEST_VDUP_LANE(q, poly, p, 8, 16, 8, 5);
+ TEST_VDUP_LANE(q, poly, p, 16, 8, 4, 1);
++#if defined (FP16_SUPPORTED)
++ TEST_VDUP_LANE(q, float, f, 16, 8, 4, 3);
++#endif
+ TEST_VDUP_LANE(q, float, f, 32, 4, 2, 1);
+
++#if defined (FP16_SUPPORTED)
++ CHECK_RESULTS (TEST_MSG, "");
++#else
+ CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
++#endif
++
++#if defined (__aarch64__)
++
++#undef TEST_MSG
++#define TEST_MSG "VDUP_LANEQ/VDUPQ_LANEQ"
++
++ /* Expected results for vdup*_laneq tests. */
++VECT_VAR_DECL(expected2,int,8,8) [] = { 0xfd, 0xfd, 0xfd, 0xfd,
++ 0xfd, 0xfd, 0xfd, 0xfd };
++VECT_VAR_DECL(expected2,int,16,4) [] = { 0xfff2, 0xfff2, 0xfff2, 0xfff2 };
++VECT_VAR_DECL(expected2,int,32,2) [] = { 0xfffffff1, 0xfffffff1 };
++VECT_VAR_DECL(expected2,int,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected2,uint,8,8) [] = { 0xff, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(expected2,uint,16,4) [] = { 0xfff3, 0xfff3, 0xfff3, 0xfff3 };
++VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xfffffff1, 0xfffffff1 };
++VECT_VAR_DECL(expected2,uint,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected2,poly,8,8) [] = { 0xf7, 0xf7, 0xf7, 0xf7,
++ 0xf7, 0xf7, 0xf7, 0xf7 };
++VECT_VAR_DECL(expected2,poly,16,4) [] = { 0xfff3, 0xfff3, 0xfff3, 0xfff3 };
++VECT_VAR_DECL(expected2,hfloat,32,2) [] = { 0xc1700000, 0xc1700000 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 4) [] = { 0xca80, 0xca80,
++ 0xca80, 0xca80 };
++#endif
++VECT_VAR_DECL(expected2,int,8,16) [] = { 0xfb, 0xfb, 0xfb, 0xfb,
++ 0xfb, 0xfb, 0xfb, 0xfb,
++ 0xfb, 0xfb, 0xfb, 0xfb,
++ 0xfb, 0xfb, 0xfb, 0xfb };
++VECT_VAR_DECL(expected2,int,16,8) [] = { 0xfff7, 0xfff7, 0xfff7, 0xfff7,
++ 0xfff7, 0xfff7, 0xfff7, 0xfff7 };
++VECT_VAR_DECL(expected2,int,32,4) [] = { 0xfffffff1, 0xfffffff1,
++ 0xfffffff1, 0xfffffff1 };
++VECT_VAR_DECL(expected2,int,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected2,uint,8,16) [] = { 0xf5, 0xf5, 0xf5, 0xf5,
++ 0xf5, 0xf5, 0xf5, 0xf5,
++ 0xf5, 0xf5, 0xf5, 0xf5,
++ 0xf5, 0xf5, 0xf5, 0xf5 };
++VECT_VAR_DECL(expected2,uint,16,8) [] = { 0xfff1, 0xfff1, 0xfff1, 0xfff1,
++ 0xfff1, 0xfff1, 0xfff1, 0xfff1 };
++VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xfffffff0, 0xfffffff0,
++ 0xfffffff0, 0xfffffff0 };
++VECT_VAR_DECL(expected2,uint,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected2,poly,8,16) [] = { 0xf5, 0xf5, 0xf5, 0xf5,
++ 0xf5, 0xf5, 0xf5, 0xf5,
++ 0xf5, 0xf5, 0xf5, 0xf5,
++ 0xf5, 0xf5, 0xf5, 0xf5 };
++VECT_VAR_DECL(expected2,poly,16,8) [] = { 0xfff1, 0xfff1, 0xfff1, 0xfff1,
++ 0xfff1, 0xfff1, 0xfff1, 0xfff1 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 8) [] = { 0xc880, 0xc880,
++ 0xc880, 0xc880,
++ 0xc880, 0xc880,
++ 0xc880, 0xc880 };
++#endif
++VECT_VAR_DECL(expected2,hfloat,32,4) [] = { 0xc1700000, 0xc1700000,
++ 0xc1700000, 0xc1700000 };
++
++ /* Clean all results for vdup*_laneq tests. */
++ clean_results ();
++ /* Basic test: vec1=vdup_lane(vec2, lane), then store the result. */
++#define TEST_VDUP_LANEQ(Q, T1, T2, W, N, N2, L) \
++ VECT_VAR(vector_res, T1, W, N) = \
++ vdup##Q##_laneq_##T2##W(VECT_VAR(vector, T1, W, N2), L); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
++
++ /* Input vector can only have 64 bits. */
++ DECL_VARIABLE_128BITS_VARIANTS(vector);
++
++ clean_results ();
++
++ TEST_MACRO_128BITS_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (FP16_SUPPORTED)
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
++ VLOAD(vector, buffer, q, float, f, 32, 4);
++
++ /* Choose lane arbitrarily. */
++ TEST_VDUP_LANEQ(, int, s, 8, 8, 16, 13);
++ TEST_VDUP_LANEQ(, int, s, 16, 4, 8, 2);
++ TEST_VDUP_LANEQ(, int, s, 32, 2, 4, 1);
++ TEST_VDUP_LANEQ(, int, s, 64, 1, 2, 0);
++ TEST_VDUP_LANEQ(, uint, u, 8, 8, 16, 15);
++ TEST_VDUP_LANEQ(, uint, u, 16, 4, 8, 3);
++ TEST_VDUP_LANEQ(, uint, u, 32, 2, 4, 1);
++ TEST_VDUP_LANEQ(, uint, u, 64, 1, 2, 0);
++ TEST_VDUP_LANEQ(, poly, p, 8, 8, 16, 7);
++ TEST_VDUP_LANEQ(, poly, p, 16, 4, 8, 3);
++#if defined (FP16_SUPPORTED)
++ TEST_VDUP_LANEQ(, float, f, 16, 4, 8, 3);
++#endif
++ TEST_VDUP_LANEQ(, float, f, 32, 2, 4, 1);
++
++ TEST_VDUP_LANEQ(q, int, s, 8, 16, 16, 11);
++ TEST_VDUP_LANEQ(q, int, s, 16, 8, 8, 7);
++ TEST_VDUP_LANEQ(q, int, s, 32, 4, 4, 1);
++ TEST_VDUP_LANEQ(q, int, s, 64, 2, 2, 0);
++ TEST_VDUP_LANEQ(q, uint, u, 8, 16, 16, 5);
++ TEST_VDUP_LANEQ(q, uint, u, 16, 8, 8, 1);
++ TEST_VDUP_LANEQ(q, uint, u, 32, 4, 4, 0);
++ TEST_VDUP_LANEQ(q, uint, u, 64, 2, 2, 0);
++ TEST_VDUP_LANEQ(q, poly, p, 8, 16, 16, 5);
++ TEST_VDUP_LANEQ(q, poly, p, 16, 8, 8, 1);
++#if defined (FP16_SUPPORTED)
++ TEST_VDUP_LANEQ(q, float, f, 16, 8, 8, 7);
++#endif
++ TEST_VDUP_LANEQ(q, float, f, 32, 4, 4, 1);
++
++ CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
++#if defined (FP16_SUPPORTED)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected2, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected2, "");
++#endif
++
++#endif /* __aarch64__. */
+ }
+
+ int main (void)
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vduph_lane.c
+@@ -0,0 +1,137 @@
++/* { dg-do run } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define A -16
++#define B -15
++#define C -14
++#define D -13
++#define E -12
++#define F -11
++#define G -10
++#define H -9
++
++#define F16_C(a) ((__fp16) a)
++#define AF F16_C (A)
++#define BF F16_C (B)
++#define CF F16_C (C)
++#define DF F16_C (D)
++#define EF F16_C (E)
++#define FF F16_C (F)
++#define GF F16_C (G)
++#define HF F16_C (H)
++
++#define S16_C(a) ((int16_t) a)
++#define AS S16_C (A)
++#define BS S16_C (B)
++#define CS S16_C (C)
++#define DS S16_C (D)
++#define ES S16_C (E)
++#define FS S16_C (F)
++#define GS S16_C (G)
++#define HS S16_C (H)
++
++#define U16_C(a) ((int16_t) a)
++#define AU U16_C (A)
++#define BU U16_C (B)
++#define CU U16_C (C)
++#define DU U16_C (D)
++#define EU U16_C (E)
++#define FU U16_C (F)
++#define GU U16_C (G)
++#define HU U16_C (H)
++
++#define P16_C(a) ((poly16_t) a)
++#define AP P16_C (A)
++#define BP P16_C (B)
++#define CP P16_C (C)
++#define DP P16_C (D)
++#define EP P16_C (E)
++#define FP P16_C (F)
++#define GP P16_C (G)
++#define HP P16_C (H)
++
++/* Expected results for vduph_lane. */
++float16_t expected_f16 = AF;
++int16_t expected_s16 = DS;
++uint16_t expected_u16 = BU;
++poly16_t expected_p16 = CP;
++
++/* Expected results for vduph_laneq. */
++float16_t expected_q_f16 = EF;
++int16_t expected_q_s16 = BS;
++uint16_t expected_q_u16 = GU;
++poly16_t expected_q_p16 = FP;
++
++void exec_vduph_lane_f16 (void)
++{
++ /* vduph_lane. */
++ DECL_VARIABLE(vsrc, float, 16, 4);
++ DECL_VARIABLE(vsrc, int, 16, 4);
++ DECL_VARIABLE(vsrc, uint, 16, 4);
++ DECL_VARIABLE(vsrc, poly, 16, 4);
++ VECT_VAR_DECL (buf_src, float, 16, 4) [] = {AF, BF, CF, DF};
++ VECT_VAR_DECL (buf_src, int, 16, 4) [] = {AS, BS, CS, DS};
++ VECT_VAR_DECL (buf_src, uint, 16, 4) [] = {AU, BU, CU, DU};
++ VECT_VAR_DECL (buf_src, poly, 16, 4) [] = {AP, BP, CP, DP};
++ VLOAD (vsrc, buf_src, , int, s, 16, 4);
++ VLOAD (vsrc, buf_src, , float, f, 16, 4);
++ VLOAD (vsrc, buf_src, , uint, u, 16, 4);
++ VLOAD (vsrc, buf_src, , poly, p, 16, 4);
++
++ float16_t res_f = vduph_lane_f16 (VECT_VAR (vsrc, float, 16, 4), 0);
++ if (* (unsigned short *) &res_f != * (unsigned short *) &expected_f16)
++ abort ();
++
++ int16_t res_s = vduph_lane_s16 (VECT_VAR (vsrc, int, 16, 4), 3);
++ if (* (unsigned short *) &res_s != * (unsigned short *) &expected_s16)
++ abort ();
++
++ uint16_t res_u = vduph_lane_u16 (VECT_VAR (vsrc, uint, 16, 4), 1);
++ if (* (unsigned short *) &res_u != * (unsigned short *) &expected_u16)
++ abort ();
++
++ poly16_t res_p = vduph_lane_p16 (VECT_VAR (vsrc, poly, 16, 4), 2);
++ if (* (unsigned short *) &res_p != * (unsigned short *) &expected_p16)
++ abort ();
++
++ /* vduph_laneq. */
++ DECL_VARIABLE(vsrc, float, 16, 8);
++ DECL_VARIABLE(vsrc, int, 16, 8);
++ DECL_VARIABLE(vsrc, uint, 16, 8);
++ DECL_VARIABLE(vsrc, poly, 16, 8);
++ VECT_VAR_DECL (buf_src, float, 16, 8) [] = {AF, BF, CF, DF, EF, FF, GF, HF};
++ VECT_VAR_DECL (buf_src, int, 16, 8) [] = {AS, BS, CS, DS, ES, FS, GS, HS};
++ VECT_VAR_DECL (buf_src, uint, 16, 8) [] = {AU, BU, CU, DU, EU, FU, GU, HU};
++ VECT_VAR_DECL (buf_src, poly, 16, 8) [] = {AP, BP, CP, DP, EP, FP, GP, HP};
++ VLOAD (vsrc, buf_src, q, int, s, 16, 8);
++ VLOAD (vsrc, buf_src, q, float, f, 16, 8);
++ VLOAD (vsrc, buf_src, q, uint, u, 16, 8);
++ VLOAD (vsrc, buf_src, q, poly, p, 16, 8);
++
++ res_f = vduph_laneq_f16 (VECT_VAR (vsrc, float, 16, 8), 4);
++ if (* (unsigned short *) &res_f != * (unsigned short *) &expected_q_f16)
++ abort ();
++
++ res_s = vduph_laneq_s16 (VECT_VAR (vsrc, int, 16, 8), 1);
++ if (* (unsigned short *) &res_s != * (unsigned short *) &expected_q_s16)
++ abort ();
++
++ res_u = vduph_laneq_u16 (VECT_VAR (vsrc, uint, 16, 8), 6);
++ if (* (unsigned short *) &res_u != * (unsigned short *) &expected_q_u16)
++ abort ();
++
++ res_p = vduph_laneq_p16 (VECT_VAR (vsrc, poly, 16, 8), 5);
++ if (* (unsigned short *) &res_p != * (unsigned short *) &expected_q_p16)
++ abort ();
++}
++
++int
++main (void)
++{
++ exec_vduph_lane_f16 ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vext.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vext.c
+@@ -16,6 +16,10 @@ VECT_VAR_DECL(expected,uint,64,1) [] = { 0xfffffffffffffff0 };
+ VECT_VAR_DECL(expected,poly,8,8) [] = { 0xf6, 0xf7, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55 };
+ VECT_VAR_DECL(expected,poly,16,4) [] = { 0xfff2, 0xfff3, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcb00, 0xca80,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1700000, 0x42066666 };
+ VECT_VAR_DECL(expected,int,8,16) [] = { 0xfe, 0xff, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11,
+@@ -39,6 +43,12 @@ VECT_VAR_DECL(expected,poly,8,16) [] = { 0xfc, 0xfd, 0xfe, 0xff,
+ 0x55, 0x55, 0x55, 0x55 };
+ VECT_VAR_DECL(expected,poly,16,8) [] = { 0xfff6, 0xfff7, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xc880, 0x4b4d,
++ 0x4b4d, 0x4b4d,
++ 0x4b4d, 0x4b4d,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1500000, 0x4204cccd,
+ 0x4204cccd, 0x4204cccd };
+
+@@ -60,6 +70,10 @@ void exec_vext (void)
+ clean_results ();
+
+ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector1, buffer);
++#ifdef FP16_SUPPORTED
++ VLOAD(vector1, buffer, , float, f, 16, 4);
++ VLOAD(vector1, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector1, buffer, , float, f, 32, 2);
+ VLOAD(vector1, buffer, q, float, f, 32, 4);
+
+@@ -74,6 +88,9 @@ void exec_vext (void)
+ VDUP(vector2, , uint, u, 64, 1, 0x88);
+ VDUP(vector2, , poly, p, 8, 8, 0x55);
+ VDUP(vector2, , poly, p, 16, 4, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, , float, f, 16, 4, 14.6f); /* 14.6f is 0x4b4d. */
++#endif
+ VDUP(vector2, , float, f, 32, 2, 33.6f);
+
+ VDUP(vector2, q, int, s, 8, 16, 0x11);
+@@ -86,6 +103,9 @@ void exec_vext (void)
+ VDUP(vector2, q, uint, u, 64, 2, 0x88);
+ VDUP(vector2, q, poly, p, 8, 16, 0x55);
+ VDUP(vector2, q, poly, p, 16, 8, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, q, float, f, 16, 8, 14.6f);
++#endif
+ VDUP(vector2, q, float, f, 32, 4, 33.2f);
+
+ /* Choose arbitrary extract offsets. */
+@@ -99,6 +119,9 @@ void exec_vext (void)
+ TEST_VEXT(, uint, u, 64, 1, 0);
+ TEST_VEXT(, poly, p, 8, 8, 6);
+ TEST_VEXT(, poly, p, 16, 4, 2);
++#if defined (FP16_SUPPORTED)
++ TEST_VEXT(, float, f, 16, 4, 2);
++#endif
+ TEST_VEXT(, float, f, 32, 2, 1);
+
+ TEST_VEXT(q, int, s, 8, 16, 14);
+@@ -111,9 +134,16 @@ void exec_vext (void)
+ TEST_VEXT(q, uint, u, 64, 2, 1);
+ TEST_VEXT(q, poly, p, 8, 16, 12);
+ TEST_VEXT(q, poly, p, 16, 8, 6);
++#if defined (FP16_SUPPORTED)
++ TEST_VEXT(q, float, f, 16, 8, 7);
++#endif
+ TEST_VEXT(q, float, f, 32, 4, 3);
+
++#if defined (FP16_SUPPORTED)
++ CHECK_RESULTS (TEST_MSG, "");
++#else
+ CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
++#endif
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfma.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfma.c
+@@ -3,11 +3,19 @@
+ #include "compute-ref-data.h"
+
+ #ifdef __ARM_FEATURE_FMA
++
+ /* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0x61c6, 0x61c8, 0x61ca, 0x61cc };
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0x6435, 0x6436, 0x6437, 0x6438,
++ 0x6439, 0x643a, 0x643b, 0x643c };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0x4438ca3d, 0x44390a3d };
+-VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0x44869eb8, 0x4486beb8, 0x4486deb8, 0x4486feb8 };
++VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0x44869eb8, 0x4486beb8,
++ 0x4486deb8, 0x4486feb8 };
+ #ifdef __aarch64__
+-VECT_VAR_DECL(expected,hfloat,64,2) [] = { 0x408906e1532b8520, 0x40890ee1532b8520 };
++VECT_VAR_DECL(expected,hfloat,64,2) [] = { 0x408906e1532b8520,
++ 0x40890ee1532b8520 };
+ #endif
+
+ #define TEST_MSG "VFMA/VFMAQ"
+@@ -44,6 +52,18 @@ void exec_vfma (void)
+ DECL_VARIABLE(VAR, float, 32, 4);
+ #endif
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector1, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector3, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 4);
++
++ DECL_VARIABLE(vector1, float, 16, 8);
++ DECL_VARIABLE(vector2, float, 16, 8);
++ DECL_VARIABLE(vector3, float, 16, 8);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
++
+ DECL_VFMA_VAR(vector1);
+ DECL_VFMA_VAR(vector2);
+ DECL_VFMA_VAR(vector3);
+@@ -52,6 +72,10 @@ void exec_vfma (void)
+ clean_results ();
+
+ /* Initialize input "vector1" from "buffer". */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector1, buffer, , float, f, 16, 4);
++ VLOAD(vector1, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector1, buffer, , float, f, 32, 2);
+ VLOAD(vector1, buffer, q, float, f, 32, 4);
+ #ifdef __aarch64__
+@@ -59,13 +83,21 @@ void exec_vfma (void)
+ #endif
+
+ /* Choose init value arbitrarily. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector2, , float, f, 16, 4, 9.3f);
++ VDUP(vector2, q, float, f, 16, 8, 29.7f);
++#endif
+ VDUP(vector2, , float, f, 32, 2, 9.3f);
+ VDUP(vector2, q, float, f, 32, 4, 29.7f);
+ #ifdef __aarch64__
+ VDUP(vector2, q, float, f, 64, 2, 15.8f);
+ #endif
+-
++
+ /* Choose init value arbitrarily. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector3, , float, f, 16, 4, 81.2f);
++ VDUP(vector3, q, float, f, 16, 8, 36.8f);
++#endif
+ VDUP(vector3, , float, f, 32, 2, 81.2f);
+ VDUP(vector3, q, float, f, 32, 4, 36.8f);
+ #ifdef __aarch64__
+@@ -73,12 +105,20 @@ void exec_vfma (void)
+ #endif
+
+ /* Execute the tests. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VFMA(, float, f, 16, 4);
++ TEST_VFMA(q, float, f, 16, 8);
++#endif
+ TEST_VFMA(, float, f, 32, 2);
+ TEST_VFMA(q, float, f, 32, 4);
+ #ifdef __aarch64__
+ TEST_VFMA(q, float, f, 64, 2);
+ #endif
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
++#endif
+ CHECK_VFMA_RESULTS (TEST_MSG, "");
+ }
+ #endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfmah_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x3944 /* 0.658203 */,
++ 0xcefa /* -27.906250 */,
++ 0x5369 /* 59.281250 */,
++ 0x35ba /* 0.357910 */,
++ 0xc574 /* -5.453125 */,
++ 0xc5e6 /* -5.898438 */,
++ 0x3f66 /* 1.849609 */,
++ 0x5665 /* 102.312500 */,
++ 0xc02d /* -2.087891 */,
++ 0x4d79 /* 21.890625 */,
++ 0x547b /* 71.687500 */,
++ 0xcdf0 /* -23.750000 */,
++ 0xc625 /* -6.144531 */,
++ 0x4cf9 /* 19.890625 */,
++ 0x7e00 /* nan */,
++ 0x7e00 /* nan */
++};
++
++#define TEST_MSG "VFMAH_F16"
++#define INSN_NAME vfmah_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "ternary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfmas_lane_f16_1.c
+@@ -0,0 +1,908 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A0 FP16_C (123.4)
++#define A1 FP16_C (-5.8)
++#define A2 FP16_C (-0.0)
++#define A3 FP16_C (10)
++#define A4 FP16_C (123412.43)
++#define A5 FP16_C (-5.8)
++#define A6 FP16_C (90.8)
++#define A7 FP16_C (24)
++
++#define B0 FP16_C (23.4)
++#define B1 FP16_C (-5.8)
++#define B2 FP16_C (8.9)
++#define B3 FP16_C (4.0)
++#define B4 FP16_C (3.4)
++#define B5 FP16_C (-550.8)
++#define B6 FP16_C (-31.8)
++#define B7 FP16_C (20000.0)
++
++/* Expected results for vfma_lane. */
++VECT_VAR_DECL (expected0_static, hfloat, 16, 4) []
++ = { 0x613E /* A0 + B0 * B0. */,
++ 0xD86D /* A1 + B1 * B0. */,
++ 0x5A82 /* A2 + B2 * B0. */,
++ 0x567A /* A3 + B3 * B0. */};
++
++VECT_VAR_DECL (expected1_static, hfloat, 16, 4) []
++ = { 0xCA33 /* A0 + B0 * B1. */,
++ 0x4EF6 /* A1 + B1 * B1. */,
++ 0xD274 /* A2 + B2 * B1. */,
++ 0xCA9A /* A3 + B3 * B1. */ };
++
++VECT_VAR_DECL (expected2_static, hfloat, 16, 4) []
++ = { 0x5D2F /* A0 + B0 * B2. */,
++ 0xD32D /* A1 + B1 * B2. */,
++ 0x54F3 /* A2 + B2 * B2. */,
++ 0x51B3 /* A3 + B3 * B2. */ };
++
++VECT_VAR_DECL (expected3_static, hfloat, 16, 4) []
++ = { 0x5AC8 /* A0 + B0 * B3. */,
++ 0xCF40 /* A1 + B1 * B3. */,
++ 0x5073 /* A2 + B2 * B3. */,
++ 0x4E80 /* A3 + B3 * B3. */ };
++
++/* Expected results for vfmaq_lane. */
++VECT_VAR_DECL (expected0_static, hfloat, 16, 8) []
++ = { 0x613E /* A0 + B0 * B0. */,
++ 0xD86D /* A1 + B1 * B0. */,
++ 0x5A82 /* A2 + B2 * B0. */,
++ 0x567A /* A3 + B3 * B0. */,
++ 0x7C00 /* A4 + B4 * B0. */,
++ 0xF24D /* A5 + B5 * B0. */,
++ 0xE11B /* A6 + B6 * B0. */,
++ 0x7C00 /* A7 + B7 * B0. */ };
++
++VECT_VAR_DECL (expected1_static, hfloat, 16, 8) []
++ = { 0xCA33 /* A0 + B0 * B1. */,
++ 0x4EF6 /* A1 + B1 * B1. */,
++ 0xD274 /* A2 + B2 * B1. */,
++ 0xCA9A /* A3 + B3 * B1. */,
++ 0x7C00 /* A4 + B4 * B1. */,
++ 0x6A3B /* A5 + B5 * B1. */,
++ 0x5C4D /* A6 + B6 * B1. */,
++ 0xFC00 /* A7 + B7 * B1. */ };
++
++VECT_VAR_DECL (expected2_static, hfloat, 16, 8) []
++ = { 0x5D2F /* A0 + B0 * B2. */,
++ 0xD32D /* A1 + B1 * B2. */,
++ 0x54F3 /* A2 + B2 * B2. */,
++ 0x51B3 /* A3 + B3 * B2. */,
++ 0x7C00 /* A4 + B4 * B2. */,
++ 0xECCB /* A5 + B5 * B2. */,
++ 0xDA01 /* A6 + B6 * B2. */,
++ 0x7C00 /* A7 + B7 * B2. */ };
++
++VECT_VAR_DECL (expected3_static, hfloat, 16, 8) []
++ = { 0x5AC8 /* A0 + B0 * B3. */,
++ 0xCF40 /* A1 + B1 * B3. */,
++ 0x5073 /* A2 + B2 * B3. */,
++ 0x4E80 /* A3 + B3 * B3. */,
++ 0x7C00 /* A4 + B4 * B3. */,
++ 0xE851 /* A5 + B5 * B3. */,
++ 0xD08C /* A6 + B6 * B3. */,
++ 0x7C00 /* A7 + B7 * B3. */ };
++
++/* Expected results for vfma_laneq. */
++VECT_VAR_DECL (expected0_laneq_static, hfloat, 16, 4) []
++ = { 0x613E /* A0 + B0 * B0. */,
++ 0xD86D /* A1 + B1 * B0. */,
++ 0x5A82 /* A2 + B2 * B0. */,
++ 0x567A /* A3 + B3 * B0. */ };
++
++VECT_VAR_DECL (expected1_laneq_static, hfloat, 16, 4) []
++ = { 0xCA33 /* A0 + B0 * B1. */,
++ 0x4EF6 /* A1 + B1 * B1. */,
++ 0xD274 /* A2 + B2 * B1. */,
++ 0xCA9A /* A3 + B3 * B1. */ };
++
++VECT_VAR_DECL (expected2_laneq_static, hfloat, 16, 4) []
++ = { 0x5D2F /* A0 + B0 * B2. */,
++ 0xD32D /* A1 + B1 * B2. */,
++ 0x54F3 /* A2 + B2 * B2. */,
++ 0x51B3 /* A3 + B3 * B2. */ };
++
++VECT_VAR_DECL (expected3_laneq_static, hfloat, 16, 4) []
++ = { 0x5AC8 /* A0 + B0 * B3. */,
++ 0xCF40 /* A1 + B1 * B3. */,
++ 0x5073 /* A2 + B2 * B3. */,
++ 0x4E80 /* A3 + B3 * B3. */ };
++
++VECT_VAR_DECL (expected4_laneq_static, hfloat, 16, 4) []
++ = { 0x5A58 /* A0 + B0 * B4. */,
++ 0xCE62 /* A1 + B1 * B4. */,
++ 0x4F91 /* A2 + B2 * B4. */,
++ 0x4DE6 /* A3 + B3 * B4. */ };
++
++VECT_VAR_DECL (expected5_laneq_static, hfloat, 16, 4) []
++ = { 0xF23D /* A0 + B0 * B5. */,
++ 0x6A3B /* A1 + B1 * B5. */,
++ 0xECCA /* A2 + B2 * B5. */,
++ 0xE849 /* A3 + B3 * B5. */ };
++
++VECT_VAR_DECL (expected6_laneq_static, hfloat, 16, 4) []
++ = { 0xE0DA /* A0 + B0 * B6. */,
++ 0x5995 /* A1 + B1 * B6. */,
++ 0xDC6C /* A2 + B2 * B6. */,
++ 0xD753 /* A3 + B3 * B6. */ };
++
++VECT_VAR_DECL (expected7_laneq_static, hfloat, 16, 4) []
++ = { 0x7C00 /* A0 + B0 * B7. */,
++ 0xFC00 /* A1 + B1 * B7. */,
++ 0x7C00 /* A2 + B2 * B7. */,
++ 0x7C00 /* A3 + B3 * B7. */ };
++
++/* Expected results for vfmaq_laneq. */
++VECT_VAR_DECL (expected0_laneq_static, hfloat, 16, 8) []
++ = { 0x613E /* A0 + B0 * B0. */,
++ 0xD86D /* A1 + B1 * B0. */,
++ 0x5A82 /* A2 + B2 * B0. */,
++ 0x567A /* A3 + B3 * B0. */,
++ 0x7C00 /* A4 + B4 * B0. */,
++ 0xF24D /* A5 + B5 * B0. */,
++ 0xE11B /* A6 + B6 * B0. */,
++ 0x7C00 /* A7 + B7 * B0. */ };
++
++VECT_VAR_DECL (expected1_laneq_static, hfloat, 16, 8) []
++ = { 0xCA33 /* A0 + B0 * B1. */,
++ 0x4EF6 /* A1 + B1 * B1. */,
++ 0xD274 /* A2 + B2 * B1. */,
++ 0xCA9A /* A3 + B3 * B1. */,
++ 0x7C00 /* A4 + B4 * B1. */,
++ 0x6A3B /* A5 + B5 * B1. */,
++ 0x5C4D /* A6 + B6 * B1. */,
++ 0xFC00 /* A7 + B7 * B1. */ };
++
++VECT_VAR_DECL (expected2_laneq_static, hfloat, 16, 8) []
++ = { 0x5D2F /* A0 + B0 * B2. */,
++ 0xD32D /* A1 + B1 * B2. */,
++ 0x54F3 /* A2 + B2 * B2. */,
++ 0x51B3 /* A3 + B3 * B2. */,
++ 0x7C00 /* A4 + B4 * B2. */,
++ 0xECCB /* A5 + B5 * B2. */,
++ 0xDA01 /* A6 + B6 * B2. */,
++ 0x7C00 /* A7 + B7 * B2. */ };
++
++VECT_VAR_DECL (expected3_laneq_static, hfloat, 16, 8) []
++ = { 0x5AC8 /* A0 + B0 * B3. */,
++ 0xCF40 /* A1 + B1 * B3. */,
++ 0x5073 /* A2 + B2 * B3. */,
++ 0x4E80 /* A3 + B3 * B3. */,
++ 0x7C00 /* A4 + B4 * B3. */,
++ 0xE851 /* A5 + B5 * B3. */,
++ 0xD08C /* A6 + B6 * B3. */,
++ 0x7C00 /* A7 + B7 * B3. */ };
++
++VECT_VAR_DECL (expected4_laneq_static, hfloat, 16, 8) []
++ = { 0x5A58 /* A0 + B0 * B4. */,
++ 0xCE62 /* A1 + B1 * B4. */,
++ 0x4F91 /* A2 + B2 * B4. */,
++ 0x4DE6 /* A3 + B3 * B4. */,
++ 0x7C00 /* A4 + B4 * B4. */,
++ 0xE757 /* A5 + B5 * B4. */,
++ 0xCC54 /* A6 + B6 * B4. */,
++ 0x7C00 /* A7 + B7 * B4. */ };
++
++VECT_VAR_DECL (expected5_laneq_static, hfloat, 16, 8) []
++ = { 0xF23D /* A0 + B0 * B5. */,
++ 0x6A3B /* A1 + B1 * B5. */,
++ 0xECCA /* A2 + B2 * B5. */,
++ 0xE849 /* A3 + B3 * B5. */,
++ 0x7C00 /* A4 + B4 * B5. */,
++ 0x7C00 /* A5 + B5 * B5. */,
++ 0x744D /* A6 + B6 * B5. */,
++ 0xFC00 /* A7 + B7 * B5. */ };
++
++VECT_VAR_DECL (expected6_laneq_static, hfloat, 16, 8) []
++ = { 0xE0DA /* A0 + B0 * B6. */,
++ 0x5995 /* A1 + B1 * B6. */,
++ 0xDC6C /* A2 + B2 * B6. */,
++ 0xD753 /* A3 + B3 * B6. */,
++ 0x7C00 /* A4 + B4 * B6. */,
++ 0x7447 /* A5 + B5 * B6. */,
++ 0x644E /* A6 + B6 * B6. */,
++ 0xFC00 /* A7 + B7 * B6. */ };
++
++VECT_VAR_DECL (expected7_laneq_static, hfloat, 16, 8) []
++ = { 0x7C00 /* A0 + B0 * B7. */,
++ 0xFC00 /* A1 + B1 * B7. */,
++ 0x7C00 /* A2 + B2 * B7. */,
++ 0x7C00 /* A3 + B3 * B7. */,
++ 0x7C00 /* A4 + B4 * B7. */,
++ 0xFC00 /* A5 + B5 * B7. */,
++ 0xFC00 /* A6 + B6 * B7. */,
++ 0x7C00 /* A7 + B7 * B7. */ };
++
++/* Expected results for vfms_lane. */
++VECT_VAR_DECL (expected0_fms_static, hfloat, 16, 4) []
++ = { 0xDEA2 /* A0 + (-B0) * B0. */,
++ 0x5810 /* A1 + (-B1) * B0. */,
++ 0xDA82 /* A2 + (-B2) * B0. */,
++ 0xD53A /* A3 + (-B3) * B0. */ };
++
++VECT_VAR_DECL (expected1_fms_static, hfloat, 16, 4) []
++ = { 0x5C0D /* A0 + (-B0) * B1. */,
++ 0xD0EE /* A1 + (-B1) * B1. */,
++ 0x5274 /* A2 + (-B2) * B1. */,
++ 0x5026 /* A3 + (-B3) * B1. */ };
++
++VECT_VAR_DECL (expected2_fms_static, hfloat, 16, 4) []
++ = { 0xD54E /* A0 + (-B0) * B2. */,
++ 0x51BA /* A1 + (-B1) * B2. */,
++ 0xD4F3 /* A2 + (-B2) * B2. */,
++ 0xCE66 /* A3 + (-B3) * B2. */ };
++
++VECT_VAR_DECL (expected3_fms_static, hfloat, 16, 4) []
++ = { 0x4F70 /* A0 + (-B0) * B3. */,
++ 0x4C5A /* A1 + (-B1) * B3. */,
++ 0xD073 /* A2 + (-B2) * B3. */,
++ 0xC600 /* A3 + (-B3) * B3. */ };
++
++/* Expected results for vfmsq_lane. */
++VECT_VAR_DECL (expected0_fms_static, hfloat, 16, 8) []
++ = { 0xDEA2 /* A0 + (-B0) * B0. */,
++ 0x5810 /* A1 + (-B1) * B0. */,
++ 0xDA82 /* A2 + (-B2) * B0. */,
++ 0xD53A /* A3 + (-B3) * B0. */,
++ 0x7C00 /* A4 + (-B4) * B0. */,
++ 0x724B /* A5 + (-B5) * B0. */,
++ 0x6286 /* A6 + (-B6) * B0. */,
++ 0xFC00 /* A7 + (-B7) * B0. */ };
++
++VECT_VAR_DECL (expected1_fms_static, hfloat, 16, 8) []
++ = { 0x5C0D /* A0 + (-B0) * B1. */,
++ 0xD0EE /* A1 + (-B1) * B1. */,
++ 0x5274 /* A2 + (-B2) * B1. */,
++ 0x5026 /* A3 + (-B3) * B1. */,
++ 0x7C00 /* A4 + (-B4) * B1. */,
++ 0xEA41 /* A5 + (-B5) * B1. */,
++ 0xD5DA /* A6 + (-B6) * B1. */,
++ 0x7C00 /* A7 + (-B7) * B1. */ };
++
++VECT_VAR_DECL (expected2_fms_static, hfloat, 16, 8) []
++ = { 0xD54E /* A0 + (-B0) * B2. */,
++ 0x51BA /* A1 + (-B1) * B2. */,
++ 0xD4F3 /* A2 + (-B2) * B2. */,
++ 0xCE66 /* A3 + (-B3) * B2. */,
++ 0x7C00 /* A4 + (-B4) * B2. */,
++ 0x6CC8 /* A5 + (-B5) * B2. */,
++ 0x5DD7 /* A6 + (-B6) * B2. */,
++ 0xFC00 /* A7 + (-B7) * B2. */ };
++
++VECT_VAR_DECL (expected3_fms_static, hfloat, 16, 8) []
++ = { 0x4F70 /* A0 + (-B0) * B3. */,
++ 0x4C5A /* A1 + (-B1) * B3. */,
++ 0xD073 /* A2 + (-B2) * B3. */,
++ 0xC600 /* A3 + (-B3) * B3. */,
++ 0x7C00 /* A4 + (-B4) * B3. */,
++ 0x684B /* A5 + (-B5) * B3. */,
++ 0x5AD0 /* A6 + (-B6) * B3. */,
++ 0xFC00 /* A7 + (-B7) * B3. */ };
++
++/* Expected results for vfms_laneq. */
++VECT_VAR_DECL (expected0_fms_laneq_static, hfloat, 16, 4) []
++ = { 0xDEA2 /* A0 + (-B0) * B0. */,
++ 0x5810 /* A1 + (-B1) * B0. */,
++ 0xDA82 /* A2 + (-B2) * B0. */,
++ 0xD53A /* A3 + (-B3) * B0. */ };
++
++VECT_VAR_DECL (expected1_fms_laneq_static, hfloat, 16, 4) []
++ = { 0x5C0D /* A0 + (-B0) * B1. */,
++ 0xD0EE /* A1 + (-B1) * B1. */,
++ 0x5274 /* A2 + (-B2) * B1. */,
++ 0x5026 /* A3 + (-B3) * B1. */ };
++
++VECT_VAR_DECL (expected2_fms_laneq_static, hfloat, 16, 4) []
++ = { 0xD54E /* A0 + (-B0) * B2. */,
++ 0x51BA /* A1 + (-B1) * B2. */,
++ 0xD4F3 /* A2 + (-B2) * B2. */,
++ 0xCE66 /* A3 + (-B3) * B2. */ };
++
++VECT_VAR_DECL (expected3_fms_laneq_static, hfloat, 16, 4) []
++ = { 0x4F70 /* A0 + (-B0) * B3. */,
++ 0x4C5A /* A1 + (-B1) * B3. */,
++ 0xD073 /* A2 + (-B2) * B3. */,
++ 0xC600 /* A3 + (-B3) * B3. */ };
++
++VECT_VAR_DECL (expected4_fms_laneq_static, hfloat, 16, 4) []
++ = { 0x5179 /* A0 + (-B0) * B4. */,
++ 0x4AF6 /* A1 + (-B1) * B4. */,
++ 0xCF91 /* A2 + (-B2) * B4. */,
++ 0xC334 /* A3 + (-B3) * B4. */ };
++
++VECT_VAR_DECL (expected5_fms_laneq_static, hfloat, 16, 4) []
++ = { 0x725C /* A0 + (-B0) * B5. */,
++ 0xEA41 /* A1 + (-B1) * B5. */,
++ 0x6CCA /* A2 + (-B2) * B5. */,
++ 0x6853 /* A3 + (-B3) * B5. */ };
++
++VECT_VAR_DECL (expected6_fms_laneq_static, hfloat, 16, 4) []
++ = { 0x62C7 /* A0 + (-B0) * B6. */,
++ 0xD9F2 /* A1 + (-B1) * B6. */,
++ 0x5C6C /* A2 + (-B2) * B6. */,
++ 0x584A /* A3 + (-B3) * B6. */ };
++
++VECT_VAR_DECL (expected7_fms_laneq_static, hfloat, 16, 4) []
++ = { 0xFC00 /* A0 + (-B0) * B7. */,
++ 0x7C00 /* A1 + (-B1) * B7. */,
++ 0xFC00 /* A2 + (-B2) * B7. */,
++ 0xFC00 /* A3 + (-B3) * B7. */ };
++
++/* Expected results for vfmsq_laneq. */
++VECT_VAR_DECL (expected0_fms_laneq_static, hfloat, 16, 8) []
++ = { 0xDEA2 /* A0 + (-B0) * B0. */,
++ 0x5810 /* A1 + (-B1) * B0. */,
++ 0xDA82 /* A2 + (-B2) * B0. */,
++ 0xD53A /* A3 + (-B3) * B0. */,
++ 0x7C00 /* A4 + (-B4) * B0. */,
++ 0x724B /* A5 + (-B5) * B0. */,
++ 0x6286 /* A6 + (-B6) * B0. */,
++ 0xFC00 /* A7 + (-B7) * B0. */ };
++
++VECT_VAR_DECL (expected1_fms_laneq_static, hfloat, 16, 8) []
++ = { 0x5C0D /* A0 + (-B0) * B1. */,
++ 0xD0EE /* A1 + (-B1) * B1. */,
++ 0x5274 /* A2 + (-B2) * B1. */,
++ 0x5026 /* A3 + (-B3) * B1. */,
++ 0x7C00 /* A4 + (-B4) * B1. */,
++ 0xEA41 /* A5 + (-B5) * B1. */,
++ 0xD5DA /* A6 + (-B6) * B1. */,
++ 0x7C00 /* A7 + (-B7) * B1. */ };
++
++VECT_VAR_DECL (expected2_fms_laneq_static, hfloat, 16, 8) []
++ = { 0xD54E /* A0 + (-B0) * B2. */,
++ 0x51BA /* A1 + (-B1) * B2. */,
++ 0xD4F3 /* A2 + (-B2) * B2. */,
++ 0xCE66 /* A3 + (-B3) * B2. */,
++ 0x7C00 /* A4 + (-B4) * B2. */,
++ 0x6CC8 /* A5 + (-B5) * B2. */,
++ 0x5DD7 /* A6 + (-B6) * B2. */,
++ 0xFC00 /* A7 + (-B7) * B2. */ };
++
++VECT_VAR_DECL (expected3_fms_laneq_static, hfloat, 16, 8) []
++ = { 0x4F70 /* A0 + (-B0) * B3. */,
++ 0x4C5A /* A1 + (-B1) * B3. */,
++ 0xD073 /* A2 + (-B2) * B3. */,
++ 0xC600 /* A3 + (-B3) * B3. */,
++ 0x7C00 /* A4 + (-B4) * B3. */,
++ 0x684B /* A5 + (-B5) * B3. */,
++ 0x5AD0 /* A6 + (-B6) * B3. */,
++ 0xFC00 /* A7 + (-B7) * B3. */ };
++
++VECT_VAR_DECL (expected4_fms_laneq_static, hfloat, 16, 8) []
++ = { 0x5179 /* A0 + (-B0) * B4. */,
++ 0x4AF6 /* A1 + (-B1) * B4. */,
++ 0xCF91 /* A2 + (-B2) * B4. */,
++ 0xC334 /* A3 + (-B3) * B4. */,
++ 0x7C00 /* A4 + (-B4) * B4. */,
++ 0x674C /* A5 + (-B5) * B4. */,
++ 0x5A37 /* A6 + (-B6) * B4. */,
++ 0xFC00 /* A7 + (-B7) * B4. */ };
++
++VECT_VAR_DECL (expected5_fms_laneq_static, hfloat, 16, 8) []
++ = { 0x725C /* A0 + (-B0) * B5. */,
++ 0xEA41 /* A1 + (-B1) * B5. */,
++ 0x6CCA /* A2 + (-B2) * B5. */,
++ 0x6853 /* A3 + (-B3) * B5. */,
++ 0x7C00 /* A4 + (-B4) * B5. */,
++ 0xFC00 /* A5 + (-B5) * B5. */,
++ 0xF441 /* A6 + (-B6) * B5. */,
++ 0x7C00 /* A7 + (-B7) * B5. */ };
++
++VECT_VAR_DECL (expected6_fms_laneq_static, hfloat, 16, 8) []
++ = { 0x62C7 /* A0 + (-B0) * B6. */,
++ 0xD9F2 /* A1 + (-B1) * B6. */,
++ 0x5C6C /* A2 + (-B2) * B6. */,
++ 0x584A /* A3 + (-B3) * B6. */,
++ 0x7C00 /* A4 + (-B4) * B6. */,
++ 0xF447 /* A5 + (-B5) * B6. */,
++ 0xE330 /* A6 + (-B6) * B6. */,
++ 0x7C00 /* A7 + (-B7) * B6. */ };
++
++VECT_VAR_DECL (expected7_fms_laneq_static, hfloat, 16, 8) []
++ = { 0xFC00 /* A0 + (-B0) * B7. */,
++ 0x7C00 /* A1 + (-B1) * B7. */,
++ 0xFC00 /* A2 + (-B2) * B7. */,
++ 0xFC00 /* A3 + (-B3) * B7. */,
++ 0x7C00 /* A4 + (-B4) * B7. */,
++ 0x7C00 /* A5 + (-B5) * B7. */,
++ 0x7C00 /* A6 + (-B6) * B7. */,
++ 0xFC00 /* A7 + (-B7) * B7. */ };
++
++void exec_vfmas_lane_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VFMA_LANE (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 4);
++ DECL_VARIABLE(vsrc_2, float, 16, 4);
++ VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A0, A1, A2, A3};
++ VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {B0, B1, B2, B3};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
++ VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vfma_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 0);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMAQ_LANE (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 8);
++ DECL_VARIABLE(vsrc_2, float, 16, 8);
++ VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A0, A1, A2, A3, A4, A5, A6, A7};
++ VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {B0, B1, B2, B3, B4, B5, B6, B7};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
++ VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vfmaq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 0);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMA_LANEQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_3, float, 16, 8);
++ VECT_VAR_DECL (buf_src_3, float, 16, 8) [] = {B0, B1, B2, B3, B4, B5, B6, B7};
++ VLOAD (vsrc_3, buf_src_3, q, float, f, 16, 8);
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 0);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected0_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected1_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected2_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected3_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 4);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected4_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 5);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected5_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 6);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected6_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 7);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected7_laneq_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMAQ_LANEQ (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 0);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected0_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected1_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected2_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected3_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 4);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected4_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 5);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected5_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 6);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected6_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 7);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected7_laneq_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMS_LANE (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 0);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected0_fms_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected1_fms_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected2_fms_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected3_fms_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMSQ_LANE (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 0);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected0_fms_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected1_fms_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected2_fms_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected3_fms_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMS_LANEQ (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 0);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected0_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected1_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected2_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected3_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 4);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected4_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 5);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected5_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 6);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected6_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4),
++ VECT_VAR (vsrc_3, float, 16, 8), 7);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected7_fms_laneq_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMSQ_LANEQ (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 0);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected0_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected1_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected2_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected3_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 4);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected4_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 5);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected5_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 6);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected6_fms_laneq_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8),
++ VECT_VAR (vsrc_3, float, 16, 8), 7);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected7_fms_laneq_static, "");
++}
++
++int
++main (void)
++{
++ exec_vfmas_lane_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfmas_n_f16_1.c
+@@ -0,0 +1,469 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A0 FP16_C (123.4)
++#define A1 FP16_C (-5.8)
++#define A2 FP16_C (-0.0)
++#define A3 FP16_C (10)
++#define A4 FP16_C (123412.43)
++#define A5 FP16_C (-5.8)
++#define A6 FP16_C (90.8)
++#define A7 FP16_C (24)
++
++#define B0 FP16_C (23.4)
++#define B1 FP16_C (-5.8)
++#define B2 FP16_C (8.9)
++#define B3 FP16_C (4.0)
++#define B4 FP16_C (3.4)
++#define B5 FP16_C (-550.8)
++#define B6 FP16_C (-31.8)
++#define B7 FP16_C (20000.0)
++
++/* Expected results for vfma_n. */
++VECT_VAR_DECL (expected_fma0_static, hfloat, 16, 4) []
++ = { 0x613E /* A0 + B0 * B0. */,
++ 0xD86D /* A1 + B1 * B0. */,
++ 0x5A82 /* A2 + B2 * B0. */,
++ 0x567A /* A3 + B3 * B0. */ };
++
++VECT_VAR_DECL (expected_fma1_static, hfloat, 16, 4) []
++ = { 0xCA33 /* A0 + B0 * B1. */,
++ 0x4EF6 /* A1 + B1 * B1. */,
++ 0xD274 /* A2 + B2 * B1. */,
++ 0xCA9A /* A3 + B3 * B1. */ };
++
++VECT_VAR_DECL (expected_fma2_static, hfloat, 16, 4) []
++ = { 0x5D2F /* A0 + B0 * B2. */,
++ 0xD32D /* A1 + B1 * B2. */,
++ 0x54F3 /* A2 + B2 * B2. */,
++ 0x51B3 /* A3 + B3 * B2. */ };
++
++VECT_VAR_DECL (expected_fma3_static, hfloat, 16, 4) []
++ = { 0x5AC8 /* A0 + B0 * B3. */,
++ 0xCF40 /* A1 + B1 * B3. */,
++ 0x5073 /* A2 + B2 * B3. */,
++ 0x4E80 /* A3 + B3 * B3. */ };
++
++VECT_VAR_DECL (expected_fma0_static, hfloat, 16, 8) []
++ = { 0x613E /* A0 + B0 * B0. */,
++ 0xD86D /* A1 + B1 * B0. */,
++ 0x5A82 /* A2 + B2 * B0. */,
++ 0x567A /* A3 + B3 * B0. */,
++ 0x7C00 /* A4 + B4 * B0. */,
++ 0xF24D /* A5 + B5 * B0. */,
++ 0xE11B /* A6 + B6 * B0. */,
++ 0x7C00 /* A7 + B7 * B0. */ };
++
++VECT_VAR_DECL (expected_fma1_static, hfloat, 16, 8) []
++ = { 0xCA33 /* A0 + B0 * B1. */,
++ 0x4EF6 /* A1 + B1 * B1. */,
++ 0xD274 /* A2 + B2 * B1. */,
++ 0xCA9A /* A3 + B3 * B1. */,
++ 0x7C00 /* A4 + B4 * B1. */,
++ 0x6A3B /* A5 + B5 * B1. */,
++ 0x5C4D /* A6 + B6 * B1. */,
++ 0xFC00 /* A7 + B7 * B1. */ };
++
++VECT_VAR_DECL (expected_fma2_static, hfloat, 16, 8) []
++ = { 0x5D2F /* A0 + B0 * B2. */,
++ 0xD32D /* A1 + B1 * B2. */,
++ 0x54F3 /* A2 + B2 * B2. */,
++ 0x51B3 /* A3 + B3 * B2. */,
++ 0x7C00 /* A4 + B4 * B2. */,
++ 0xECCB /* A5 + B5 * B2. */,
++ 0xDA01 /* A6 + B6 * B2. */,
++ 0x7C00 /* A7 + B7 * B2. */ };
++
++VECT_VAR_DECL (expected_fma3_static, hfloat, 16, 8) []
++ = { 0x5AC8 /* A0 + B0 * B3. */,
++ 0xCF40 /* A1 + B1 * B3. */,
++ 0x5073 /* A2 + B2 * B3. */,
++ 0x4E80 /* A3 + B3 * B3. */,
++ 0x7C00 /* A4 + B4 * B3. */,
++ 0xE851 /* A5 + B5 * B3. */,
++ 0xD08C /* A6 + B6 * B3. */,
++ 0x7C00 /* A7 + B7 * B3. */ };
++
++VECT_VAR_DECL (expected_fma4_static, hfloat, 16, 8) []
++ = { 0x5A58 /* A0 + B0 * B4. */,
++ 0xCE62 /* A1 + B1 * B4. */,
++ 0x4F91 /* A2 + B2 * B4. */,
++ 0x4DE6 /* A3 + B3 * B4. */,
++ 0x7C00 /* A4 + B4 * B4. */,
++ 0xE757 /* A5 + B5 * B4. */,
++ 0xCC54 /* A6 + B6 * B4. */,
++ 0x7C00 /* A7 + B7 * B4. */ };
++
++VECT_VAR_DECL (expected_fma5_static, hfloat, 16, 8) []
++ = { 0xF23D /* A0 + B0 * B5. */,
++ 0x6A3B /* A1 + B1 * B5. */,
++ 0xECCA /* A2 + B2 * B5. */,
++ 0xE849 /* A3 + B3 * B5. */,
++ 0x7C00 /* A4 + B4 * B5. */,
++ 0x7C00 /* A5 + B5 * B5. */,
++ 0x744D /* A6 + B6 * B5. */,
++ 0xFC00 /* A7 + B7 * B5. */ };
++
++VECT_VAR_DECL (expected_fma6_static, hfloat, 16, 8) []
++ = { 0xE0DA /* A0 + B0 * B6. */,
++ 0x5995 /* A1 + B1 * B6. */,
++ 0xDC6C /* A2 + B2 * B6. */,
++ 0xD753 /* A3 + B3 * B6. */,
++ 0x7C00 /* A4 + B4 * B6. */,
++ 0x7447 /* A5 + B5 * B6. */,
++ 0x644E /* A6 + B6 * B6. */,
++ 0xFC00 /* A7 + B7 * B6. */ };
++
++VECT_VAR_DECL (expected_fma7_static, hfloat, 16, 8) []
++ = { 0x7C00 /* A0 + B0 * B7. */,
++ 0xFC00 /* A1 + B1 * B7. */,
++ 0x7C00 /* A2 + B2 * B7. */,
++ 0x7C00 /* A3 + B3 * B7. */,
++ 0x7C00 /* A4 + B4 * B7. */,
++ 0xFC00 /* A5 + B5 * B7. */,
++ 0xFC00 /* A6 + B6 * B7. */,
++ 0x7C00 /* A7 + B7 * B7. */ };
++
++/* Expected results for vfms_n. */
++VECT_VAR_DECL (expected_fms0_static, hfloat, 16, 4) []
++ = { 0xDEA2 /* A0 + (-B0) * B0. */,
++ 0x5810 /* A1 + (-B1) * B0. */,
++ 0xDA82 /* A2 + (-B2) * B0. */,
++ 0xD53A /* A3 + (-B3) * B0. */ };
++
++VECT_VAR_DECL (expected_fms1_static, hfloat, 16, 4) []
++ = { 0x5C0D /* A0 + (-B0) * B1. */,
++ 0xD0EE /* A1 + (-B1) * B1. */,
++ 0x5274 /* A2 + (-B2) * B1. */,
++ 0x5026 /* A3 + (-B3) * B1. */ };
++
++VECT_VAR_DECL (expected_fms2_static, hfloat, 16, 4) []
++ = { 0xD54E /* A0 + (-B0) * B2. */,
++ 0x51BA /* A1 + (-B1) * B2. */,
++ 0xD4F3 /* A2 + (-B2) * B2. */,
++ 0xCE66 /* A3 + (-B3) * B2. */ };
++
++VECT_VAR_DECL (expected_fms3_static, hfloat, 16, 4) []
++ = { 0x4F70 /* A0 + (-B0) * B3. */,
++ 0x4C5A /* A1 + (-B1) * B3. */,
++ 0xD073 /* A2 + (-B2) * B3. */,
++ 0xC600 /* A3 + (-B3) * B3. */ };
++
++VECT_VAR_DECL (expected_fms0_static, hfloat, 16, 8) []
++ = { 0xDEA2 /* A0 + (-B0) * B0. */,
++ 0x5810 /* A1 + (-B1) * B0. */,
++ 0xDA82 /* A2 + (-B2) * B0. */,
++ 0xD53A /* A3 + (-B3) * B0. */,
++ 0x7C00 /* A4 + (-B4) * B0. */,
++ 0x724B /* A5 + (-B5) * B0. */,
++ 0x6286 /* A6 + (-B6) * B0. */,
++ 0xFC00 /* A7 + (-B7) * B0. */ };
++
++VECT_VAR_DECL (expected_fms1_static, hfloat, 16, 8) []
++ = { 0x5C0D /* A0 + (-B0) * B1. */,
++ 0xD0EE /* A1 + (-B1) * B1. */,
++ 0x5274 /* A2 + (-B2) * B1. */,
++ 0x5026 /* A3 + (-B3) * B1. */,
++ 0x7C00 /* A4 + (-B4) * B1. */,
++ 0xEA41 /* A5 + (-B5) * B1. */,
++ 0xD5DA /* A6 + (-B6) * B1. */,
++ 0x7C00 /* A7 + (-B7) * B1. */ };
++
++VECT_VAR_DECL (expected_fms2_static, hfloat, 16, 8) []
++ = { 0xD54E /* A0 + (-B0) * B2. */,
++ 0x51BA /* A1 + (-B1) * B2. */,
++ 0xD4F3 /* A2 + (-B2) * B2. */,
++ 0xCE66 /* A3 + (-B3) * B2. */,
++ 0x7C00 /* A4 + (-B4) * B2. */,
++ 0x6CC8 /* A5 + (-B5) * B2. */,
++ 0x5DD7 /* A6 + (-B6) * B2. */,
++ 0xFC00 /* A7 + (-B7) * B2. */ };
++
++VECT_VAR_DECL (expected_fms3_static, hfloat, 16, 8) []
++ = { 0x4F70 /* A0 + (-B0) * B3. */,
++ 0x4C5A /* A1 + (-B1) * B3. */,
++ 0xD073 /* A2 + (-B2) * B3. */,
++ 0xC600 /* A3 + (-B3) * B3. */,
++ 0x7C00 /* A4 + (-B4) * B3. */,
++ 0x684B /* A5 + (-B5) * B3. */,
++ 0x5AD0 /* A6 + (-B6) * B3. */,
++ 0xFC00 /* A7 + (-B7) * B3. */ };
++
++VECT_VAR_DECL (expected_fms4_static, hfloat, 16, 8) []
++ = { 0x5179 /* A0 + (-B0) * B4. */,
++ 0x4AF6 /* A1 + (-B1) * B4. */,
++ 0xCF91 /* A2 + (-B2) * B4. */,
++ 0xC334 /* A3 + (-B3) * B4. */,
++ 0x7C00 /* A4 + (-B4) * B4. */,
++ 0x674C /* A5 + (-B5) * B4. */,
++ 0x5A37 /* A6 + (-B6) * B4. */,
++ 0xFC00 /* A7 + (-B7) * B4. */ };
++
++VECT_VAR_DECL (expected_fms5_static, hfloat, 16, 8) []
++ = { 0x725C /* A0 + (-B0) * B5. */,
++ 0xEA41 /* A1 + (-B1) * B5. */,
++ 0x6CCA /* A2 + (-B2) * B5. */,
++ 0x6853 /* A3 + (-B3) * B5. */,
++ 0x7C00 /* A4 + (-B4) * B5. */,
++ 0xFC00 /* A5 + (-B5) * B5. */,
++ 0xF441 /* A6 + (-B6) * B5. */,
++ 0x7C00 /* A7 + (-B7) * B5. */ };
++
++VECT_VAR_DECL (expected_fms6_static, hfloat, 16, 8) []
++ = { 0x62C7 /* A0 + (-B0) * B6. */,
++ 0xD9F2 /* A1 + (-B1) * B6. */,
++ 0x5C6C /* A2 + (-B2) * B6. */,
++ 0x584A /* A3 + (-B3) * B6. */,
++ 0x7C00 /* A4 + (-B4) * B6. */,
++ 0xF447 /* A5 + (-B5) * B6. */,
++ 0xE330 /* A6 + (-B6) * B6. */,
++ 0x7C00 /* A7 + (-B7) * B6. */ };
++
++VECT_VAR_DECL (expected_fms7_static, hfloat, 16, 8) []
++ = { 0xFC00 /* A0 + (-B0) * B7. */,
++ 0x7C00 /* A1 + (-B1) * B7. */,
++ 0xFC00 /* A2 + (-B2) * B7. */,
++ 0xFC00 /* A3 + (-B3) * B7. */,
++ 0x7C00 /* A4 + (-B4) * B7. */,
++ 0x7C00 /* A5 + (-B5) * B7. */,
++ 0x7C00 /* A6 + (-B6) * B7. */,
++ 0xFC00 /* A7 + (-B7) * B7. */ };
++
++void exec_vfmas_n_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VFMA_N (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 4);
++ DECL_VARIABLE(vsrc_2, float, 16, 4);
++ VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A0, A1, A2, A3};
++ VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {B0, B1, B2, B3};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
++ VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), B0);
++
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), B1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), B2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), B3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMAQ_N (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 8);
++ DECL_VARIABLE(vsrc_2, float, 16, 8);
++ VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A0, A1, A2, A3, A4, A5, A6, A7};
++ VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {B0, B1, B2, B3, B4, B5, B6, B7};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
++ VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B0);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma3_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B4);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma4_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B5);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma5_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B6);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma6_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B7);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma7_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMA_N (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), B0);
++
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), B1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), B2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), B3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMAQ_N (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B0);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms3_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B4);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms4_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B5);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms5_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B6);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms6_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), B7);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms7_static, "");
++}
++
++int
++main (void)
++{
++ exec_vfmas_n_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfmash_lane_f16_1.c
+@@ -0,0 +1,143 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A0 FP16_C (123.4)
++#define B0 FP16_C (-5.8)
++#define C0 FP16_C (-3.8)
++#define D0 FP16_C (10)
++
++#define A1 FP16_C (12.4)
++#define B1 FP16_C (-5.8)
++#define C1 FP16_C (90.8)
++#define D1 FP16_C (24)
++
++#define A2 FP16_C (23.4)
++#define B2 FP16_C (-5.8)
++#define C2 FP16_C (8.9)
++#define D2 FP16_C (4)
++
++#define E0 FP16_C (3.4)
++#define F0 FP16_C (-55.8)
++#define G0 FP16_C (-31.8)
++#define H0 FP16_C (2)
++
++#define E1 FP16_C (123.4)
++#define F1 FP16_C (-5.8)
++#define G1 FP16_C (-3.8)
++#define H1 FP16_C (102)
++
++#define E2 FP16_C (4.9)
++#define F2 FP16_C (-15.8)
++#define G2 FP16_C (39.8)
++#define H2 FP16_C (49)
++
++extern void abort ();
++
++float16_t src1[8] = { A0, B0, C0, D0, E0, F0, G0, H0 };
++float16_t src2[8] = { A1, B1, C1, D1, E1, F1, G1, H1 };
++VECT_VAR_DECL (src3, float, 16, 4) [] = { A2, B2, C2, D2 };
++VECT_VAR_DECL (src3, float, 16, 8) [] = { A2, B2, C2, D2, E2, F2, G2, H2 };
++
++/* Expected results for vfmah_lane_f16. */
++uint16_t expected[4] = { 0x5E76 /* A0 + A1 * A2. */,
++ 0x4EF6 /* B0 + B1 * B2. */,
++ 0x6249 /* C0 + C1 * C2. */,
++ 0x56A0 /* D0 + D1 * D2. */ };
++
++/* Expected results for vfmah_laneq_f16. */
++uint16_t expected_laneq[8] = { 0x5E76 /* A0 + A1 * A2. */,
++ 0x4EF6 /* B0 + B1 * B2. */,
++ 0x6249 /* C0 + C1 * C2. */,
++ 0x56A0 /* D0 + D1 * D2. */,
++ 0x60BF /* E0 + E1 * E2. */,
++ 0x507A /* F0 + F1 * F2. */,
++ 0xD9B9 /* G0 + G1 * G2. */,
++ 0x6CE2 /* H0 + H1 * H2. */ };
++
++/* Expected results for vfmsh_lane_f16. */
++uint16_t expected_fms[4] = { 0xD937 /* A0 + -A1 * A2. */,
++ 0xD0EE /* B0 + -B1 * B2. */,
++ 0xE258 /* C0 + -C1 * C2. */,
++ 0xD560 /* D0 + -D1 * D2. */ };
++
++/* Expected results for vfmsh_laneq_f16. */
++uint16_t expected_fms_laneq[8] = { 0xD937 /* A0 + -A1 * A2. */,
++ 0xD0EE /* B0 + -B1 * B2. */,
++ 0xE258 /* C0 + -C1 * C2. */,
++ 0xD560 /* D0 + -D1 * D2. */,
++ 0xE0B2 /* E0 + -E1 * E2. */,
++ 0xD89C /* F0 + -F1 * F2. */,
++ 0x5778 /* G0 + -G1 * G2. */,
++ 0xECE1 /* H0 + -H1 * H2. */ };
++
++void exec_vfmash_lane_f16 (void)
++{
++#define CHECK_LANE(N) \
++ ret = vfmah_lane_f16 (src1[N], src2[N], VECT_VAR (vsrc3, float, 16, 4), N);\
++ if (*(uint16_t *) &ret != expected[N])\
++ abort ();
++
++ DECL_VARIABLE(vsrc3, float, 16, 4);
++ VLOAD (vsrc3, src3, , float, f, 16, 4);
++ float16_t ret;
++ CHECK_LANE(0)
++ CHECK_LANE(1)
++ CHECK_LANE(2)
++ CHECK_LANE(3)
++
++#undef CHECK_LANE
++#define CHECK_LANE(N) \
++ ret = vfmah_laneq_f16 (src1[N], src2[N], VECT_VAR (vsrc3, float, 16, 8), N);\
++ if (*(uint16_t *) &ret != expected_laneq[N]) \
++ abort ();
++
++ DECL_VARIABLE(vsrc3, float, 16, 8);
++ VLOAD (vsrc3, src3, q, float, f, 16, 8);
++ CHECK_LANE(0)
++ CHECK_LANE(1)
++ CHECK_LANE(2)
++ CHECK_LANE(3)
++ CHECK_LANE(4)
++ CHECK_LANE(5)
++ CHECK_LANE(6)
++ CHECK_LANE(7)
++
++#undef CHECK_LANE
++#define CHECK_LANE(N) \
++ ret = vfmsh_lane_f16 (src1[N], src2[N], VECT_VAR (vsrc3, float, 16, 4), N);\
++ if (*(uint16_t *) &ret != expected_fms[N])\
++ abort ();
++
++ CHECK_LANE(0)
++ CHECK_LANE(1)
++ CHECK_LANE(2)
++
++#undef CHECK_LANE
++#define CHECK_LANE(N) \
++ ret = vfmsh_laneq_f16 (src1[N], src2[N], VECT_VAR (vsrc3, float, 16, 8), N);\
++ if (*(uint16_t *) &ret != expected_fms_laneq[N]) \
++ abort ();
++
++ CHECK_LANE(0)
++ CHECK_LANE(1)
++ CHECK_LANE(2)
++ CHECK_LANE(3)
++ CHECK_LANE(4)
++ CHECK_LANE(5)
++ CHECK_LANE(6)
++ CHECK_LANE(7)
++}
++
++int
++main (void)
++{
++ exec_vfmash_lane_f16 ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfms.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfms.c
+@@ -4,10 +4,17 @@
+
+ #ifdef __ARM_FEATURE_FMA
+ /* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xe206, 0xe204, 0xe202, 0xe200 };
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xe455, 0xe454, 0xe453, 0xe452,
++ 0xe451, 0xe450, 0xe44f, 0xe44e };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc440ca3d, 0xc4408a3d };
+-VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc48a9eb8, 0xc48a7eb8, 0xc48a5eb8, 0xc48a3eb8 };
++VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc48a9eb8, 0xc48a7eb8,
++ 0xc48a5eb8, 0xc48a3eb8 };
+ #ifdef __aarch64__
+-VECT_VAR_DECL(expected,hfloat,64,2) [] = { 0xc08a06e1532b8520, 0xc089fee1532b8520 };
++VECT_VAR_DECL(expected,hfloat,64,2) [] = { 0xc08a06e1532b8520,
++ 0xc089fee1532b8520 };
+ #endif
+
+ #define TEST_MSG "VFMS/VFMSQ"
+@@ -44,6 +51,18 @@ void exec_vfms (void)
+ DECL_VARIABLE(VAR, float, 32, 4);
+ #endif
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector1, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector3, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 4);
++
++ DECL_VARIABLE(vector1, float, 16, 8);
++ DECL_VARIABLE(vector2, float, 16, 8);
++ DECL_VARIABLE(vector3, float, 16, 8);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
++
+ DECL_VFMS_VAR(vector1);
+ DECL_VFMS_VAR(vector2);
+ DECL_VFMS_VAR(vector3);
+@@ -52,6 +71,10 @@ void exec_vfms (void)
+ clean_results ();
+
+ /* Initialize input "vector1" from "buffer". */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector1, buffer, , float, f, 16, 4);
++ VLOAD(vector1, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector1, buffer, , float, f, 32, 2);
+ VLOAD(vector1, buffer, q, float, f, 32, 4);
+ #ifdef __aarch64__
+@@ -59,13 +82,21 @@ void exec_vfms (void)
+ #endif
+
+ /* Choose init value arbitrarily. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector2, , float, f, 16, 4, 9.3f);
++ VDUP(vector2, q, float, f, 16, 8, 29.7f);
++#endif
+ VDUP(vector2, , float, f, 32, 2, 9.3f);
+ VDUP(vector2, q, float, f, 32, 4, 29.7f);
+ #ifdef __aarch64__
+ VDUP(vector2, q, float, f, 64, 2, 15.8f);
+ #endif
+-
++
+ /* Choose init value arbitrarily. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector3, , float, f, 16, 4, 81.2f);
++ VDUP(vector3, q, float, f, 16, 8, 36.8f);
++#endif
+ VDUP(vector3, , float, f, 32, 2, 81.2f);
+ VDUP(vector3, q, float, f, 32, 4, 36.8f);
+ #ifdef __aarch64__
+@@ -73,12 +104,20 @@ void exec_vfms (void)
+ #endif
+
+ /* Execute the tests. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VFMS(, float, f, 16, 4);
++ TEST_VFMS(q, float, f, 16, 8);
++#endif
+ TEST_VFMS(, float, f, 32, 2);
+ TEST_VFMS(q, float, f, 32, 4);
+ #ifdef __aarch64__
+ TEST_VFMS(q, float, f, 64, 2);
+ #endif
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
++#endif
+ CHECK_VFMS_RESULTS (TEST_MSG, "");
+ }
+ #endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfms_vfma_n.c
+@@ -0,0 +1,490 @@
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#if defined(__aarch64__) && defined(__ARM_FEATURE_FMA)
++
++#define A0 123.4f
++#define A1 -3.8f
++#define A2 -29.4f
++#define A3 (__builtin_inff ())
++#define A4 0.0f
++#define A5 24.0f
++#define A6 124.0f
++#define A7 1024.0f
++
++#define B0 -5.8f
++#define B1 -0.0f
++#define B2 -10.8f
++#define B3 10.0f
++#define B4 23.4f
++#define B5 -1234.8f
++#define B6 8.9f
++#define B7 4.0f
++
++#define E0 9.8f
++#define E1 -1024.0f
++#define E2 (-__builtin_inff ())
++#define E3 479.0f
++float32_t elem0 = E0;
++float32_t elem1 = E1;
++float32_t elem2 = E2;
++float32_t elem3 = E3;
++
++#define DA0 1231234.4
++#define DA1 -3.8
++#define DA2 -2980.4
++#define DA3 -5.8
++#define DA4 0.01123
++#define DA5 24.0
++#define DA6 124.12345
++#define DA7 1024.0
++
++#define DB0 -5.8
++#define DB1 (__builtin_inf ())
++#define DB2 -105.8
++#define DB3 10.0
++#define DB4 (-__builtin_inf ())
++#define DB5 -1234.8
++#define DB6 848.9
++#define DB7 44444.0
++
++#define DE0 9.8
++#define DE1 -1024.0
++#define DE2 105.8
++#define DE3 479.0
++float64_t delem0 = DE0;
++float64_t delem1 = DE1;
++float64_t delem2 = DE2;
++float64_t delem3 = DE3;
++
++/* Expected results for vfms_n. */
++
++VECT_VAR_DECL(expectedfms0, float, 32, 2) [] = {A0 + -B0 * E0, A1 + -B1 * E0};
++VECT_VAR_DECL(expectedfms1, float, 32, 2) [] = {A2 + -B2 * E1, A3 + -B3 * E1};
++VECT_VAR_DECL(expectedfms2, float, 32, 2) [] = {A4 + -B4 * E2, A5 + -B5 * E2};
++VECT_VAR_DECL(expectedfms3, float, 32, 2) [] = {A6 + -B6 * E3, A7 + -B7 * E3};
++VECT_VAR_DECL(expectedfma0, float, 32, 2) [] = {A0 + B0 * E0, A1 + B1 * E0};
++VECT_VAR_DECL(expectedfma1, float, 32, 2) [] = {A2 + B2 * E1, A3 + B3 * E1};
++VECT_VAR_DECL(expectedfma2, float, 32, 2) [] = {A4 + B4 * E2, A5 + B5 * E2};
++VECT_VAR_DECL(expectedfma3, float, 32, 2) [] = {A6 + B6 * E3, A7 + B7 * E3};
++
++hfloat32_t * VECT_VAR (expectedfms0_static, hfloat, 32, 2) =
++ (hfloat32_t *) VECT_VAR (expectedfms0, float, 32, 2);
++hfloat32_t * VECT_VAR (expectedfms1_static, hfloat, 32, 2) =
++ (hfloat32_t *) VECT_VAR (expectedfms1, float, 32, 2);
++hfloat32_t * VECT_VAR (expectedfms2_static, hfloat, 32, 2) =
++ (hfloat32_t *) VECT_VAR (expectedfms2, float, 32, 2);
++hfloat32_t * VECT_VAR (expectedfms3_static, hfloat, 32, 2) =
++ (hfloat32_t *) VECT_VAR (expectedfms3, float, 32, 2);
++hfloat32_t * VECT_VAR (expectedfma0_static, hfloat, 32, 2) =
++ (hfloat32_t *) VECT_VAR (expectedfma0, float, 32, 2);
++hfloat32_t * VECT_VAR (expectedfma1_static, hfloat, 32, 2) =
++ (hfloat32_t *) VECT_VAR (expectedfma1, float, 32, 2);
++hfloat32_t * VECT_VAR (expectedfma2_static, hfloat, 32, 2) =
++ (hfloat32_t *) VECT_VAR (expectedfma2, float, 32, 2);
++hfloat32_t * VECT_VAR (expectedfma3_static, hfloat, 32, 2) =
++ (hfloat32_t *) VECT_VAR (expectedfma3, float, 32, 2);
++
++
++VECT_VAR_DECL(expectedfms0, float, 32, 4) [] = {A0 + -B0 * E0, A1 + -B1 * E0,
++ A2 + -B2 * E0, A3 + -B3 * E0};
++VECT_VAR_DECL(expectedfms1, float, 32, 4) [] = {A4 + -B4 * E1, A5 + -B5 * E1,
++ A6 + -B6 * E1, A7 + -B7 * E1};
++VECT_VAR_DECL(expectedfms2, float, 32, 4) [] = {A0 + -B0 * E2, A2 + -B2 * E2,
++ A4 + -B4 * E2, A6 + -B6 * E2};
++VECT_VAR_DECL(expectedfms3, float, 32, 4) [] = {A1 + -B1 * E3, A3 + -B3 * E3,
++ A5 + -B5 * E3, A7 + -B7 * E3};
++VECT_VAR_DECL(expectedfma0, float, 32, 4) [] = {A0 + B0 * E0, A1 + B1 * E0,
++ A2 + B2 * E0, A3 + B3 * E0};
++VECT_VAR_DECL(expectedfma1, float, 32, 4) [] = {A4 + B4 * E1, A5 + B5 * E1,
++ A6 + B6 * E1, A7 + B7 * E1};
++VECT_VAR_DECL(expectedfma2, float, 32, 4) [] = {A0 + B0 * E2, A2 + B2 * E2,
++ A4 + B4 * E2, A6 + B6 * E2};
++VECT_VAR_DECL(expectedfma3, float, 32, 4) [] = {A1 + B1 * E3, A3 + B3 * E3,
++ A5 + B5 * E3, A7 + B7 * E3};
++
++hfloat32_t * VECT_VAR (expectedfms0_static, hfloat, 32, 4) =
++ (hfloat32_t *) VECT_VAR (expectedfms0, float, 32, 4);
++hfloat32_t * VECT_VAR (expectedfms1_static, hfloat, 32, 4) =
++ (hfloat32_t *) VECT_VAR (expectedfms1, float, 32, 4);
++hfloat32_t * VECT_VAR (expectedfms2_static, hfloat, 32, 4) =
++ (hfloat32_t *) VECT_VAR (expectedfms2, float, 32, 4);
++hfloat32_t * VECT_VAR (expectedfms3_static, hfloat, 32, 4) =
++ (hfloat32_t *) VECT_VAR (expectedfms3, float, 32, 4);
++hfloat32_t * VECT_VAR (expectedfma0_static, hfloat, 32, 4) =
++ (hfloat32_t *) VECT_VAR (expectedfma0, float, 32, 4);
++hfloat32_t * VECT_VAR (expectedfma1_static, hfloat, 32, 4) =
++ (hfloat32_t *) VECT_VAR (expectedfma1, float, 32, 4);
++hfloat32_t * VECT_VAR (expectedfma2_static, hfloat, 32, 4) =
++ (hfloat32_t *) VECT_VAR (expectedfma2, float, 32, 4);
++hfloat32_t * VECT_VAR (expectedfma3_static, hfloat, 32, 4) =
++ (hfloat32_t *) VECT_VAR (expectedfma3, float, 32, 4);
++
++VECT_VAR_DECL(expectedfms0, float, 64, 2) [] = {DA0 + -DB0 * DE0,
++ DA1 + -DB1 * DE0};
++VECT_VAR_DECL(expectedfms1, float, 64, 2) [] = {DA2 + -DB2 * DE1,
++ DA3 + -DB3 * DE1};
++VECT_VAR_DECL(expectedfms2, float, 64, 2) [] = {DA4 + -DB4 * DE2,
++ DA5 + -DB5 * DE2};
++VECT_VAR_DECL(expectedfms3, float, 64, 2) [] = {DA6 + -DB6 * DE3,
++ DA7 + -DB7 * DE3};
++VECT_VAR_DECL(expectedfma0, float, 64, 2) [] = {DA0 + DB0 * DE0,
++ DA1 + DB1 * DE0};
++VECT_VAR_DECL(expectedfma1, float, 64, 2) [] = {DA2 + DB2 * DE1,
++ DA3 + DB3 * DE1};
++VECT_VAR_DECL(expectedfma2, float, 64, 2) [] = {DA4 + DB4 * DE2,
++ DA5 + DB5 * DE2};
++VECT_VAR_DECL(expectedfma3, float, 64, 2) [] = {DA6 + DB6 * DE3,
++ DA7 + DB7 * DE3};
++hfloat64_t * VECT_VAR (expectedfms0_static, hfloat, 64, 2) =
++ (hfloat64_t *) VECT_VAR (expectedfms0, float, 64, 2);
++hfloat64_t * VECT_VAR (expectedfms1_static, hfloat, 64, 2) =
++ (hfloat64_t *) VECT_VAR (expectedfms1, float, 64, 2);
++hfloat64_t * VECT_VAR (expectedfms2_static, hfloat, 64, 2) =
++ (hfloat64_t *) VECT_VAR (expectedfms2, float, 64, 2);
++hfloat64_t * VECT_VAR (expectedfms3_static, hfloat, 64, 2) =
++ (hfloat64_t *) VECT_VAR (expectedfms3, float, 64, 2);
++hfloat64_t * VECT_VAR (expectedfma0_static, hfloat, 64, 2) =
++ (hfloat64_t *) VECT_VAR (expectedfma0, float, 64, 2);
++hfloat64_t * VECT_VAR (expectedfma1_static, hfloat, 64, 2) =
++ (hfloat64_t *) VECT_VAR (expectedfma1, float, 64, 2);
++hfloat64_t * VECT_VAR (expectedfma2_static, hfloat, 64, 2) =
++ (hfloat64_t *) VECT_VAR (expectedfma2, float, 64, 2);
++hfloat64_t * VECT_VAR (expectedfma3_static, hfloat, 64, 2) =
++ (hfloat64_t *) VECT_VAR (expectedfma3, float, 64, 2);
++
++VECT_VAR_DECL(expectedfms0, float, 64, 1) [] = {DA0 + -DB0 * DE0};
++VECT_VAR_DECL(expectedfms1, float, 64, 1) [] = {DA2 + -DB2 * DE1};
++VECT_VAR_DECL(expectedfms2, float, 64, 1) [] = {DA4 + -DB4 * DE2};
++VECT_VAR_DECL(expectedfms3, float, 64, 1) [] = {DA6 + -DB6 * DE3};
++VECT_VAR_DECL(expectedfma0, float, 64, 1) [] = {DA0 + DB0 * DE0};
++VECT_VAR_DECL(expectedfma1, float, 64, 1) [] = {DA2 + DB2 * DE1};
++VECT_VAR_DECL(expectedfma2, float, 64, 1) [] = {DA4 + DB4 * DE2};
++VECT_VAR_DECL(expectedfma3, float, 64, 1) [] = {DA6 + DB6 * DE3};
++
++hfloat64_t * VECT_VAR (expectedfms0_static, hfloat, 64, 1) =
++ (hfloat64_t *) VECT_VAR (expectedfms0, float, 64, 1);
++hfloat64_t * VECT_VAR (expectedfms1_static, hfloat, 64, 1) =
++ (hfloat64_t *) VECT_VAR (expectedfms1, float, 64, 1);
++hfloat64_t * VECT_VAR (expectedfms2_static, hfloat, 64, 1) =
++ (hfloat64_t *) VECT_VAR (expectedfms2, float, 64, 1);
++hfloat64_t * VECT_VAR (expectedfms3_static, hfloat, 64, 1) =
++ (hfloat64_t *) VECT_VAR (expectedfms3, float, 64, 1);
++hfloat64_t * VECT_VAR (expectedfma0_static, hfloat, 64, 1) =
++ (hfloat64_t *) VECT_VAR (expectedfma0, float, 64, 1);
++hfloat64_t * VECT_VAR (expectedfma1_static, hfloat, 64, 1) =
++ (hfloat64_t *) VECT_VAR (expectedfma1, float, 64, 1);
++hfloat64_t * VECT_VAR (expectedfma2_static, hfloat, 64, 1) =
++ (hfloat64_t *) VECT_VAR (expectedfma2, float, 64, 1);
++hfloat64_t * VECT_VAR (expectedfma3_static, hfloat, 64, 1) =
++ (hfloat64_t *) VECT_VAR (expectedfma3, float, 64, 1);
++
++void exec_vfma_vfms_n (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VFMS_VFMA_N (FP32)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 32, 2);
++ DECL_VARIABLE(vsrc_2, float, 32, 2);
++ VECT_VAR_DECL (buf_src_1, float, 32, 2) [] = {A0, A1};
++ VECT_VAR_DECL (buf_src_2, float, 32, 2) [] = {B0, B1};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 32, 2);
++ VLOAD (vsrc_2, buf_src_2, , float, f, 32, 2);
++ DECL_VARIABLE (vector_res, float, 32, 2) =
++ vfms_n_f32 (VECT_VAR (vsrc_1, float, 32, 2),
++ VECT_VAR (vsrc_2, float, 32, 2), elem0);
++ vst1_f32 (VECT_VAR (result, float, 32, 2),
++ VECT_VAR (vector_res, float, 32, 2));
++ CHECK_FP (TEST_MSG, float, 32, 2, PRIx16, expectedfms0_static, "");
++ VECT_VAR (vector_res, float, 32, 2) =
++ vfma_n_f32 (VECT_VAR (vsrc_1, float, 32, 2),
++ VECT_VAR (vsrc_2, float, 32, 2), elem0);
++ vst1_f32 (VECT_VAR (result, float, 32, 2),
++ VECT_VAR (vector_res, float, 32, 2));
++ CHECK_FP (TEST_MSG, float, 32, 2, PRIx16, expectedfma0_static, "");
++
++ VECT_VAR_DECL (buf_src_3, float, 32, 2) [] = {A2, A3};
++ VECT_VAR_DECL (buf_src_4, float, 32, 2) [] = {B2, B3};
++ VLOAD (vsrc_1, buf_src_3, , float, f, 32, 2);
++ VLOAD (vsrc_2, buf_src_4, , float, f, 32, 2);
++ VECT_VAR (vector_res, float, 32, 2) =
++ vfms_n_f32 (VECT_VAR (vsrc_1, float, 32, 2),
++ VECT_VAR (vsrc_2, float, 32, 2), elem1);
++ vst1_f32 (VECT_VAR (result, float, 32, 2),
++ VECT_VAR (vector_res, float, 32, 2));
++ CHECK_FP (TEST_MSG, float, 32, 2, PRIx16, expectedfms1_static, "");
++ VECT_VAR (vector_res, float, 32, 2) =
++ vfma_n_f32 (VECT_VAR (vsrc_1, float, 32, 2),
++ VECT_VAR (vsrc_2, float, 32, 2), elem1);
++ vst1_f32 (VECT_VAR (result, float, 32, 2),
++ VECT_VAR (vector_res, float, 32, 2));
++ CHECK_FP (TEST_MSG, float, 32, 2, PRIx16, expectedfma1_static, "");
++
++ VECT_VAR_DECL (buf_src_5, float, 32, 2) [] = {A4, A5};
++ VECT_VAR_DECL (buf_src_6, float, 32, 2) [] = {B4, B5};
++ VLOAD (vsrc_1, buf_src_5, , float, f, 32, 2);
++ VLOAD (vsrc_2, buf_src_6, , float, f, 32, 2);
++ VECT_VAR (vector_res, float, 32, 2) =
++ vfms_n_f32 (VECT_VAR (vsrc_1, float, 32, 2),
++ VECT_VAR (vsrc_2, float, 32, 2), elem2);
++ vst1_f32 (VECT_VAR (result, float, 32, 2),
++ VECT_VAR (vector_res, float, 32, 2));
++ CHECK_FP (TEST_MSG, float, 32, 2, PRIx16, expectedfms2_static, "");
++ VECT_VAR (vector_res, float, 32, 2) =
++ vfma_n_f32 (VECT_VAR (vsrc_1, float, 32, 2),
++ VECT_VAR (vsrc_2, float, 32, 2), elem2);
++ vst1_f32 (VECT_VAR (result, float, 32, 2),
++ VECT_VAR (vector_res, float, 32, 2));
++ CHECK_FP (TEST_MSG, float, 32, 2, PRIx16, expectedfma2_static, "");
++
++ VECT_VAR_DECL (buf_src_7, float, 32, 2) [] = {A6, A7};
++ VECT_VAR_DECL (buf_src_8, float, 32, 2) [] = {B6, B7};
++ VLOAD (vsrc_1, buf_src_7, , float, f, 32, 2);
++ VLOAD (vsrc_2, buf_src_8, , float, f, 32, 2);
++ VECT_VAR (vector_res, float, 32, 2) =
++ vfms_n_f32 (VECT_VAR (vsrc_1, float, 32, 2),
++ VECT_VAR (vsrc_2, float, 32, 2), elem3);
++ vst1_f32 (VECT_VAR (result, float, 32, 2),
++ VECT_VAR (vector_res, float, 32, 2));
++ CHECK_FP (TEST_MSG, float, 32, 2, PRIx16, expectedfms3_static, "");
++ VECT_VAR (vector_res, float, 32, 2) =
++ vfma_n_f32 (VECT_VAR (vsrc_1, float, 32, 2),
++ VECT_VAR (vsrc_2, float, 32, 2), elem3);
++ vst1_f32 (VECT_VAR (result, float, 32, 2),
++ VECT_VAR (vector_res, float, 32, 2));
++ CHECK_FP (TEST_MSG, float, 32, 2, PRIx16, expectedfma3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMSQ_VFMAQ_N (FP32)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 32, 4);
++ DECL_VARIABLE(vsrc_2, float, 32, 4);
++ VECT_VAR_DECL (buf_src_1, float, 32, 4) [] = {A0, A1, A2, A3};
++ VECT_VAR_DECL (buf_src_2, float, 32, 4) [] = {B0, B1, B2, B3};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 32, 4);
++ VLOAD (vsrc_2, buf_src_2, q, float, f, 32, 4);
++ DECL_VARIABLE (vector_res, float, 32, 4) =
++ vfmsq_n_f32 (VECT_VAR (vsrc_1, float, 32, 4),
++ VECT_VAR (vsrc_2, float, 32, 4), elem0);
++ vst1q_f32 (VECT_VAR (result, float, 32, 4),
++ VECT_VAR (vector_res, float, 32, 4));
++ CHECK_FP (TEST_MSG, float, 32, 4, PRIx16, expectedfms0_static, "");
++ VECT_VAR (vector_res, float, 32, 4) =
++ vfmaq_n_f32 (VECT_VAR (vsrc_1, float, 32, 4),
++ VECT_VAR (vsrc_2, float, 32, 4), elem0);
++ vst1q_f32 (VECT_VAR (result, float, 32, 4),
++ VECT_VAR (vector_res, float, 32, 4));
++ CHECK_FP (TEST_MSG, float, 32, 4, PRIx16, expectedfma0_static, "");
++
++ VECT_VAR_DECL (buf_src_3, float, 32, 4) [] = {A4, A5, A6, A7};
++ VECT_VAR_DECL (buf_src_4, float, 32, 4) [] = {B4, B5, B6, B7};
++ VLOAD (vsrc_1, buf_src_3, q, float, f, 32, 4);
++ VLOAD (vsrc_2, buf_src_4, q, float, f, 32, 4);
++ VECT_VAR (vector_res, float, 32, 4) =
++ vfmsq_n_f32 (VECT_VAR (vsrc_1, float, 32, 4),
++ VECT_VAR (vsrc_2, float, 32, 4), elem1);
++ vst1q_f32 (VECT_VAR (result, float, 32, 4),
++ VECT_VAR (vector_res, float, 32, 4));
++ CHECK_FP (TEST_MSG, float, 32, 4, PRIx16, expectedfms1_static, "");
++ VECT_VAR (vector_res, float, 32, 4) =
++ vfmaq_n_f32 (VECT_VAR (vsrc_1, float, 32, 4),
++ VECT_VAR (vsrc_2, float, 32, 4), elem1);
++ vst1q_f32 (VECT_VAR (result, float, 32, 4),
++ VECT_VAR (vector_res, float, 32, 4));
++ CHECK_FP (TEST_MSG, float, 32, 4, PRIx16, expectedfma1_static, "");
++
++ VECT_VAR_DECL (buf_src_5, float, 32, 4) [] = {A0, A2, A4, A6};
++ VECT_VAR_DECL (buf_src_6, float, 32, 4) [] = {B0, B2, B4, B6};
++ VLOAD (vsrc_1, buf_src_5, q, float, f, 32, 4);
++ VLOAD (vsrc_2, buf_src_6, q, float, f, 32, 4);
++ VECT_VAR (vector_res, float, 32, 4) =
++ vfmsq_n_f32 (VECT_VAR (vsrc_1, float, 32, 4),
++ VECT_VAR (vsrc_2, float, 32, 4), elem2);
++ vst1q_f32 (VECT_VAR (result, float, 32, 4),
++ VECT_VAR (vector_res, float, 32, 4));
++ CHECK_FP (TEST_MSG, float, 32, 4, PRIx16, expectedfms2_static, "");
++ VECT_VAR (vector_res, float, 32, 4) =
++ vfmaq_n_f32 (VECT_VAR (vsrc_1, float, 32, 4),
++ VECT_VAR (vsrc_2, float, 32, 4), elem2);
++ vst1q_f32 (VECT_VAR (result, float, 32, 4),
++ VECT_VAR (vector_res, float, 32, 4));
++ CHECK_FP (TEST_MSG, float, 32, 4, PRIx16, expectedfma2_static, "");
++
++ VECT_VAR_DECL (buf_src_7, float, 32, 4) [] = {A1, A3, A5, A7};
++ VECT_VAR_DECL (buf_src_8, float, 32, 4) [] = {B1, B3, B5, B7};
++ VLOAD (vsrc_1, buf_src_7, q, float, f, 32, 4);
++ VLOAD (vsrc_2, buf_src_8, q, float, f, 32, 4);
++ VECT_VAR (vector_res, float, 32, 4) =
++ vfmsq_n_f32 (VECT_VAR (vsrc_1, float, 32, 4),
++ VECT_VAR (vsrc_2, float, 32, 4), elem3);
++ vst1q_f32 (VECT_VAR (result, float, 32, 4),
++ VECT_VAR (vector_res, float, 32, 4));
++ CHECK_FP (TEST_MSG, float, 32, 4, PRIx16, expectedfms3_static, "");
++ VECT_VAR (vector_res, float, 32, 4) =
++ vfmaq_n_f32 (VECT_VAR (vsrc_1, float, 32, 4),
++ VECT_VAR (vsrc_2, float, 32, 4), elem3);
++ vst1q_f32 (VECT_VAR (result, float, 32, 4),
++ VECT_VAR (vector_res, float, 32, 4));
++ CHECK_FP (TEST_MSG, float, 32, 4, PRIx16, expectedfma3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMSQ_VFMAQ_N (FP64)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 64, 2);
++ DECL_VARIABLE(vsrc_2, float, 64, 2);
++ VECT_VAR_DECL (buf_src_1, float, 64, 2) [] = {DA0, DA1};
++ VECT_VAR_DECL (buf_src_2, float, 64, 2) [] = {DB0, DB1};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 64, 2);
++ VLOAD (vsrc_2, buf_src_2, q, float, f, 64, 2);
++ DECL_VARIABLE (vector_res, float, 64, 2) =
++ vfmsq_n_f64 (VECT_VAR (vsrc_1, float, 64, 2),
++ VECT_VAR (vsrc_2, float, 64, 2), delem0);
++ vst1q_f64 (VECT_VAR (result, float, 64, 2),
++ VECT_VAR (vector_res, float, 64, 2));
++ CHECK_FP (TEST_MSG, float, 64, 2, PRIx64, expectedfms0_static, "");
++ VECT_VAR (vector_res, float, 64, 2) =
++ vfmaq_n_f64 (VECT_VAR (vsrc_1, float, 64, 2),
++ VECT_VAR (vsrc_2, float, 64, 2), delem0);
++ vst1q_f64 (VECT_VAR (result, float, 64, 2),
++ VECT_VAR (vector_res, float, 64, 2));
++ CHECK_FP (TEST_MSG, float, 64, 2, PRIx64, expectedfma0_static, "");
++
++ VECT_VAR_DECL (buf_src_3, float, 64, 2) [] = {DA2, DA3};
++ VECT_VAR_DECL (buf_src_4, float, 64, 2) [] = {DB2, DB3};
++ VLOAD (vsrc_1, buf_src_3, q, float, f, 64, 2);
++ VLOAD (vsrc_2, buf_src_4, q, float, f, 64, 2);
++ VECT_VAR (vector_res, float, 64, 2) =
++ vfmsq_n_f64 (VECT_VAR (vsrc_1, float, 64, 2),
++ VECT_VAR (vsrc_2, float, 64, 2), delem1);
++ vst1q_f64 (VECT_VAR (result, float, 64, 2),
++ VECT_VAR (vector_res, float, 64, 2));
++ CHECK_FP (TEST_MSG, float, 64, 2, PRIx64, expectedfms1_static, "");
++ VECT_VAR (vector_res, float, 64, 2) =
++ vfmaq_n_f64 (VECT_VAR (vsrc_1, float, 64, 2),
++ VECT_VAR (vsrc_2, float, 64, 2), delem1);
++ vst1q_f64 (VECT_VAR (result, float, 64, 2),
++ VECT_VAR (vector_res, float, 64, 2));
++ CHECK_FP (TEST_MSG, float, 64, 2, PRIx64, expectedfma1_static, "");
++
++ VECT_VAR_DECL (buf_src_5, float, 64, 2) [] = {DA4, DA5};
++ VECT_VAR_DECL (buf_src_6, float, 64, 2) [] = {DB4, DB5};
++ VLOAD (vsrc_1, buf_src_5, q, float, f, 64, 2);
++ VLOAD (vsrc_2, buf_src_6, q, float, f, 64, 2);
++ VECT_VAR (vector_res, float, 64, 2) =
++ vfmsq_n_f64 (VECT_VAR (vsrc_1, float, 64, 2),
++ VECT_VAR (vsrc_2, float, 64, 2), delem2);
++ vst1q_f64 (VECT_VAR (result, float, 64, 2),
++ VECT_VAR (vector_res, float, 64, 2));
++ CHECK_FP (TEST_MSG, float, 64, 2, PRIx64, expectedfms2_static, "");
++ VECT_VAR (vector_res, float, 64, 2) =
++ vfmaq_n_f64 (VECT_VAR (vsrc_1, float, 64, 2),
++ VECT_VAR (vsrc_2, float, 64, 2), delem2);
++ vst1q_f64 (VECT_VAR (result, float, 64, 2),
++ VECT_VAR (vector_res, float, 64, 2));
++ CHECK_FP (TEST_MSG, float, 64, 2, PRIx64, expectedfma2_static, "");
++
++ VECT_VAR_DECL (buf_src_7, float, 64, 2) [] = {DA6, DA7};
++ VECT_VAR_DECL (buf_src_8, float, 64, 2) [] = {DB6, DB7};
++ VLOAD (vsrc_1, buf_src_7, q, float, f, 64, 2);
++ VLOAD (vsrc_2, buf_src_8, q, float, f, 64, 2);
++ VECT_VAR (vector_res, float, 64, 2) =
++ vfmsq_n_f64 (VECT_VAR (vsrc_1, float, 64, 2),
++ VECT_VAR (vsrc_2, float, 64, 2), delem3);
++ vst1q_f64 (VECT_VAR (result, float, 64, 2),
++ VECT_VAR (vector_res, float, 64, 2));
++ CHECK_FP (TEST_MSG, float, 64, 2, PRIx64, expectedfms3_static, "");
++ VECT_VAR (vector_res, float, 64, 2) =
++ vfmaq_n_f64 (VECT_VAR (vsrc_1, float, 64, 2),
++ VECT_VAR (vsrc_2, float, 64, 2), delem3);
++ vst1q_f64 (VECT_VAR (result, float, 64, 2),
++ VECT_VAR (vector_res, float, 64, 2));
++ CHECK_FP (TEST_MSG, float, 64, 2, PRIx64, expectedfma3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VFMS_VFMA_N (FP64)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 64, 1);
++ DECL_VARIABLE(vsrc_2, float, 64, 1);
++ VECT_VAR_DECL (buf_src_1, float, 64, 1) [] = {DA0};
++ VECT_VAR_DECL (buf_src_2, float, 64, 1) [] = {DB0};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 64, 1);
++ VLOAD (vsrc_2, buf_src_2, , float, f, 64, 1);
++ DECL_VARIABLE (vector_res, float, 64, 1) =
++ vfms_n_f64 (VECT_VAR (vsrc_1, float, 64, 1),
++ VECT_VAR (vsrc_2, float, 64, 1), delem0);
++ vst1_f64 (VECT_VAR (result, float, 64, 1),
++ VECT_VAR (vector_res, float, 64, 1));
++ CHECK_FP (TEST_MSG, float, 64, 1, PRIx64, expectedfms0_static, "");
++ VECT_VAR (vector_res, float, 64, 1) =
++ vfma_n_f64 (VECT_VAR (vsrc_1, float, 64, 1),
++ VECT_VAR (vsrc_2, float, 64, 1), delem0);
++ vst1_f64 (VECT_VAR (result, float, 64, 1),
++ VECT_VAR (vector_res, float, 64, 1));
++ CHECK_FP (TEST_MSG, float, 64, 1, PRIx64, expectedfma0_static, "");
++
++ VECT_VAR_DECL (buf_src_3, float, 64, 1) [] = {DA2};
++ VECT_VAR_DECL (buf_src_4, float, 64, 1) [] = {DB2};
++ VLOAD (vsrc_1, buf_src_3, , float, f, 64, 1);
++ VLOAD (vsrc_2, buf_src_4, , float, f, 64, 1);
++ VECT_VAR (vector_res, float, 64, 1) =
++ vfms_n_f64 (VECT_VAR (vsrc_1, float, 64, 1),
++ VECT_VAR (vsrc_2, float, 64, 1), delem1);
++ vst1_f64 (VECT_VAR (result, float, 64, 1),
++ VECT_VAR (vector_res, float, 64, 1));
++ CHECK_FP (TEST_MSG, float, 64, 1, PRIx64, expectedfms1_static, "");
++ VECT_VAR (vector_res, float, 64, 1) =
++ vfma_n_f64 (VECT_VAR (vsrc_1, float, 64, 1),
++ VECT_VAR (vsrc_2, float, 64, 1), delem1);
++ vst1_f64 (VECT_VAR (result, float, 64, 1),
++ VECT_VAR (vector_res, float, 64, 1));
++ CHECK_FP (TEST_MSG, float, 64, 1, PRIx64, expectedfma1_static, "");
++
++ VECT_VAR_DECL (buf_src_5, float, 64, 1) [] = {DA4};
++ VECT_VAR_DECL (buf_src_6, float, 64, 1) [] = {DB4};
++ VLOAD (vsrc_1, buf_src_5, , float, f, 64, 1);
++ VLOAD (vsrc_2, buf_src_6, , float, f, 64, 1);
++ VECT_VAR (vector_res, float, 64, 1) =
++ vfms_n_f64 (VECT_VAR (vsrc_1, float, 64, 1),
++ VECT_VAR (vsrc_2, float, 64, 1), delem2);
++ vst1_f64 (VECT_VAR (result, float, 64, 1),
++ VECT_VAR (vector_res, float, 64, 1));
++ CHECK_FP (TEST_MSG, float, 64, 1, PRIx64, expectedfms2_static, "");
++ VECT_VAR (vector_res, float, 64, 1) =
++ vfma_n_f64 (VECT_VAR (vsrc_1, float, 64, 1),
++ VECT_VAR (vsrc_2, float, 64, 1), delem2);
++ vst1_f64 (VECT_VAR (result, float, 64, 1),
++ VECT_VAR (vector_res, float, 64, 1));
++ CHECK_FP (TEST_MSG, float, 64, 1, PRIx64, expectedfma2_static, "");
++
++ VECT_VAR_DECL (buf_src_7, float, 64, 1) [] = {DA6};
++ VECT_VAR_DECL (buf_src_8, float, 64, 1) [] = {DB6};
++ VLOAD (vsrc_1, buf_src_7, , float, f, 64, 1);
++ VLOAD (vsrc_2, buf_src_8, , float, f, 64, 1);
++ VECT_VAR (vector_res, float, 64, 1) =
++ vfms_n_f64 (VECT_VAR (vsrc_1, float, 64, 1),
++ VECT_VAR (vsrc_2, float, 64, 1), delem3);
++ vst1_f64 (VECT_VAR (result, float, 64, 1),
++ VECT_VAR (vector_res, float, 64, 1));
++ CHECK_FP (TEST_MSG, float, 64, 1, PRIx64, expectedfms3_static, "");
++ VECT_VAR (vector_res, float, 64, 1) =
++ vfma_n_f64 (VECT_VAR (vsrc_1, float, 64, 1),
++ VECT_VAR (vsrc_2, float, 64, 1), delem3);
++ vst1_f64 (VECT_VAR (result, float, 64, 1),
++ VECT_VAR (vector_res, float, 64, 1));
++ CHECK_FP (TEST_MSG, float, 64, 1, PRIx64, expectedfma3_static, "");
++}
++#endif
++
++int
++main (void)
++{
++#if defined(__aarch64__) && defined(__ARM_FEATURE_FMA)
++ exec_vfma_vfms_n ();
++#endif
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vfmsh_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x42af /* 3.341797 */,
++ 0x5043 /* 34.093750 */,
++ 0xccd2 /* -19.281250 */,
++ 0x3712 /* 0.441895 */,
++ 0x3acc /* 0.849609 */,
++ 0x4848 /* 8.562500 */,
++ 0xcc43 /* -17.046875 */,
++ 0xd65c /* -101.750000 */,
++ 0x4185 /* 2.759766 */,
++ 0xcd39 /* -20.890625 */,
++ 0xd45b /* -69.687500 */,
++ 0x5241 /* 50.031250 */,
++ 0xc675 /* -6.457031 */,
++ 0x4d07 /* 20.109375 */,
++ 0x7c00 /* inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VFMSH_F16"
++#define INSN_NAME vfmsh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "ternary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_high.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_high.c
+@@ -63,8 +63,8 @@ void exec_vget_high (void)
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
+ CHECK(TEST_MSG, uint, 64, 1, PRIx64, expected, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected, "");
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, "");
+ }
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_lane.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_lane.c
+@@ -13,6 +13,7 @@ uint32_t expected_u32 = 0xfffffff1;
+ uint64_t expected_u64 = 0xfffffffffffffff0;
+ poly8_t expected_p8 = 0xf6;
+ poly16_t expected_p16 = 0xfff2;
++hfloat16_t expected_f16 = 0xcb80;
+ hfloat32_t expected_f32 = 0xc1700000;
+
+ int8_t expectedq_s8 = 0xff;
+@@ -25,6 +26,7 @@ uint32_t expectedq_u32 = 0xfffffff2;
+ uint64_t expectedq_u64 = 0xfffffffffffffff1;
+ poly8_t expectedq_p8 = 0xfe;
+ poly16_t expectedq_p16 = 0xfff6;
++hfloat16_t expectedq_f16 = 0xca80;
+ hfloat32_t expectedq_f32 = 0xc1500000;
+
+ int error_found = 0;
+@@ -52,6 +54,12 @@ void exec_vget_lane (void)
+ uint32_t var_int32;
+ float32_t var_float32;
+ } var_int32_float32;
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ union {
++ uint16_t var_int16;
++ float16_t var_float16;
++ } var_int16_float16;
++#endif
+
+ #define TEST_VGET_LANE_FP(Q, T1, T2, W, N, L) \
+ VAR(var, T1, W) = vget##Q##_lane_##T2##W(VECT_VAR(vector, T1, W, N), L); \
+@@ -81,10 +89,17 @@ void exec_vget_lane (void)
+ VAR_DECL(var, uint, 64);
+ VAR_DECL(var, poly, 8);
+ VAR_DECL(var, poly, 16);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ VAR_DECL(var, float, 16);
++#endif
+ VAR_DECL(var, float, 32);
+
+ /* Initialize input values. */
+ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+ VLOAD(vector, buffer, q, float, f, 32, 4);
+
+@@ -99,6 +114,9 @@ void exec_vget_lane (void)
+ TEST_VGET_LANE(, uint, u, 64, 1, 0);
+ TEST_VGET_LANE(, poly, p, 8, 8, 6);
+ TEST_VGET_LANE(, poly, p, 16, 4, 2);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VGET_LANE_FP(, float, f, 16, 4, 1);
++#endif
+ TEST_VGET_LANE_FP(, float, f, 32, 2, 1);
+
+ TEST_VGET_LANE(q, int, s, 8, 16, 15);
+@@ -111,6 +129,9 @@ void exec_vget_lane (void)
+ TEST_VGET_LANE(q, uint, u, 64, 2, 1);
+ TEST_VGET_LANE(q, poly, p, 8, 16, 14);
+ TEST_VGET_LANE(q, poly, p, 16, 8, 6);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VGET_LANE_FP(q, float, f, 16, 8, 3);
++#endif
+ TEST_VGET_LANE_FP(q, float, f, 32, 4, 3);
+ }
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_low.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_low.c
+@@ -63,8 +63,8 @@ void exec_vget_low (void)
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
+ CHECK(TEST_MSG, uint, 64, 1, PRIx64, expected, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected, "");
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
+ #endif
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld2_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld2_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ float16x4x2_t
+ f_vld2_lane_f16 (float16_t * p, float16x4x2_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld2q_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld2q_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ float16x8x2_t
+ f_vld2q_lane_f16 (float16_t * p, float16x8x2_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld3_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld3_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ float16x4x3_t
+ f_vld3_lane_f16 (float16_t * p, float16x4x3_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld3q_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld3q_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ float16x8x3_t
+ f_vld3q_lane_f16 (float16_t * p, float16x8x3_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld4_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld4_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ float16x4x4_t
+ f_vld4_lane_f16 (float16_t * p, float16x4x4_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld4q_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld4q_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ float16x8x4_t
+ f_vld4q_lane_f16 (float16_t * p, float16x8x4_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vldX.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vldX.c
+@@ -528,8 +528,8 @@ void exec_vldX (void)
+ CHECK(test_name, uint, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, uint, 32, 2, PRIx32, EXPECTED, comment); \
+ CHECK(test_name, uint, 64, 1, PRIx64, EXPECTED, comment); \
+- CHECK(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
+- CHECK(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK_FP(test_name, float, 32, 2, PRIx32, EXPECTED, comment); \
+ \
+ CHECK(test_name, int, 8, 16, PRIx8, EXPECTED, comment); \
+@@ -538,8 +538,8 @@ void exec_vldX (void)
+ CHECK(test_name, uint, 8, 16, PRIx8, EXPECTED, comment); \
+ CHECK(test_name, uint, 16, 8, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, uint, 32, 4, PRIx32, EXPECTED, comment); \
+- CHECK(test_name, poly, 8, 16, PRIx8, EXPECTED, comment); \
+- CHECK(test_name, poly, 16, 8, PRIx16, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 8, 16, PRIx8, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 16, 8, PRIx16, EXPECTED, comment); \
+ CHECK_FP(test_name, float, 32, 4, PRIx32, EXPECTED, comment)
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vldX_dup.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vldX_dup.c
+@@ -270,8 +270,8 @@ void exec_vldX_dup (void)
+ CHECK(test_name, uint, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, uint, 32, 2, PRIx32, EXPECTED, comment); \
+ CHECK(test_name, uint, 64, 1, PRIx64, EXPECTED, comment); \
+- CHECK(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
+- CHECK(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK_FP(test_name, float, 32, 2, PRIx32, EXPECTED, comment)
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vldX_lane.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vldX_lane.c
+@@ -451,14 +451,14 @@ void exec_vldX_lane (void)
+ CHECK(test_name, uint, 8, 8, PRIx8, EXPECTED, comment); \
+ CHECK(test_name, uint, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, uint, 32, 2, PRIx32, EXPECTED, comment); \
+- CHECK(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
+- CHECK(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK_FP(test_name, float, 32, 2, PRIx32, EXPECTED, comment); \
+ CHECK(test_name, int, 16, 8, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, int, 32, 4, PRIx32, EXPECTED, comment); \
+ CHECK(test_name, uint, 16, 8, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, uint, 32, 4, PRIx32, EXPECTED, comment); \
+- CHECK(test_name, poly, 16, 8, PRIx16, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 16, 8, PRIx16, EXPECTED, comment); \
+ CHECK_FP(test_name, float, 32, 4, PRIx32, EXPECTED, comment)
+
+ #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmax.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmax.c
+@@ -7,6 +7,10 @@
+
+ #define HAS_FLOAT_VARIANT
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++#define HAS_FLOAT16_VARIANT
++#endif
++
+ /* Expected results. */
+ VECT_VAR_DECL(expected,int,8,8) [] = { 0xf3, 0xf3, 0xf3, 0xf3,
+ 0xf4, 0xf5, 0xf6, 0xf7 };
+@@ -16,6 +20,9 @@ VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf3, 0xf3, 0xf3, 0xf3,
+ 0xf4, 0xf5, 0xf6, 0xf7 };
+ VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff1, 0xfff1, 0xfff2, 0xfff3 };
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff0, 0xfffffff1 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xcbc0, 0xcb80, 0xcb00, 0xca80 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1780000, 0xc1700000 };
+ VECT_VAR_DECL(expected,int,8,16) [] = { 0xf4, 0xf4, 0xf4, 0xf4,
+ 0xf4, 0xf5, 0xf6, 0xf7,
+@@ -33,10 +40,36 @@ VECT_VAR_DECL(expected,uint,16,8) [] = { 0xfff2, 0xfff2, 0xfff2, 0xfff3,
+ 0xfff4, 0xfff5, 0xfff6, 0xfff7 };
+ VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffffff1, 0xfffffff1,
+ 0xfffffff2, 0xfffffff3 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xcb40, 0xcb40, 0xcb00, 0xca80,
++ 0xca00, 0xc980, 0xc900, 0xc880 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1680000, 0xc1680000,
+ 0xc1600000, 0xc1500000 };
+
+ /* Expected results with special FP values. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_nan, hfloat, 16, 8) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++VECT_VAR_DECL(expected_mnan, hfloat, 16, 8) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++VECT_VAR_DECL(expected_inf, hfloat, 16, 8) [] = { 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00 };
++VECT_VAR_DECL(expected_minf, hfloat, 16, 8) [] = { 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00 };
++VECT_VAR_DECL(expected_zero1, hfloat, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_zero2, hfloat, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++#endif
+ VECT_VAR_DECL(expected_nan,hfloat,32,4) [] = { 0x7fc00000, 0x7fc00000,
+ 0x7fc00000, 0x7fc00000 };
+ VECT_VAR_DECL(expected_mnan,hfloat,32,4) [] = { 0x7fc00000, 0x7fc00000,
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmaxh_f16_1.c
+@@ -0,0 +1,34 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++#define A 123.4
++#define B -567.8
++#define C -34.8
++#define D 1024
++#define E 663.1
++#define F 169.1
++#define G -4.8
++#define H 77
++
++float16_t input_1[] = { A, B, C, D };
++float16_t input_2[] = { E, F, G, H };
++float16_t expected[] = { E, F, G, D };
++
++#define TEST_MSG "VMAXH_F16"
++#define INSN_NAME vmaxh_f16
++
++#define INPUT_1 input_1
++#define INPUT_2 input_2
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmaxnm_1.c
+@@ -0,0 +1,47 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define INSN_NAME vmaxnm
++#define TEST_MSG "VMAXNM/VMAXNMQ"
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++#define HAS_FLOAT16_VARIANT
++#endif
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xcbc0, 0xcb80, 0xcb00, 0xca80 };
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xcb40, 0xcb40, 0xcb00, 0xca80,
++ 0xca00, 0xc980, 0xc900, 0xc880 };
++#endif
++
++/* Expected results with special FP values. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_nan, hfloat, 16, 8) [] = { 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00 };
++VECT_VAR_DECL(expected_mnan, hfloat, 16, 8) [] = { 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00 };
++VECT_VAR_DECL(expected_inf, hfloat, 16, 8) [] = { 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00 };
++VECT_VAR_DECL(expected_minf, hfloat, 16, 8) [] = { 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00 };
++VECT_VAR_DECL(expected_zero1, hfloat, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_zero2, hfloat, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++#endif
++
++#include "binary_op_float.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmaxnmh_f16_1.c
+@@ -0,0 +1,42 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++#define INFF __builtin_inf ()
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0x5640 /* 100.000000 */,
++ 0x4f80 /* 30.000000 */,
++ 0x3666 /* 0.399902 */,
++ 0x3800 /* 0.500000 */,
++ 0x3d52 /* 1.330078 */,
++ 0xc64d /* -6.300781 */,
++ 0x4d00 /* 20.000000 */,
++ 0x355d /* 0.335205 */,
++ 0x409a /* 2.300781 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4a91 /* 13.132812 */,
++ 0x34f6 /* 0.310059 */,
++ 0x4d00 /* 20.000000 */,
++ 0x7c00 /* inf */,
++ 0x7c00 /* inf */
++};
++
++#define TEST_MSG "VMAXNMH_F16"
++#define INSN_NAME vmaxnmh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmaxnmv_f16_1.c
+@@ -0,0 +1,131 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A0 FP16_C (34.8)
++#define B0 FP16_C (__builtin_nanf (""))
++#define C0 FP16_C (-__builtin_nanf (""))
++#define D0 FP16_C (0.0)
++
++#define A1 FP16_C (1025.8)
++#define B1 FP16_C (13.4)
++#define C1 FP16_C (__builtin_nanf (""))
++#define D1 FP16_C (10)
++#define E1 FP16_C (-0.0)
++#define F1 FP16_C (-__builtin_nanf (""))
++#define G1 FP16_C (0.0)
++#define H1 FP16_C (10)
++
++/* Expected results for vmaxnmv. */
++uint16_t expect = 0x505A /* A0. */;
++uint16_t expect_alt = 0x6402 /* A1. */;
++
++void exec_vmaxnmv_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VMAXNMV (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 4);
++ VECT_VAR_DECL (buf_src, float, 16, 4) [] = {A0, B0, C0, D0};
++ VLOAD (vsrc, buf_src, , float, f, 16, 4);
++ float16_t vector_res = vmaxnmv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src1, float, 16, 4) [] = {B0, A0, C0, D0};
++ VLOAD (vsrc, buf_src1, , float, f, 16, 4);
++ vector_res = vmaxnmv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src2, float, 16, 4) [] = {B0, C0, A0, D0};
++ VLOAD (vsrc, buf_src2, , float, f, 16, 4);
++ vector_res = vmaxnmv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src3, float, 16, 4) [] = {B0, C0, D0, A0};
++ VLOAD (vsrc, buf_src3, , float, f, 16, 4);
++ vector_res = vmaxnmv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++#undef TEST_MSG
++#define TEST_MSG "VMAXNMVQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 8);
++ VECT_VAR_DECL (buf_src, float, 16, 8) [] = {A1, B1, C1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src, q, float, f, 16, 8);
++ vector_res = vmaxnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src1, float, 16, 8) [] = {B1, A1, C1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src1, q, float, f, 16, 8);
++ vector_res = vmaxnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src2, float, 16, 8) [] = {B1, C1, A1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src2, q, float, f, 16, 8);
++ vector_res = vmaxnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src3, float, 16, 8) [] = {B1, C1, D1, A1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src3, q, float, f, 16, 8);
++ vector_res = vmaxnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src4, float, 16, 8) [] = {B1, C1, D1, E1, A1, F1, G1, H1};
++ VLOAD (vsrc, buf_src4, q, float, f, 16, 8);
++ vector_res = vmaxnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src5, float, 16, 8) [] = {B1, C1, D1, E1, F1, A1, G1, H1};
++ VLOAD (vsrc, buf_src5, q, float, f, 16, 8);
++ vector_res = vmaxnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src6, float, 16, 8) [] = {B1, C1, D1, E1, F1, G1, A1, H1};
++ VLOAD (vsrc, buf_src6, q, float, f, 16, 8);
++ vector_res = vmaxnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src7, float, 16, 8) [] = {B1, C1, D1, E1, F1, G1, H1, A1};
++ VLOAD (vsrc, buf_src7, q, float, f, 16, 8);
++ vector_res = vmaxnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++}
++
++int
++main (void)
++{
++ exec_vmaxnmv_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmaxv_f16_1.c
+@@ -0,0 +1,131 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A0 FP16_C (123.4)
++#define B0 FP16_C (-567.8)
++#define C0 FP16_C (34.8)
++#define D0 FP16_C (0.0)
++
++#define A1 FP16_C (1025.8)
++#define B1 FP16_C (13.4)
++#define C1 FP16_C (-567.8)
++#define D1 FP16_C (10)
++#define E1 FP16_C (-0.0)
++#define F1 FP16_C (567.8)
++#define G1 FP16_C (0.0)
++#define H1 FP16_C (10)
++
++/* Expected results for vmaxv. */
++uint16_t expect = 0x57B6 /* A0. */;
++uint16_t expect_alt = 0x6402 /* A1. */;
++
++void exec_vmaxv_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VMAXV (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 4);
++ VECT_VAR_DECL (buf_src, float, 16, 4) [] = {A0, B0, C0, D0};
++ VLOAD (vsrc, buf_src, , float, f, 16, 4);
++ float16_t vector_res = vmaxv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src1, float, 16, 4) [] = {B0, A0, C0, D0};
++ VLOAD (vsrc, buf_src1, , float, f, 16, 4);
++ vector_res = vmaxv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src2, float, 16, 4) [] = {B0, C0, A0, D0};
++ VLOAD (vsrc, buf_src2, , float, f, 16, 4);
++ vector_res = vmaxv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src3, float, 16, 4) [] = {B0, C0, D0, A0};
++ VLOAD (vsrc, buf_src3, , float, f, 16, 4);
++ vector_res = vmaxv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++#undef TEST_MSG
++#define TEST_MSG "VMAXVQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 8);
++ VECT_VAR_DECL (buf_src, float, 16, 8) [] = {A1, B1, C1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src, q, float, f, 16, 8);
++ vector_res = vmaxvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src1, float, 16, 8) [] = {B1, A1, C1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src1, q, float, f, 16, 8);
++ vector_res = vmaxvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src2, float, 16, 8) [] = {B1, C1, A1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src2, q, float, f, 16, 8);
++ vector_res = vmaxvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src3, float, 16, 8) [] = {B1, C1, D1, A1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src3, q, float, f, 16, 8);
++ vector_res = vmaxvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src4, float, 16, 8) [] = {B1, C1, D1, E1, A1, F1, G1, H1};
++ VLOAD (vsrc, buf_src4, q, float, f, 16, 8);
++ vector_res = vmaxvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src5, float, 16, 8) [] = {B1, C1, D1, E1, F1, A1, G1, H1};
++ VLOAD (vsrc, buf_src5, q, float, f, 16, 8);
++ vector_res = vmaxvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src6, float, 16, 8) [] = {B1, C1, D1, E1, F1, G1, A1, H1};
++ VLOAD (vsrc, buf_src6, q, float, f, 16, 8);
++ vector_res = vmaxvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src7, float, 16, 8) [] = {B1, C1, D1, E1, F1, G1, H1, A1};
++ VLOAD (vsrc, buf_src7, q, float, f, 16, 8);
++ vector_res = vmaxvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++}
++
++int
++main (void)
++{
++ exec_vmaxv_f16 ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmin.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmin.c
+@@ -7,6 +7,10 @@
+
+ #define HAS_FLOAT_VARIANT
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++#define HAS_FLOAT16_VARIANT
++#endif
++
+ /* Expected results. */
+ VECT_VAR_DECL(expected,int,8,8) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+ 0xf3, 0xf3, 0xf3, 0xf3 };
+@@ -16,6 +20,9 @@ VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+ 0xf3, 0xf3, 0xf3, 0xf3 };
+ VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff0, 0xfff1, 0xfff1, 0xfff1 };
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff0, 0xfffffff0 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xcc00, 0xcbc0, 0xcbc0, 0xcbc0 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1800000, 0xc1780000 };
+ VECT_VAR_DECL(expected,int,8,16) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+ 0xf4, 0xf4, 0xf4, 0xf4,
+@@ -31,11 +38,41 @@ VECT_VAR_DECL(expected,uint,8,16) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+ 0xf9, 0xf9, 0xf9, 0xf9 };
+ VECT_VAR_DECL(expected,uint,16,8) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff2,
+ 0xfff2, 0xfff2, 0xfff2, 0xfff2 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb80, 0xcb40, 0xcb40,
++ 0xcb40, 0xcb40, 0xcb40, 0xcb40 };
++#endif
+ VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffffff0, 0xfffffff1,
+ 0xfffffff1, 0xfffffff1 };
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1800000, 0xc1700000,
+ 0xc1680000, 0xc1680000 };
+ /* Expected results with special FP values. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_nan, hfloat, 16, 8) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++VECT_VAR_DECL(expected_mnan, hfloat, 16, 8) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++VECT_VAR_DECL(expected_inf, hfloat, 16, 8) [] = { 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00 };
++VECT_VAR_DECL(expected_minf, hfloat, 16, 8) [] = { 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00 };
++VECT_VAR_DECL(expected_zero1, hfloat, 16, 8) [] = { 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000 };
++VECT_VAR_DECL(expected_zero2, hfloat, 16, 8) [] = { 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000 };
++#endif
+ VECT_VAR_DECL(expected_nan,hfloat,32,4) [] = { 0x7fc00000, 0x7fc00000,
+ 0x7fc00000, 0x7fc00000 };
+ VECT_VAR_DECL(expected_mnan,hfloat,32,4) [] = { 0x7fc00000, 0x7fc00000,
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vminh_f16_1.c
+@@ -0,0 +1,34 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++#define A 123.4
++#define B -567.8
++#define C -34.8
++#define D 1024
++#define E 663.1
++#define F 169.1
++#define G -4.8
++#define H 77
++
++float16_t input_1[] = { A, B, C, D };
++float16_t input_2[] = { E, F, G, H };
++float16_t expected[] = { A, B, C, H };
++
++#define TEST_MSG "VMINH_F16"
++#define INSN_NAME vminh_f16
++
++#define INPUT_1 input_1
++#define INPUT_2 input_2
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vminnm_1.c
+@@ -0,0 +1,51 @@
++/* This file tests an intrinsic which currently has only an f16 variant and that
++ is only available when FP16 arithmetic instructions are supported. */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define INSN_NAME vminnm
++#define TEST_MSG "VMINNM/VMINMQ"
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++#define HAS_FLOAT16_VARIANT
++#endif
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xcc00, 0xcbc0, 0xcbc0, 0xcbc0 };
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb80, 0xcb40, 0xcb40,
++ 0xcb40, 0xcb40, 0xcb40, 0xcb40 };
++#endif
++
++/* Expected results with special FP values. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_nan, hfloat, 16, 8) [] = { 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00 };
++VECT_VAR_DECL(expected_mnan, hfloat, 16, 8) [] = { 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00 };
++VECT_VAR_DECL(expected_inf, hfloat, 16, 8) [] = { 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00,
++ 0x3c00, 0x3c00 };
++VECT_VAR_DECL(expected_minf, hfloat, 16, 8) [] = { 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00 };
++VECT_VAR_DECL(expected_zero1, hfloat, 16, 8) [] = { 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000 };
++VECT_VAR_DECL(expected_zero2, hfloat, 16, 8) [] = { 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000 };
++#endif
++
++#include "binary_op_float.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vminnmh_f16_1.c
+@@ -0,0 +1,42 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++#define INFF __builtin_inf ()
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0xc454 /* -4.328125 */,
++ 0x4233 /* 3.099609 */,
++ 0x4d00 /* 20.000000 */,
++ 0xa51f /* -0.020004 */,
++ 0xc09a /* -2.300781 */,
++ 0xc73b /* -7.230469 */,
++ 0xc79a /* -7.601562 */,
++ 0x34f6 /* 0.310059 */,
++ 0xc73b /* -7.230469 */,
++ 0x3800 /* 0.500000 */,
++ 0xc79a /* -7.601562 */,
++ 0x451a /* 5.101562 */,
++ 0xc64d /* -6.300781 */,
++ 0x3556 /* 0.333496 */,
++ 0xfc00 /* -inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VMINNMH_F16"
++#define INSN_NAME vminnmh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vminnmv_f16_1.c
+@@ -0,0 +1,131 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A0 FP16_C (-567.8)
++#define B0 FP16_C (__builtin_nanf (""))
++#define C0 FP16_C (34.8)
++#define D0 FP16_C (-__builtin_nanf (""))
++
++#define A1 FP16_C (-567.8)
++#define B1 FP16_C (1025.8)
++#define C1 FP16_C (-__builtin_nanf (""))
++#define D1 FP16_C (10)
++#define E1 FP16_C (-0.0)
++#define F1 FP16_C (__builtin_nanf (""))
++#define G1 FP16_C (0.0)
++#define H1 FP16_C (10)
++
++/* Expected results for vminnmv. */
++uint16_t expect = 0xE070 /* A0. */;
++uint16_t expect_alt = 0xE070 /* A1. */;
++
++void exec_vminnmv_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VMINNMV (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 4);
++ VECT_VAR_DECL (buf_src, float, 16, 4) [] = {A0, B0, C0, D0};
++ VLOAD (vsrc, buf_src, , float, f, 16, 4);
++ float16_t vector_res = vminnmv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src1, float, 16, 4) [] = {B0, A0, C0, D0};
++ VLOAD (vsrc, buf_src1, , float, f, 16, 4);
++ vector_res = vminnmv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src2, float, 16, 4) [] = {B0, C0, A0, D0};
++ VLOAD (vsrc, buf_src2, , float, f, 16, 4);
++ vector_res = vminnmv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src3, float, 16, 4) [] = {B0, C0, D0, A0};
++ VLOAD (vsrc, buf_src3, , float, f, 16, 4);
++ vector_res = vminnmv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++#undef TEST_MSG
++#define TEST_MSG "VMINNMVQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 8);
++ VECT_VAR_DECL (buf_src, float, 16, 8) [] = {A1, B1, C1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src, q, float, f, 16, 8);
++ vector_res = vminnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src1, float, 16, 8) [] = {B1, A1, C1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src1, q, float, f, 16, 8);
++ vector_res = vminnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src2, float, 16, 8) [] = {B1, C1, A1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src2, q, float, f, 16, 8);
++ vector_res = vminnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src3, float, 16, 8) [] = {B1, C1, D1, A1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src3, q, float, f, 16, 8);
++ vector_res = vminnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src4, float, 16, 8) [] = {B1, C1, D1, E1, A1, F1, G1, H1};
++ VLOAD (vsrc, buf_src4, q, float, f, 16, 8);
++ vector_res = vminnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src5, float, 16, 8) [] = {B1, C1, D1, E1, F1, A1, G1, H1};
++ VLOAD (vsrc, buf_src5, q, float, f, 16, 8);
++ vector_res = vminnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src6, float, 16, 8) [] = {B1, C1, D1, E1, F1, G1, A1, H1};
++ VLOAD (vsrc, buf_src6, q, float, f, 16, 8);
++ vector_res = vminnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src7, float, 16, 8) [] = {B1, C1, D1, E1, F1, G1, H1, A1};
++ VLOAD (vsrc, buf_src7, q, float, f, 16, 8);
++ vector_res = vminnmvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++}
++
++int
++main (void)
++{
++ exec_vminnmv_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vminv_f16_1.c
+@@ -0,0 +1,131 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A0 FP16_C (-567.8)
++#define B0 FP16_C (123.4)
++#define C0 FP16_C (34.8)
++#define D0 FP16_C (0.0)
++
++#define A1 FP16_C (-567.8)
++#define B1 FP16_C (1025.8)
++#define C1 FP16_C (13.4)
++#define D1 FP16_C (10)
++#define E1 FP16_C (-0.0)
++#define F1 FP16_C (567.8)
++#define G1 FP16_C (0.0)
++#define H1 FP16_C (10)
++
++/* Expected results for vminv. */
++uint16_t expect = 0xE070 /* A0. */;
++uint16_t expect_alt = 0xE070 /* A1. */;
++
++void exec_vminv_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VMINV (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 4);
++ VECT_VAR_DECL (buf_src, float, 16, 4) [] = {A0, B0, C0, D0};
++ VLOAD (vsrc, buf_src, , float, f, 16, 4);
++ float16_t vector_res = vminv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src1, float, 16, 4) [] = {B0, A0, C0, D0};
++ VLOAD (vsrc, buf_src1, , float, f, 16, 4);
++ vector_res = vminv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src2, float, 16, 4) [] = {B0, C0, A0, D0};
++ VLOAD (vsrc, buf_src2, , float, f, 16, 4);
++ vector_res = vminv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++ VECT_VAR_DECL (buf_src3, float, 16, 4) [] = {B0, C0, D0, A0};
++ VLOAD (vsrc, buf_src3, , float, f, 16, 4);
++ vector_res = vminv_f16 (VECT_VAR (vsrc, float, 16, 4));
++
++ if (* (uint16_t *) &vector_res != expect)
++ abort ();
++
++#undef TEST_MSG
++#define TEST_MSG "VMINVQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 8);
++ VECT_VAR_DECL (buf_src, float, 16, 8) [] = {A1, B1, C1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src, q, float, f, 16, 8);
++ vector_res = vminvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src1, float, 16, 8) [] = {B1, A1, C1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src1, q, float, f, 16, 8);
++ vector_res = vminvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src2, float, 16, 8) [] = {B1, C1, A1, D1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src2, q, float, f, 16, 8);
++ vector_res = vminvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src3, float, 16, 8) [] = {B1, C1, D1, A1, E1, F1, G1, H1};
++ VLOAD (vsrc, buf_src3, q, float, f, 16, 8);
++ vector_res = vminvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src4, float, 16, 8) [] = {B1, C1, D1, E1, A1, F1, G1, H1};
++ VLOAD (vsrc, buf_src4, q, float, f, 16, 8);
++ vector_res = vminvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src5, float, 16, 8) [] = {B1, C1, D1, E1, F1, A1, G1, H1};
++ VLOAD (vsrc, buf_src5, q, float, f, 16, 8);
++ vector_res = vminvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src6, float, 16, 8) [] = {B1, C1, D1, E1, F1, G1, A1, H1};
++ VLOAD (vsrc, buf_src6, q, float, f, 16, 8);
++ vector_res = vminvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++
++ VECT_VAR_DECL (buf_src7, float, 16, 8) [] = {B1, C1, D1, E1, F1, G1, H1, A1};
++ VLOAD (vsrc, buf_src7, q, float, f, 16, 8);
++ vector_res = vminvq_f16 (VECT_VAR (vsrc, float, 16, 8));
++
++ if (* (uint16_t *) &vector_res != expect_alt)
++ abort ();
++}
++
++int
++main (void)
++{
++ exec_vminv_f16 ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmovn.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmovn.c
+@@ -35,11 +35,11 @@ void exec_vmovn (void)
+ TEST_VMOVN(uint, u, 32, 16, 4);
+ TEST_VMOVN(uint, u, 64, 32, 2);
+
+- CHECK(TEST_MSG, int, 8, 8, PRIx32, expected, "");
+- CHECK(TEST_MSG, int, 16, 4, PRIx64, expected, "");
++ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected, "");
++ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 8, 8, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 16, 4, PRIx64, expected, "");
++ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected, "");
++ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
+ }
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmul.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmul.c
+@@ -13,6 +13,10 @@ VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfab0, 0xfb05, 0xfb5a, 0xfbaf };
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffff9a0, 0xfffffa06 };
+ VECT_VAR_DECL(expected,poly,8,8) [] = { 0xc0, 0x84, 0x48, 0xc,
+ 0xd0, 0x94, 0x58, 0x1c };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xe02a, 0xdfcf,
++ 0xdf4a, 0xdec4 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc4053333, 0xc3f9c000 };
+ VECT_VAR_DECL(expected,int,8,16) [] = { 0x90, 0x7, 0x7e, 0xf5,
+ 0x6c, 0xe3, 0x5a, 0xd1,
+@@ -34,13 +38,15 @@ VECT_VAR_DECL(expected,poly,8,16) [] = { 0x60, 0xca, 0x34, 0x9e,
+ 0xc8, 0x62, 0x9c, 0x36,
+ 0x30, 0x9a, 0x64, 0xce,
+ 0x98, 0x32, 0xcc, 0x66 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xe63a, 0xe5d6, 0xe573, 0xe50f,
++ 0xe4ac, 0xe448, 0xe3c8, 0xe301 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc4c73333, 0xc4bac000,
+ 0xc4ae4ccd, 0xc4a1d999 };
+
+-#ifndef INSN_NAME
+ #define INSN_NAME vmul
+ #define TEST_MSG "VMUL"
+-#endif
+
+ #define FNNAME1(NAME) exec_ ## NAME
+ #define FNNAME(NAME) FNNAME1(NAME)
+@@ -80,6 +86,17 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VMUL(poly, 8, 16);
+ DECL_VMUL(float, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector1, float, 16, 4);
++ DECL_VARIABLE(vector1, float, 16, 8);
++
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 8);
++
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
++
+ clean_results ();
+
+ /* Initialize input "vector1" from "buffer". */
+@@ -99,6 +116,10 @@ void FNNAME (INSN_NAME) (void)
+ VLOAD(vector1, buffer, q, uint, u, 32, 4);
+ VLOAD(vector1, buffer, q, poly, p, 8, 16);
+ VLOAD(vector1, buffer, q, float, f, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector1, buffer, , float, f, 16, 4);
++ VLOAD(vector1, buffer, q, float, f, 16, 8);
++#endif
+
+ /* Choose init value arbitrarily. */
+ VDUP(vector2, , int, s, 8, 8, 0x11);
+@@ -117,6 +138,10 @@ void FNNAME (INSN_NAME) (void)
+ VDUP(vector2, q, uint, u, 32, 4, 0xCC);
+ VDUP(vector2, q, poly, p, 8, 16, 0xAA);
+ VDUP(vector2, q, float, f, 32, 4, 99.6f);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector2, , float, f, 16, 4, 33.3f);
++ VDUP(vector2, q, float, f, 16, 8, 99.6f);
++#endif
+
+ /* Execute the tests. */
+ TEST_VMUL(INSN_NAME, , int, s, 8, 8);
+@@ -135,6 +160,10 @@ void FNNAME (INSN_NAME) (void)
+ TEST_VMUL(INSN_NAME, q, uint, u, 32, 4);
+ TEST_VMUL(INSN_NAME, q, poly, p, 8, 16);
+ TEST_VMUL(INSN_NAME, q, float, f, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VMUL(INSN_NAME, , float, f, 16, 4);
++ TEST_VMUL(INSN_NAME, q, float, f, 16, 8);
++#endif
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected, "");
+ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected, "");
+@@ -142,7 +171,7 @@ void FNNAME (INSN_NAME) (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected, "");
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, "");
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected, "");
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected, "");
+@@ -150,8 +179,12 @@ void FNNAME (INSN_NAME) (void)
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected, "");
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, "");
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
++#endif
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmul_lane.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmul_lane.c
+@@ -7,6 +7,9 @@ VECT_VAR_DECL(expected,int,16,4) [] = { 0xffc0, 0xffc4, 0xffc8, 0xffcc };
+ VECT_VAR_DECL(expected,int,32,2) [] = { 0xfffffde0, 0xfffffe02 };
+ VECT_VAR_DECL(expected,uint,16,4) [] = { 0xbbc0, 0xc004, 0xc448, 0xc88c };
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffface0, 0xffffb212 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xddb3, 0xdd58, 0xdcfd, 0xdca1 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc3b66666, 0xc3ab0000 };
+ VECT_VAR_DECL(expected,int,16,8) [] = { 0xffc0, 0xffc4, 0xffc8, 0xffcc,
+ 0xffd0, 0xffd4, 0xffd8, 0xffdc };
+@@ -16,6 +19,10 @@ VECT_VAR_DECL(expected,uint,16,8) [] = { 0xbbc0, 0xc004, 0xc448, 0xc88c,
+ 0xccd0, 0xd114, 0xd558, 0xd99c };
+ VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffface0, 0xffffb212,
+ 0xffffb744, 0xffffbc76 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xddb3, 0xdd58, 0xdcfd, 0xdca1,
++ 0xdc46, 0xdbd6, 0xdb20, 0xda69 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc3b66666, 0xc3ab0000,
+ 0xc39f9999, 0xc3943333 };
+
+@@ -45,11 +52,20 @@ void exec_vmul_lane (void)
+
+ DECL_VMUL(vector);
+ DECL_VMUL(vector_res);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
+
+ DECL_VARIABLE(vector2, int, 16, 4);
+ DECL_VARIABLE(vector2, int, 32, 2);
+ DECL_VARIABLE(vector2, uint, 16, 4);
+ DECL_VARIABLE(vector2, uint, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector2, float, 16, 4);
++#endif
+ DECL_VARIABLE(vector2, float, 32, 2);
+
+ clean_results ();
+@@ -59,11 +75,17 @@ void exec_vmul_lane (void)
+ VLOAD(vector, buffer, , int, s, 32, 2);
+ VLOAD(vector, buffer, , uint, u, 16, 4);
+ VLOAD(vector, buffer, , uint, u, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+ VLOAD(vector, buffer, q, int, s, 16, 8);
+ VLOAD(vector, buffer, q, int, s, 32, 4);
+ VLOAD(vector, buffer, q, uint, u, 16, 8);
+ VLOAD(vector, buffer, q, uint, u, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector, buffer, q, float, f, 32, 4);
+
+ /* Initialize vector2. */
+@@ -71,6 +93,9 @@ void exec_vmul_lane (void)
+ VDUP(vector2, , int, s, 32, 2, 0x22);
+ VDUP(vector2, , uint, u, 16, 4, 0x444);
+ VDUP(vector2, , uint, u, 32, 2, 0x532);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector2, , float, f, 16, 4, 22.8f);
++#endif
+ VDUP(vector2, , float, f, 32, 2, 22.8f);
+
+ /* Choose lane arbitrarily. */
+@@ -78,22 +103,34 @@ void exec_vmul_lane (void)
+ TEST_VMUL_LANE(, int, s, 32, 2, 2, 1);
+ TEST_VMUL_LANE(, uint, u, 16, 4, 4, 2);
+ TEST_VMUL_LANE(, uint, u, 32, 2, 2, 1);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VMUL_LANE(, float, f, 16, 4, 4, 1);
++#endif
+ TEST_VMUL_LANE(, float, f, 32, 2, 2, 1);
+ TEST_VMUL_LANE(q, int, s, 16, 8, 4, 2);
+ TEST_VMUL_LANE(q, int, s, 32, 4, 2, 0);
+ TEST_VMUL_LANE(q, uint, u, 16, 8, 4, 2);
+ TEST_VMUL_LANE(q, uint, u, 32, 4, 2, 1);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VMUL_LANE(q, float, f, 16, 8, 4, 0);
++#endif
+ TEST_VMUL_LANE(q, float, f, 32, 4, 2, 0);
+
+- CHECK(TEST_MSG, int, 16, 4, PRIx64, expected, "");
++ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 16, 4, PRIx64, expected, "");
++ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, int, 16, 8, PRIx64, expected, "");
++ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 16, 8, PRIx64, expected, "");
++ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, "");
+ }
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmul_lane_f16_1.c
+@@ -0,0 +1,454 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (13.4)
++#define B FP16_C (-56.8)
++#define C FP16_C (-34.8)
++#define D FP16_C (12)
++#define E FP16_C (63.1)
++#define F FP16_C (19.1)
++#define G FP16_C (-4.8)
++#define H FP16_C (77)
++
++#define I FP16_C (0.7)
++#define J FP16_C (-78)
++#define K FP16_C (11.23)
++#define L FP16_C (98)
++#define M FP16_C (87.1)
++#define N FP16_C (-8)
++#define O FP16_C (-1.1)
++#define P FP16_C (-9.7)
++
++/* Expected results for vmul_lane. */
++VECT_VAR_DECL (expected0_static, hfloat, 16, 4) []
++ = { 0x629B /* A * E. */,
++ 0xEB00 /* B * E. */,
++ 0xE84A /* C * E. */,
++ 0x61EA /* D * E. */ };
++
++VECT_VAR_DECL (expected1_static, hfloat, 16, 4) []
++ = { 0x5BFF /* A * F. */,
++ 0xE43D /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0x5B29 /* D * F. */ };
++
++VECT_VAR_DECL (expected2_static, hfloat, 16, 4) []
++ = { 0xD405 /* A * G. */,
++ 0x5C43 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0xD334 /* D * G. */ };
++
++VECT_VAR_DECL (expected3_static, hfloat, 16, 4) []
++ = { 0x6408 /* A * H. */,
++ 0xEC46 /* B * H. */,
++ 0xE93C /* C * H. */,
++ 0x6338 /* D * H. */ };
++
++/* Expected results for vmulq_lane. */
++VECT_VAR_DECL (expected0_static, hfloat, 16, 8) []
++ = { 0x629B /* A * E. */,
++ 0xEB00 /* B * E. */,
++ 0xE84A /* C * E. */,
++ 0x61EA /* D * E. */,
++ 0x5186 /* I * E. */,
++ 0xECCE /* J * E. */,
++ 0x6189 /* K * E. */,
++ 0x6E0A /* L * E. */ };
++
++VECT_VAR_DECL (expected1_static, hfloat, 16, 8) []
++ = { 0x5BFF /* A * F. */,
++ 0xE43D /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0x5B29 /* D * F. */,
++ 0x4AAF /* I * F. */,
++ 0xE5D1 /* J * F. */,
++ 0x5AB3 /* K * F. */,
++ 0x674F /* L * F. */ };
++
++VECT_VAR_DECL (expected2_static, hfloat, 16, 8) []
++ = { 0xD405 /* A * G. */,
++ 0x5C43 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0xD334 /* D * G. */,
++ 0xC2B9 /* I * G. */,
++ 0x5DDA /* J * G. */,
++ 0xD2BD /* K * G. */,
++ 0xDF5A /* L * G. */ };
++
++VECT_VAR_DECL (expected3_static, hfloat, 16, 8) []
++ = { 0x6408 /* A * H. */,
++ 0xEC46 /* B * H. */,
++ 0xE93C /* C * H. */,
++ 0x6338 /* D * H. */,
++ 0x52BD /* I * H. */,
++ 0xEDDE /* J * H. */,
++ 0x62C1 /* K * H. */,
++ 0x6F5E /* L * H. */ };
++
++/* Expected results for vmul_laneq. */
++VECT_VAR_DECL (expected_laneq0_static, hfloat, 16, 4) []
++ = { 0x629B /* A * E. */,
++ 0xEB00 /* B * E. */,
++ 0xE84A /* C * E. */,
++ 0x61EA /* D * E. */ };
++
++VECT_VAR_DECL (expected_laneq1_static, hfloat, 16, 4) []
++ = { 0x5BFF /* A * F. */,
++ 0xE43D /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0x5B29 /* D * F. */ };
++
++VECT_VAR_DECL (expected_laneq2_static, hfloat, 16, 4) []
++ = { 0xD405 /* A * G. */,
++ 0x5C43 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0xD334 /* D * G. */ };
++
++VECT_VAR_DECL (expected_laneq3_static, hfloat, 16, 4) []
++ = { 0x6408 /* A * H. */,
++ 0xEC46 /* B * H. */,
++ 0xE93C /* C * H. */,
++ 0x6338 /* D * H. */ };
++
++VECT_VAR_DECL (expected_laneq4_static, hfloat, 16, 4) []
++ = { 0x648F /* A * M. */,
++ 0xECD5 /* B * M. */,
++ 0xE9ED /* C * M. */,
++ 0x6416 /* D * M. */ };
++
++VECT_VAR_DECL (expected_laneq5_static, hfloat, 16, 4) []
++ = { 0xD6B3 /* A * N. */,
++ 0x5F1A /* B * N. */,
++ 0x5C5A /* C * N. */,
++ 0xD600 /* D * N. */ };
++
++VECT_VAR_DECL (expected_laneq6_static, hfloat, 16, 4) []
++ = { 0xCB5E /* A * O. */,
++ 0x53CF /* B * O. */,
++ 0x50C9 /* C * O. */,
++ 0xCA99 /* D * O. */ };
++
++VECT_VAR_DECL (expected_laneq7_static, hfloat, 16, 4) []
++ = { 0xD810 /* A * P. */,
++ 0x604F /* B * P. */,
++ 0x5D47 /* C * P. */,
++ 0xD747 /* D * P. */ };
++
++/* Expected results for vmulq_laneq. */
++VECT_VAR_DECL (expected_laneq0_static, hfloat, 16, 8) []
++ = { 0x629B /* A * E. */,
++ 0xEB00 /* B * E. */,
++ 0xE84A /* C * E. */,
++ 0x61EA /* D * E. */,
++ 0x5186 /* I * E. */,
++ 0xECCE /* J * E. */,
++ 0x6189 /* K * E. */,
++ 0x6E0A /* L * E. */ };
++
++VECT_VAR_DECL (expected_laneq1_static, hfloat, 16, 8) []
++ = { 0x5BFF /* A * F. */,
++ 0xE43D /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0x5B29 /* D * F. */,
++ 0x4AAF /* I * F. */,
++ 0xE5D1 /* J * F. */,
++ 0x5AB3 /* K * F. */,
++ 0x674F /* L * F. */ };
++
++VECT_VAR_DECL (expected_laneq2_static, hfloat, 16, 8) []
++ = { 0xD405 /* A * G. */,
++ 0x5C43 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0xD334 /* D * G. */,
++ 0xC2B9 /* I * G. */,
++ 0x5DDA /* J * G. */,
++ 0xD2BD /* K * G. */,
++ 0xDF5A /* L * G. */ };
++
++VECT_VAR_DECL (expected_laneq3_static, hfloat, 16, 8) []
++ = { 0x6408 /* A * H. */,
++ 0xEC46 /* B * H. */,
++ 0xE93C /* C * H. */,
++ 0x6338 /* D * H. */,
++ 0x52BD /* I * H. */,
++ 0xEDDE /* J * H. */,
++ 0x62C1 /* K * H. */,
++ 0x6F5E /* L * H. */ };
++
++VECT_VAR_DECL (expected_laneq4_static, hfloat, 16, 8) []
++ = { 0x648F /* A * M. */,
++ 0xECD5 /* B * M. */,
++ 0xE9ED /* C * M. */,
++ 0x6416 /* D * M. */,
++ 0x53A0 /* I * M. */,
++ 0xEEA3 /* J * M. */,
++ 0x63A4 /* K * M. */,
++ 0x702B /* L * M. */ };
++
++VECT_VAR_DECL (expected_laneq5_static, hfloat, 16, 8) []
++ = { 0xD6B3 /* A * N. */,
++ 0x5F1A /* B * N. */,
++ 0x5C5A /* C * N. */,
++ 0xD600 /* D * N. */,
++ 0xC59A /* I * N. */,
++ 0x60E0 /* J * N. */,
++ 0xD59D /* K * N. */,
++ 0xE220 /* L * N. */ };
++
++VECT_VAR_DECL (expected_laneq6_static, hfloat, 16, 8) []
++ = { 0xCB5E /* A * O. */,
++ 0x53CF /* B * O. */,
++ 0x50C9 /* C * O. */,
++ 0xCA99 /* D * O. */,
++ 0xBA29 /* I * O. */,
++ 0x555C /* J * O. */,
++ 0xCA2C /* K * O. */,
++ 0xD6BC /* L * O. */ };
++
++VECT_VAR_DECL (expected_laneq7_static, hfloat, 16, 8) []
++ = { 0xD810 /* A * P. */,
++ 0x604F /* B * P. */,
++ 0x5D47 /* C * P. */,
++ 0xD747 /* D * P. */,
++ 0xC6CB /* I * P. */,
++ 0x61EA /* J * P. */,
++ 0xD6CF /* K * P. */,
++ 0xE36E /* L * P. */ };
++
++void exec_vmul_lane_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VMUL_LANE (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 4);
++ DECL_VARIABLE(vsrc_2, float, 16, 4);
++ VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A, B, C, D};
++ VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {E, F, G, H};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
++ VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vmul_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 0);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VMULQ_LANE (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 8);
++ VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A, B, C, D, I, J, K, L};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vmulq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 0);
++
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VMUL_LANEQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_2, float, 16, 8);
++ VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {E, F, G, H, M, N, O, P};
++ VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 0);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq3_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 4);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq4_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 5);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq5_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 6);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq6_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmul_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 7);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq7_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VMULQ_LANEQ (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 0);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq3_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 4);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq4_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 5);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq5_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 6);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq6_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 7);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq7_static, "");
++}
++
++int
++main (void)
++{
++ exec_vmul_lane_f16 ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmul_n.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmul_n.c
+@@ -7,6 +7,9 @@ VECT_VAR_DECL(expected,int,16,4) [] = { 0xfef0, 0xff01, 0xff12, 0xff23 };
+ VECT_VAR_DECL(expected,int,32,2) [] = { 0xfffffde0, 0xfffffe02 };
+ VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfcd0, 0xfd03, 0xfd36, 0xfd69 };
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffbc0, 0xfffffc04 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xdd93, 0xdd3a, 0xdce1, 0xdc87 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc3b26666, 0xc3a74000 };
+ VECT_VAR_DECL(expected,int,16,8) [] = { 0xfab0, 0xfb05, 0xfb5a, 0xfbaf,
+ 0xfc04, 0xfc59, 0xfcae, 0xfd03 };
+@@ -16,6 +19,10 @@ VECT_VAR_DECL(expected,uint,16,8) [] = { 0xf890, 0xf907, 0xf97e, 0xf9f5,
+ 0xfa6c, 0xfae3, 0xfb5a, 0xfbd1 };
+ VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffff780, 0xfffff808,
+ 0xfffff890, 0xfffff918 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xe58e, 0xe535, 0xe4dc, 0xe483,
++ 0xe42a, 0xe3a3, 0xe2f2, 0xe240 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc4b1cccd, 0xc4a6b000,
+ 0xc49b9333, 0xc4907667 };
+
+@@ -50,6 +57,13 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VMUL(vector);
+ DECL_VMUL(vector_res);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
++
+ clean_results ();
+
+ /* Initialize vector from pre-initialized values. */
+@@ -57,11 +71,17 @@ void FNNAME (INSN_NAME) (void)
+ VLOAD(vector, buffer, , int, s, 32, 2);
+ VLOAD(vector, buffer, , uint, u, 16, 4);
+ VLOAD(vector, buffer, , uint, u, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+ VLOAD(vector, buffer, q, int, s, 16, 8);
+ VLOAD(vector, buffer, q, int, s, 32, 4);
+ VLOAD(vector, buffer, q, uint, u, 16, 8);
+ VLOAD(vector, buffer, q, uint, u, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector, buffer, q, float, f, 32, 4);
+
+ /* Choose multiplier arbitrarily. */
+@@ -69,22 +89,34 @@ void FNNAME (INSN_NAME) (void)
+ TEST_VMUL_N(, int, s, 32, 2, 0x22);
+ TEST_VMUL_N(, uint, u, 16, 4, 0x33);
+ TEST_VMUL_N(, uint, u, 32, 2, 0x44);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VMUL_N(, float, f, 16, 4, 22.3f);
++#endif
+ TEST_VMUL_N(, float, f, 32, 2, 22.3f);
+ TEST_VMUL_N(q, int, s, 16, 8, 0x55);
+ TEST_VMUL_N(q, int, s, 32, 4, 0x66);
+ TEST_VMUL_N(q, uint, u, 16, 8, 0x77);
+ TEST_VMUL_N(q, uint, u, 32, 4, 0x88);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VMUL_N(q, float, f, 16, 8, 88.9f);
++#endif
+ TEST_VMUL_N(q, float, f, 32, 4, 88.9f);
+
+- CHECK(TEST_MSG, int, 16, 4, PRIx64, expected, "");
++ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 16, 4, PRIx64, expected, "");
++ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, int, 16, 8, PRIx64, expected, "");
++ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 16, 8, PRIx64, expected, "");
++ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, "");
+ }
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulh_f16_1.c
+@@ -0,0 +1,42 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++#define INFF __builtin_inf ()
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0xc854 /* -8.656250 */,
++ 0x5cd8 /* 310.000000 */,
++ 0x60b0 /* 600.000000 */,
++ 0xa019 /* -0.008003 */,
++ 0xbc9a /* -1.150391 */,
++ 0xc8cf /* -9.617188 */,
++ 0x51fd /* 47.906250 */,
++ 0x4634 /* 6.203125 */,
++ 0xc0d9 /* -2.423828 */,
++ 0x3c9a /* 1.150391 */,
++ 0xc79a /* -7.601562 */,
++ 0x5430 /* 67.000000 */,
++ 0xbfd0 /* -1.953125 */,
++ 0x46ac /* 6.671875 */,
++ 0xfc00 /* -inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VMULH_F16"
++#define INSN_NAME vmulh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulh_lane_f16_1.c
+@@ -0,0 +1,90 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (13.4)
++#define B FP16_C (-56.8)
++#define C FP16_C (-34.8)
++#define D FP16_C (12)
++#define E FP16_C (63.1)
++#define F FP16_C (19.1)
++#define G FP16_C (-4.8)
++#define H FP16_C (77)
++
++#define I FP16_C (0.7)
++#define J FP16_C (-78)
++#define K FP16_C (11.23)
++#define L FP16_C (98)
++#define M FP16_C (87.1)
++#define N FP16_C (-8)
++#define O FP16_C (-1.1)
++#define P FP16_C (-9.7)
++
++extern void abort ();
++
++float16_t src1[8] = { A, B, C, D, I, J, K, L };
++VECT_VAR_DECL (src2, float, 16, 4) [] = { E, F, G, H };
++VECT_VAR_DECL (src2, float, 16, 8) [] = { E, F, G, H, M, N, O, P };
++
++/* Expected results for vmulh_lane. */
++uint16_t expected[4] = { 0x629B /* A * E. */, 0xE43D /* B * F. */,
++ 0x5939 /* C * G. */, 0x6338 /* D * H. */ };
++
++
++/* Expected results for vmulh_lane. */
++uint16_t expected_laneq[8] = { 0x629B /* A * E. */,
++ 0xE43D /* B * F. */,
++ 0x5939 /* C * G. */,
++ 0x6338 /* D * H. */,
++ 0x53A0 /* I * M. */,
++ 0x60E0 /* J * N. */,
++ 0xCA2C /* K * O. */,
++ 0xE36E /* L * P. */ };
++
++void exec_vmulh_lane_f16 (void)
++{
++#define CHECK_LANE(N)\
++ ret = vmulh_lane_f16 (src1[N], VECT_VAR (vsrc2, float, 16, 4), N);\
++ if (*(uint16_t *) &ret != expected[N])\
++ abort ();
++
++ DECL_VARIABLE(vsrc2, float, 16, 4);
++ VLOAD (vsrc2, src2, , float, f, 16, 4);
++ float16_t ret;
++
++ CHECK_LANE(0)
++ CHECK_LANE(1)
++ CHECK_LANE(2)
++ CHECK_LANE(3)
++
++#undef CHECK_LANE
++#define CHECK_LANE(N)\
++ ret = vmulh_laneq_f16 (src1[N], VECT_VAR (vsrc2, float, 16, 8), N);\
++ if (*(uint16_t *) &ret != expected_laneq[N])\
++ abort ();
++
++ DECL_VARIABLE(vsrc2, float, 16, 8);
++ VLOAD (vsrc2, src2, q, float, f, 16, 8);
++
++ CHECK_LANE(0)
++ CHECK_LANE(1)
++ CHECK_LANE(2)
++ CHECK_LANE(3)
++ CHECK_LANE(4)
++ CHECK_LANE(5)
++ CHECK_LANE(6)
++ CHECK_LANE(7)
++}
++
++int
++main (void)
++{
++ exec_vmulh_lane_f16 ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmull.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmull.c
+@@ -59,13 +59,13 @@ void exec_vmull (void)
+ TEST_VMULL(uint, u, 32, 64, 2);
+ TEST_VMULL(poly, p, 8, 16, 8);
+
+- CHECK(TEST_MSG, int, 16, 8, PRIx64, expected, "");
++ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected, "");
+- CHECK(TEST_MSG, int, 64, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 16, 8, PRIx64, expected, "");
++ CHECK(TEST_MSG, int, 64, 2, PRIx64, expected, "");
++ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 64, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected, "");
++ CHECK(TEST_MSG, uint, 64, 2, PRIx64, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected, "");
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmull_lane.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmull_lane.c
+@@ -54,9 +54,9 @@ void exec_vmull_lane (void)
+ TEST_VMULL_LANE(uint, u, 32, 64, 2, 1);
+
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected, "");
+- CHECK(TEST_MSG, int, 64, 2, PRIx32, expected, "");
++ CHECK(TEST_MSG, int, 64, 2, PRIx64, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 64, 2, PRIx32, expected, "");
++ CHECK(TEST_MSG, uint, 64, 2, PRIx64, expected, "");
+ }
+
+ int main (void)
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulx_f16_1.c
+@@ -0,0 +1,84 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (13.4)
++#define B FP16_C (__builtin_inff ())
++#define C FP16_C (-34.8)
++#define D FP16_C (-__builtin_inff ())
++#define E FP16_C (63.1)
++#define F FP16_C (0.0)
++#define G FP16_C (-4.8)
++#define H FP16_C (0.0)
++
++#define I FP16_C (0.7)
++#define J FP16_C (-__builtin_inff ())
++#define K FP16_C (11.23)
++#define L FP16_C (98)
++#define M FP16_C (87.1)
++#define N FP16_C (-0.0)
++#define O FP16_C (-1.1)
++#define P FP16_C (7)
++
++/* Expected results for vmulx. */
++VECT_VAR_DECL (expected_static, hfloat, 16, 4) []
++ = { 0x629B /* A * E. */, 0x4000 /* FP16_C (2.0f). */,
++ 0x5939 /* C * G. */, 0xC000 /* FP16_C (-2.0f). */ };
++
++VECT_VAR_DECL (expected_static, hfloat, 16, 8) []
++ = { 0x629B /* A * E. */, 0x4000 /* FP16_C (2.0f). */,
++ 0x5939 /* C * G. */, 0xC000 /* FP16_C (-2.0f). */,
++ 0x53A0 /* I * M. */, 0x4000 /* FP16_C (2.0f). */,
++ 0xCA2C /* K * O. */, 0x615C /* L * P. */ };
++
++void exec_vmulx_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VMULX (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 4);
++ DECL_VARIABLE(vsrc_2, float, 16, 4);
++ VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A, B, C, D};
++ VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {E, F, G, H};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
++ VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vmulx_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4));
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VMULXQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 8);
++ DECL_VARIABLE(vsrc_2, float, 16, 8);
++ VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A, B, C, D, I, J, K, L};
++ VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {E, F, G, H, M, N, O, P};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
++ VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vmulxq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8));
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_static, "");
++}
++
++int
++main (void)
++{
++ exec_vmulx_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulx_lane_f16_1.c
+@@ -0,0 +1,452 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (13.4)
++#define B FP16_C (__builtin_inff ())
++#define C FP16_C (-34.8)
++#define D FP16_C (-__builtin_inff ())
++#define E FP16_C (-0.0)
++#define F FP16_C (19.1)
++#define G FP16_C (-4.8)
++#define H FP16_C (0.0)
++
++#define I FP16_C (0.7)
++#define J FP16_C (-78)
++#define K FP16_C (-__builtin_inff ())
++#define L FP16_C (98)
++#define M FP16_C (87.1)
++#define N FP16_C (-8)
++#define O FP16_C (-1.1)
++#define P FP16_C (-0.0)
++
++/* Expected results for vmulx_lane. */
++VECT_VAR_DECL (expected0_static, hfloat, 16, 4) []
++ = { 0x8000 /* A * E. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* C * E. */,
++ 0x4000 /* FP16_C (2.0f). */ };
++
++VECT_VAR_DECL (expected1_static, hfloat, 16, 4) []
++ = { 0x5BFF /* A * F. */,
++ 0x7C00 /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0xFC00 /* D * F. */ };
++
++VECT_VAR_DECL (expected2_static, hfloat, 16, 4) []
++ = { 0xD405 /* A * G. */,
++ 0xFC00 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0x7C00 /* D * G. */ };
++
++VECT_VAR_DECL (expected3_static, hfloat, 16, 4) []
++ = { 0x0000 /* A * H. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* C * H. */,
++ 0xC000 /* FP16_C (-2.0f). */ };
++
++/* Expected results for vmulxq_lane. */
++VECT_VAR_DECL (expected0_static, hfloat, 16, 8) []
++ = { 0x8000 /* A * E. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* C * E. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* I * E. */,
++ 0x0000 /* J * E. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* L * E. */ };
++
++VECT_VAR_DECL (expected1_static, hfloat, 16, 8) []
++ = { 0x5BFF /* A * F. */,
++ 0x7C00 /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0xFC00 /* D * F. */,
++ 0x4AAF /* I * F. */,
++ 0xE5D1 /* J * F. */,
++ 0xFC00 /* K * F. */,
++ 0x674F /* L * F. */ };
++
++VECT_VAR_DECL (expected2_static, hfloat, 16, 8) []
++ = { 0xD405 /* A * G. */,
++ 0xFC00 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0x7C00 /* D * G. */,
++ 0xC2B9 /* I * G. */,
++ 0x5DDA /* J * G. */,
++ 0x7C00 /* K * G. */,
++ 0xDF5A /* L * G. */ };
++
++VECT_VAR_DECL (expected3_static, hfloat, 16, 8) []
++ = { 0x0000 /* A * H. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* C * H. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* I * H. */,
++ 0x8000 /* J * H. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* L * H. */};
++
++/* Expected results for vmulx_laneq. */
++VECT_VAR_DECL (expected_laneq0_static, hfloat, 16, 4) []
++ = { 0x8000 /* A * E. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* C * E. */,
++ 0x4000 /* FP16_C (2.0f). */ };
++
++VECT_VAR_DECL (expected_laneq1_static, hfloat, 16, 4) []
++ = { 0x5BFF /* A * F. */,
++ 0x7C00 /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0xFC00 /* D * F. */ };
++
++VECT_VAR_DECL (expected_laneq2_static, hfloat, 16, 4) []
++ = { 0xD405 /* A * G. */,
++ 0xFC00 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0x7C00 /* D * G. */ };
++
++VECT_VAR_DECL (expected_laneq3_static, hfloat, 16, 4) []
++ = { 0x0000 /* A * H. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* C * H. */,
++ 0xC000 /* FP16_C (-2.0f). */ };
++
++VECT_VAR_DECL (expected_laneq4_static, hfloat, 16, 4) []
++ = { 0x648F /* A * M. */,
++ 0x7C00 /* B * M. */,
++ 0xE9ED /* C * M. */,
++ 0xFC00 /* D * M. */ };
++
++VECT_VAR_DECL (expected_laneq5_static, hfloat, 16, 4) []
++ = { 0xD6B3 /* A * N. */,
++ 0xFC00 /* B * N. */,
++ 0x5C5A /* C * N. */,
++ 0x7C00 /* D * N. */ };
++
++VECT_VAR_DECL (expected_laneq6_static, hfloat, 16, 4) []
++ = { 0xCB5E /* A * O. */,
++ 0xFC00 /* B * O. */,
++ 0x50C9 /* C * O. */,
++ 0x7C00 /* D * O. */ };
++
++VECT_VAR_DECL (expected_laneq7_static, hfloat, 16, 4) []
++ = { 0x8000 /* A * P. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* C * P. */,
++ 0x4000 /* FP16_C (2.0f). */ };
++
++VECT_VAR_DECL (expected_laneq0_static, hfloat, 16, 8) []
++ = { 0x8000 /* A * E. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* C * E. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* I * E. */,
++ 0x0000 /* J * E. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* L * E. */ };
++
++VECT_VAR_DECL (expected_laneq1_static, hfloat, 16, 8) []
++ = { 0x5BFF /* A * F. */,
++ 0x7C00 /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0xFC00 /* D * F. */,
++ 0x4AAF /* I * F. */,
++ 0xE5D1 /* J * F. */,
++ 0xFC00 /* K * F. */,
++ 0x674F /* L * F. */ };
++
++VECT_VAR_DECL (expected_laneq2_static, hfloat, 16, 8) []
++ = { 0xD405 /* A * G. */,
++ 0xFC00 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0x7C00 /* D * G. */,
++ 0xC2B9 /* I * G. */,
++ 0x5DDA /* J * G. */,
++ 0x7C00 /* K * G. */,
++ 0xDF5A /* L * G. */ };
++
++VECT_VAR_DECL (expected_laneq3_static, hfloat, 16, 8) []
++ = { 0x0000 /* A * H. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* C * H. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* I * H. */,
++ 0x8000 /* J * H. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* L * H. */ };
++
++VECT_VAR_DECL (expected_laneq4_static, hfloat, 16, 8) []
++ = { 0x648F /* A * M. */,
++ 0x7C00 /* B * M. */,
++ 0xE9ED /* C * M. */,
++ 0xFC00 /* D * M. */,
++ 0x53A0 /* I * M. */,
++ 0xEEA3 /* J * M. */,
++ 0xFC00 /* K * M. */,
++ 0x702B /* L * M. */ };
++
++VECT_VAR_DECL (expected_laneq5_static, hfloat, 16, 8) []
++ = { 0xD6B3 /* A * N. */,
++ 0xFC00 /* B * N. */,
++ 0x5C5A /* C * N. */,
++ 0x7C00 /* D * N. */,
++ 0xC59A /* I * N. */,
++ 0x60E0 /* J * N. */,
++ 0x7C00 /* K * N. */,
++ 0xE220 /* L * N. */ };
++
++VECT_VAR_DECL (expected_laneq6_static, hfloat, 16, 8) []
++ = { 0xCB5E /* A * O. */,
++ 0xFC00 /* B * O. */,
++ 0x50C9 /* C * O. */,
++ 0x7C00 /* D * O. */,
++ 0xBA29 /* I * O. */,
++ 0x555C /* J * O. */,
++ 0x7C00 /* K * O. */,
++ 0xD6BC /* L * O. */ };
++
++VECT_VAR_DECL (expected_laneq7_static, hfloat, 16, 8) []
++ = { 0x8000 /* A * P. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* C * P. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* I * P. */,
++ 0x0000 /* J * P. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* L * P. */ };
++
++void exec_vmulx_lane_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VMULX_LANE (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 4);
++ DECL_VARIABLE(vsrc_2, float, 16, 4);
++ VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A, B, C, D};
++ VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {E, F, G, H};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
++ VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vmulx_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 0);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_lane_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4), 3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VMULXQ_LANE (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 8);
++ VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A, B, C, D, I, J, K, L};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vmulxq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 0);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_lane_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 4), 3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VMULX_LANEQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_2, float, 16, 8);
++ VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {E, F, G, H, M, N, O, P};
++ VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 0);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 1);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 2);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 3);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq3_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 4);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq4_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 5);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq5_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 6);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq6_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 8), 7);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_laneq7_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VMULXQ_LANEQ (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 0);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 1);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 2);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 3);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq3_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 4);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq4_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 5);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq5_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 6);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq6_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_laneq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8), 7);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_laneq7_static, "");
++}
++
++int
++main (void)
++{
++ exec_vmulx_lane_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulx_n_f16_1.c
+@@ -0,0 +1,177 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (13.4)
++#define B FP16_C (__builtin_inff ())
++#define C FP16_C (-34.8)
++#define D FP16_C (-__builtin_inff ())
++#define E FP16_C (-0.0)
++#define F FP16_C (19.1)
++#define G FP16_C (-4.8)
++#define H FP16_C (0.0)
++
++float16_t elemE = E;
++float16_t elemF = F;
++float16_t elemG = G;
++float16_t elemH = H;
++
++#define I FP16_C (0.7)
++#define J FP16_C (-78)
++#define K FP16_C (11.23)
++#define L FP16_C (98)
++#define M FP16_C (87.1)
++#define N FP16_C (-8)
++#define O FP16_C (-1.1)
++#define P FP16_C (-9.7)
++
++/* Expected results for vmulx_n. */
++VECT_VAR_DECL (expected0_static, hfloat, 16, 4) []
++ = { 0x8000 /* A * E. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* C * E. */,
++ 0x4000 /* FP16_C (2.0f). */ };
++
++VECT_VAR_DECL (expected1_static, hfloat, 16, 4) []
++ = { 0x5BFF /* A * F. */,
++ 0x7C00 /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0xFC00 /* D * F. */ };
++
++VECT_VAR_DECL (expected2_static, hfloat, 16, 4) []
++ = { 0xD405 /* A * G. */,
++ 0xFC00 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0x7C00 /* D * G. */ };
++
++VECT_VAR_DECL (expected3_static, hfloat, 16, 4) []
++ = { 0x0000 /* A * H. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* C * H. */,
++ 0xC000 /* FP16_C (-2.0f). */ };
++
++VECT_VAR_DECL (expected0_static, hfloat, 16, 8) []
++ = { 0x8000 /* A * E. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* C * E. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* I * E. */,
++ 0x0000 /* J * E. */,
++ 0x8000 /* K * E. */,
++ 0x8000 /* L * E. */ };
++
++VECT_VAR_DECL (expected1_static, hfloat, 16, 8) []
++ = { 0x5BFF /* A * F. */,
++ 0x7C00 /* B * F. */,
++ 0xE131 /* C * F. */,
++ 0xFC00 /* D * F. */,
++ 0x4AAF /* I * F. */,
++ 0xE5D1 /* J * F. */,
++ 0x5AB3 /* K * F. */,
++ 0x674F /* L * F. */ };
++
++VECT_VAR_DECL (expected2_static, hfloat, 16, 8) []
++ = { 0xD405 /* A * G. */,
++ 0xFC00 /* B * G. */,
++ 0x5939 /* C * G. */,
++ 0x7C00 /* D * G. */,
++ 0xC2B9 /* I * G. */,
++ 0x5DDA /* J * G. */,
++ 0xD2BD /* K * G. */,
++ 0xDF5A /* L * G. */ };
++
++VECT_VAR_DECL (expected3_static, hfloat, 16, 8) []
++ = { 0x0000 /* A * H. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x8000 /* C * H. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x0000 /* I * H. */,
++ 0x8000 /* J * H. */,
++ 0x0000 /* K * H. */,
++ 0x0000 /* L * H. */ };
++
++void exec_vmulx_n_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VMULX_N (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE (vsrc_1, float, 16, 4);
++ VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A, B, C, D};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vmulx_n_f16 (VECT_VAR (vsrc_1, float, 16, 4), elemE);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_n_f16 (VECT_VAR (vsrc_1, float, 16, 4), elemF);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_n_f16 (VECT_VAR (vsrc_1, float, 16, 4), elemG);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vmulx_n_f16 (VECT_VAR (vsrc_1, float, 16, 4), elemH);
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected3_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VMULXQ_N (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE (vsrc_1, float, 16, 8);
++ VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A, B, C, D, I, J, K, L};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vmulxq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8), elemE);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected0_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8), elemF);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected1_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8), elemG);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected2_static, "");
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vmulxq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8), elemH);
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected3_static, "");
++}
++
++int
++main (void)
++{
++ exec_vmulx_n_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulxh_f16_1.c
+@@ -0,0 +1,50 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++#define A 13.4
++#define B __builtin_inff ()
++#define C -34.8
++#define D -__builtin_inff ()
++#define E 63.1
++#define F 0.0
++#define G -4.8
++#define H 0.0
++
++#define I 0.7
++#define J -__builtin_inff ()
++#define K 11.23
++#define L 98
++#define M 87.1
++#define N -0.0
++#define O -1.1
++#define P 7
++
++float16_t input_1[] = { A, B, C, D, I, J, K, L };
++float16_t input_2[] = { E, F, G, H, M, N, O, P };
++uint16_t expected[] = { 0x629B /* A * E. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x5939 /* C * G. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x53A0 /* I * M. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0xCA2C /* K * O. */,
++ 0x615C /* L * P. */ };
++
++#define TEST_MSG "VMULXH_F16"
++#define INSN_NAME vmulxh_f16
++
++#define INPUT_1 input_1
++#define INPUT_2 input_2
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulxh_lane_f16_1.c
+@@ -0,0 +1,91 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (13.4)
++#define B FP16_C (__builtin_inff ())
++#define C FP16_C (-34.8)
++#define D FP16_C (-__builtin_inff ())
++#define E FP16_C (63.1)
++#define F FP16_C (0.0)
++#define G FP16_C (-4.8)
++#define H FP16_C (0.0)
++
++#define I FP16_C (0.7)
++#define J FP16_C (-__builtin_inff ())
++#define K FP16_C (11.23)
++#define L FP16_C (98)
++#define M FP16_C (87.1)
++#define N FP16_C (-0.0)
++#define O FP16_C (-1.1)
++#define P FP16_C (7)
++
++extern void abort ();
++
++float16_t src1[8] = { A, B, C, D, I, J, K, L };
++VECT_VAR_DECL (src2, float, 16, 4) [] = { E, F, G, H };
++VECT_VAR_DECL (src2, float, 16, 8) [] = { E, F, G, H, M, N, O, P };
++
++/* Expected results for vmulxh_lane. */
++uint16_t expected[4] = { 0x629B /* A * E. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x5939 /* C * G. */,
++ 0xC000 /* FP16_C (-2.0f). */ };
++
++/* Expected results for vmulxh_lane. */
++uint16_t expected_laneq[8] = { 0x629B /* A * E. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0x5939 /* C * G. */,
++ 0xC000 /* FP16_C (-2.0f). */,
++ 0x53A0 /* I * M. */,
++ 0x4000 /* FP16_C (2.0f). */,
++ 0xCA2C /* K * O. */,
++ 0x615C /* L * P. */ };
++
++void exec_vmulxh_lane_f16 (void)
++{
++#define CHECK_LANE(N)\
++ ret = vmulxh_lane_f16 (src1[N], VECT_VAR (vsrc2, float, 16, 4), N);\
++ if (*(uint16_t *) &ret != expected[N])\
++ abort ();
++
++ DECL_VARIABLE(vsrc2, float, 16, 4);
++ VLOAD (vsrc2, src2, , float, f, 16, 4);
++ float16_t ret;
++
++ CHECK_LANE(0)
++ CHECK_LANE(1)
++ CHECK_LANE(2)
++ CHECK_LANE(3)
++
++#undef CHECK_LANE
++#define CHECK_LANE(N)\
++ ret = vmulxh_laneq_f16 (src1[N], VECT_VAR (vsrc2, float, 16, 8), N);\
++ if (*(uint16_t *) &ret != expected_laneq[N])\
++ abort ();
++
++ DECL_VARIABLE(vsrc2, float, 16, 8);
++ VLOAD (vsrc2, src2, q, float, f, 16, 8);
++
++ CHECK_LANE(0)
++ CHECK_LANE(1)
++ CHECK_LANE(2)
++ CHECK_LANE(3)
++ CHECK_LANE(4)
++ CHECK_LANE(5)
++ CHECK_LANE(6)
++ CHECK_LANE(7)
++}
++
++int
++main (void)
++{
++ exec_vmulxh_lane_f16 ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmvn.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmvn.c
+@@ -120,14 +120,14 @@ FNNAME (INSN_NAME)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected, "");
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected, "");
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected, "");
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vneg.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vneg.c
+@@ -21,24 +21,53 @@ VECT_VAR_DECL(expected,int,32,4) [] = { 0x10, 0xf, 0xe, 0xd };
+ /* Expected results for float32 variants. Needs to be separated since
+ the generic test function does not test floating-point
+ versions. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_float16, hfloat, 16, 4) [] = { 0xc09a, 0xc09a,
++ 0xc09a, 0xc09a };
++VECT_VAR_DECL(expected_float16, hfloat, 16, 8) [] = { 0xc2cd, 0xc2cd,
++ 0xc2cd, 0xc2cd,
++ 0xc2cd, 0xc2cd,
++ 0xc2cd, 0xc2cd };
++#endif
+ VECT_VAR_DECL(expected_float32,hfloat,32,2) [] = { 0xc0133333, 0xc0133333 };
+ VECT_VAR_DECL(expected_float32,hfloat,32,4) [] = { 0xc059999a, 0xc059999a,
+ 0xc059999a, 0xc059999a };
+
+ void exec_vneg_f32(void)
+ {
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector, float, 32, 2);
+ DECL_VARIABLE(vector, float, 32, 4);
+
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector_res, float, 32, 2);
+ DECL_VARIABLE(vector_res, float, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, 2.3f);
++ VDUP(vector, q, float, f, 16, 8, 3.4f);
++#endif
+ VDUP(vector, , float, f, 32, 2, 2.3f);
+ VDUP(vector, q, float, f, 32, 4, 3.4f);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_UNARY_OP(INSN_NAME, , float, f, 16, 4);
++ TEST_UNARY_OP(INSN_NAME, q, float, f, 16, 8);
++#endif
+ TEST_UNARY_OP(INSN_NAME, , float, f, 32, 2);
+ TEST_UNARY_OP(INSN_NAME, q, float, f, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_float16, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_float16, "");
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_float32, "");
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_float32, "");
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vnegh_f16_1.c
+@@ -0,0 +1,39 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++uint16_t expected[] =
++{
++ 0x8000 /* -0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0xc000 /* -2.000000 */,
++ 0xc233 /* -3.099609 */,
++ 0xcd00 /* -20.000000 */,
++ 0xb666 /* -0.399902 */,
++ 0x409a /* 2.300781 */,
++ 0xbd52 /* -1.330078 */,
++ 0x479a /* 7.601562 */,
++ 0xb4f6 /* -0.310059 */,
++ 0xb55d /* -0.335205 */,
++ 0xb800 /* -0.500000 */,
++ 0xbc00 /* -1.000000 */,
++ 0xca91 /* -13.132812 */,
++ 0x464d /* 6.300781 */,
++ 0xcd00 /* -20.000000 */,
++ 0xfc00 /* -inf */,
++ 0x7c00 /* inf */
++};
++
++#define TEST_MSG "VNEGH_F16"
++#define INSN_NAME vnegh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vpXXX.inc
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vpXXX.inc
+@@ -21,6 +21,9 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VARIABLE(vector, uint, 8, 8);
+ DECL_VARIABLE(vector, uint, 16, 4);
+ DECL_VARIABLE(vector, uint, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++#endif
+ DECL_VARIABLE(vector, float, 32, 2);
+
+ DECL_VARIABLE(vector_res, int, 8, 8);
+@@ -29,6 +32,9 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VARIABLE(vector_res, uint, 8, 8);
+ DECL_VARIABLE(vector_res, uint, 16, 4);
+ DECL_VARIABLE(vector_res, uint, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, float, 16, 4);
++#endif
+ DECL_VARIABLE(vector_res, float, 32, 2);
+
+ clean_results ();
+@@ -40,6 +46,9 @@ void FNNAME (INSN_NAME) (void)
+ VLOAD(vector, buffer, , uint, u, 8, 8);
+ VLOAD(vector, buffer, , uint, u, 16, 4);
+ VLOAD(vector, buffer, , uint, u, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+
+ /* Apply a binary operator named INSN_NAME. */
+@@ -49,14 +58,20 @@ void FNNAME (INSN_NAME) (void)
+ TEST_VPXXX(INSN_NAME, uint, u, 8, 8);
+ TEST_VPXXX(INSN_NAME, uint, u, 16, 4);
+ TEST_VPXXX(INSN_NAME, uint, u, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VPXXX(INSN_NAME, float, f, 16, 4);
++#endif
+ TEST_VPXXX(INSN_NAME, float, f, 32, 2);
+
+- CHECK(TEST_MSG, int, 8, 8, PRIx32, expected, "");
+- CHECK(TEST_MSG, int, 16, 4, PRIx64, expected, "");
++ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected, "");
++ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 2, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 8, 8, PRIx32, expected, "");
+- CHECK(TEST_MSG, uint, 16, 4, PRIx64, expected, "");
++ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected, "");
++ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, "");
+ }
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vpadd.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vpadd.c
+@@ -14,6 +14,9 @@ VECT_VAR_DECL(expected,uint,8,8) [] = { 0xe1, 0xe5, 0xe9, 0xed,
+ 0xe1, 0xe5, 0xe9, 0xed };
+ VECT_VAR_DECL(expected,uint,16,4) [] = { 0xffe1, 0xffe5, 0xffe1, 0xffe5 };
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0xffffffe1, 0xffffffe1 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xcfc0, 0xcec0, 0xcfc0, 0xcec0 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1f80000, 0xc1f80000 };
+
+ #include "vpXXX.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vpmax.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vpmax.c
+@@ -15,6 +15,9 @@ VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
+ 0xf1, 0xf3, 0xf5, 0xf7 };
+ VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff1, 0xfff3, 0xfff1, 0xfff3 };
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff1, 0xfffffff1 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xcb80, 0xca80, 0xcb80, 0xca80 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1700000, 0xc1700000 };
+
+ #include "vpXXX.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vpmin.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vpmin.c
+@@ -15,6 +15,9 @@ VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
+ 0xf0, 0xf2, 0xf4, 0xf6 };
+ VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff0, 0xfff2, 0xfff0, 0xfff2 };
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff0, 0xfffffff0 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xcc00, 0xcb00, 0xcc00, 0xcb00 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1800000, 0xc1800000 };
+
+ #include "vpXXX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vpminmaxnm_f16_1.c
+@@ -0,0 +1,114 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (123.4)
++#define B FP16_C (__builtin_nanf ("")) /* NaN */
++#define C FP16_C (-34.8)
++#define D FP16_C (1024)
++#define E FP16_C (663.1)
++#define F FP16_C (169.1)
++#define G FP16_C (-4.8)
++#define H FP16_C (-__builtin_nanf ("")) /* NaN */
++
++#define I FP16_C (0.7)
++#define J FP16_C (-78)
++#define K FP16_C (101.23)
++#define L FP16_C (-1098)
++#define M FP16_C (870.1)
++#define N FP16_C (-8781)
++#define O FP16_C (__builtin_inff ()) /* +Inf */
++#define P FP16_C (-__builtin_inff ()) /* -Inf */
++
++
++/* Expected results for vpminnm. */
++VECT_VAR_DECL (expected_min_static, hfloat, 16, 4) []
++ = { 0x57B6 /* A. */, 0xD05A /* C. */, 0x5949 /* F. */, 0xC4CD /* G. */ };
++
++VECT_VAR_DECL (expected_min_static, hfloat, 16, 8) []
++ = { 0x57B6 /* A. */, 0xD05A /* C. */, 0xD4E0 /* J. */, 0xE44A /* L. */,
++ 0x5949 /* F. */, 0xC4CD /* G. */, 0xF04A /* N. */, 0xFC00 /* P. */ };
++
++/* expected_max results for vpmaxnm. */
++VECT_VAR_DECL (expected_max_static, hfloat, 16, 4) []
++ = { 0x57B6 /* A. */, 0x6400 /* D. */, 0x612E /* E. */, 0xC4CD /* G. */ };
++
++VECT_VAR_DECL (expected_max_static, hfloat, 16, 8) []
++ = { 0x57B6 /* A. */, 0x6400 /* D. */, 0x399A /* I. */, 0x5654 /* K. */,
++ 0x612E /* E. */, 0xC4CD /* G. */, 0x62CC /* M. */, 0x7C00 /* O. */ };
++
++void exec_vpminmaxnm_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VPMINNM (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 4);
++ DECL_VARIABLE(vsrc_2, float, 16, 4);
++ VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A, B, C, D};
++ VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {E, F, G, H};
++ VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
++ VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vpminnm_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4));
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_min_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VPMINNMQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc_1, float, 16, 8);
++ DECL_VARIABLE(vsrc_2, float, 16, 8);
++ VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A, B, C, D, I, J, K, L};
++ VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {E, F, G, H, M, N, O, P};
++ VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
++ VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vpminnmq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8));
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_min_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VPMAXNM (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 4)
++ = vpmaxnm_f16 (VECT_VAR (vsrc_1, float, 16, 4),
++ VECT_VAR (vsrc_2, float, 16, 4));
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_max_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VPMAXNMQ (FP16)"
++ clean_results ();
++
++ VECT_VAR (vector_res, float, 16, 8)
++ = vpmaxnmq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
++ VECT_VAR (vsrc_2, float, 16, 8));
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_max_static, "");
++}
++
++int
++main (void)
++{
++ exec_vpminmaxnm_f16 ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vqabs.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vqabs.c
+@@ -90,9 +90,9 @@ void vqabs_extra()
+ TEST_UNARY_SAT_OP(INSN_NAME, q, int, s, 32, 4, expected_cumulative_sat_min_neg, MSG);
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_min_neg, MSG);
+- CHECK(TEST_MSG, int, 16, 4, PRIx8, expected_min_neg, MSG);
+- CHECK(TEST_MSG, int, 32, 2, PRIx8, expected_min_neg, MSG);
++ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected_min_neg, MSG);
++ CHECK(TEST_MSG, int, 32, 2, PRIx32, expected_min_neg, MSG);
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_min_neg, MSG);
+- CHECK(TEST_MSG, int, 16, 8, PRIx8, expected_min_neg, MSG);
+- CHECK(TEST_MSG, int, 32, 4, PRIx8, expected_min_neg, MSG);
++ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_min_neg, MSG);
++ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_min_neg, MSG);
+ }
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vqdmull.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vqdmull.c
+@@ -63,8 +63,8 @@ void FNNAME (INSN_NAME) (void)
+ TEST_VQDMULL(int, s, 16, 32, 4, expected_cumulative_sat, "");
+ TEST_VQDMULL(int, s, 32, 64, 2, expected_cumulative_sat, "");
+
+- CHECK (TEST_MSG, int, 32, 4, PRIx16, expected, "");
+- CHECK (TEST_MSG, int, 64, 2, PRIx32, expected, "");
++ CHECK (TEST_MSG, int, 32, 4, PRIx32, expected, "");
++ CHECK (TEST_MSG, int, 64, 2, PRIx64, expected, "");
+
+ VDUP(vector, , int, s, 16, 4, 0x8000);
+ VDUP(vector2, , int, s, 16, 4, 0x8000);
+@@ -75,8 +75,8 @@ void FNNAME (INSN_NAME) (void)
+ TEST_VQDMULL(int, s, 16, 32, 4, expected_cumulative_sat2, TEST_MSG2);
+ TEST_VQDMULL(int, s, 32, 64, 2, expected_cumulative_sat2, TEST_MSG2);
+
+- CHECK (TEST_MSG, int, 32, 4, PRIx16, expected2, TEST_MSG2);
+- CHECK (TEST_MSG, int, 64, 2, PRIx32, expected2, TEST_MSG2);
++ CHECK (TEST_MSG, int, 32, 4, PRIx32, expected2, TEST_MSG2);
++ CHECK (TEST_MSG, int, 64, 2, PRIx64, expected2, TEST_MSG2);
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vqneg.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vqneg.c
+@@ -90,9 +90,9 @@ void vqneg_extra()
+ TEST_UNARY_SAT_OP(INSN_NAME, q, int, s, 32, 4, expected_cumulative_sat_min_neg, MSG);
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_min_neg, MSG);
+- CHECK(TEST_MSG, int, 16, 4, PRIx8, expected_min_neg, MSG);
+- CHECK(TEST_MSG, int, 32, 2, PRIx8, expected_min_neg, MSG);
++ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected_min_neg, MSG);
++ CHECK(TEST_MSG, int, 32, 2, PRIx32, expected_min_neg, MSG);
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_min_neg, MSG);
+- CHECK(TEST_MSG, int, 16, 8, PRIx8, expected_min_neg, MSG);
+- CHECK(TEST_MSG, int, 32, 4, PRIx8, expected_min_neg, MSG);
++ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_min_neg, MSG);
++ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_min_neg, MSG);
+ }
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vqtbX.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vqtbX.c
+@@ -318,13 +318,13 @@ void exec_vqtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vqtbl1, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vqtbl1, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbl1, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbl1, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VQTBL1Q"
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vqtbl1q, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vqtbl1q, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbl1q, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbl1q, "");
+
+ /* Check vqtbl2. */
+ clean_results ();
+@@ -334,13 +334,13 @@ void exec_vqtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vqtbl2, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vqtbl2, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbl2, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbl2, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VQTBL2Q"
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vqtbl2q, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vqtbl2q, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbl2q, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbl2q, "");
+
+ /* Check vqtbl3. */
+ clean_results ();
+@@ -350,13 +350,13 @@ void exec_vqtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vqtbl3, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vqtbl3, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbl3, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbl3, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VQTBL3Q"
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vqtbl3q, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vqtbl3q, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbl3q, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbl3q, "");
+
+ /* Check vqtbl4. */
+ clean_results ();
+@@ -366,13 +366,13 @@ void exec_vqtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vqtbl4, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vqtbl4, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbl4, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbl4, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VQTBL4Q"
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vqtbl4q, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vqtbl4q, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbl4q, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbl4q, "");
+
+
+ /* Now test VQTBX. */
+@@ -455,13 +455,13 @@ void exec_vqtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vqtbx1, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vqtbx1, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbx1, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbx1, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VQTBX1Q"
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vqtbx1q, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vqtbx1q, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbx1q, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbx1q, "");
+
+ /* Check vqtbx2. */
+ clean_results ();
+@@ -471,13 +471,13 @@ void exec_vqtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vqtbx2, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vqtbx2, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbx2, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbx2, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VQTBX2Q"
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vqtbx2q, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vqtbx2q, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbx2q, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbx2q, "");
+
+ /* Check vqtbx3. */
+ clean_results ();
+@@ -487,13 +487,13 @@ void exec_vqtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vqtbx3, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vqtbx3, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbx3, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbx3, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VQTBX3Q"
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vqtbx3q, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vqtbx3q, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbx3q, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbx3q, "");
+
+ /* Check vqtbx4. */
+ clean_results ();
+@@ -503,13 +503,13 @@ void exec_vqtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vqtbx4, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vqtbx4, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbx4, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vqtbx4, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VQTBX4Q"
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vqtbx4q, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vqtbx4q, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbx4q, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vqtbx4q, "");
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrecpe.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrecpe.c
+@@ -7,6 +7,14 @@
+ VECT_VAR_DECL(expected_positive,uint,32,2) [] = { 0xffffffff, 0xffffffff };
+ VECT_VAR_DECL(expected_positive,uint,32,4) [] = { 0xbf000000, 0xbf000000,
+ 0xbf000000, 0xbf000000 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_positive, hfloat, 16, 4) [] = { 0x3834, 0x3834,
++ 0x3834, 0x3834 };
++VECT_VAR_DECL(expected_positive, hfloat, 16, 8) [] = { 0x2018, 0x2018,
++ 0x2018, 0x2018,
++ 0x2018, 0x2018,
++ 0x2018, 0x2018 };
++#endif
+ VECT_VAR_DECL(expected_positive,hfloat,32,2) [] = { 0x3f068000, 0x3f068000 };
+ VECT_VAR_DECL(expected_positive,hfloat,32,4) [] = { 0x3c030000, 0x3c030000,
+ 0x3c030000, 0x3c030000 };
+@@ -15,24 +23,56 @@ VECT_VAR_DECL(expected_positive,hfloat,32,4) [] = { 0x3c030000, 0x3c030000,
+ VECT_VAR_DECL(expected_negative,uint,32,2) [] = { 0x80000000, 0x80000000 };
+ VECT_VAR_DECL(expected_negative,uint,32,4) [] = { 0xee800000, 0xee800000,
+ 0xee800000, 0xee800000 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_negative, hfloat, 16, 4) [] = { 0xae64, 0xae64,
++ 0xae64, 0xae64 };
++VECT_VAR_DECL(expected_negative, hfloat, 16, 8) [] = { 0xa018, 0xa018,
++ 0xa018, 0xa018,
++ 0xa018, 0xa018,
++ 0xa018, 0xa018 };
++#endif
+ VECT_VAR_DECL(expected_negative,hfloat,32,2) [] = { 0xbdcc8000, 0xbdcc8000 };
+ VECT_VAR_DECL(expected_negative,hfloat,32,4) [] = { 0xbc030000, 0xbc030000,
+ 0xbc030000, 0xbc030000 };
+
+ /* Expected results with FP special values (NaN, infinity). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp1, hfloat, 16, 4) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++VECT_VAR_DECL(expected_fp1, hfloat, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++#endif
+ VECT_VAR_DECL(expected_fp1,hfloat,32,2) [] = { 0x7fc00000, 0x7fc00000 };
+ VECT_VAR_DECL(expected_fp1,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+
+ /* Expected results with FP special values (zero, large value). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp2, hfloat, 16, 4) [] = { 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00 };
++VECT_VAR_DECL(expected_fp2, hfloat, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
++#endif
+ VECT_VAR_DECL(expected_fp2,hfloat,32,2) [] = { 0x7f800000, 0x7f800000 };
+ VECT_VAR_DECL(expected_fp2,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+
+ /* Expected results with FP special values (-0, -infinity). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp3, hfloat, 16, 4) [] = { 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00};
++VECT_VAR_DECL(expected_fp3, hfloat, 16, 8) [] = { 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000,
++ 0x8000, 0x8000 };
++#endif
+ VECT_VAR_DECL(expected_fp3,hfloat,32,2) [] = { 0xff800000, 0xff800000 };
+ VECT_VAR_DECL(expected_fp3,hfloat,32,4) [] = { 0x80000000, 0x80000000,
+ 0x80000000, 0x80000000 };
+
+ /* Expected results with FP special large negative value. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp4, hfloat, 16, 4) [] = { 0x8000, 0x8000,
++ 0x8000, 0x8000 };
++#endif
+ VECT_VAR_DECL(expected_fp4,hfloat,32,2) [] = { 0x80000000, 0x80000000 };
+
+ #define TEST_MSG "VRECPE/VRECPEQ"
+@@ -50,11 +90,19 @@ void exec_vrecpe(void)
+ /* No need for 64 bits variants. */
+ DECL_VARIABLE(vector, uint, 32, 2);
+ DECL_VARIABLE(vector, uint, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector, float, 32, 2);
+ DECL_VARIABLE(vector, float, 32, 4);
+
+ DECL_VARIABLE(vector_res, uint, 32, 2);
+ DECL_VARIABLE(vector_res, uint, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector_res, float, 32, 2);
+ DECL_VARIABLE(vector_res, float, 32, 4);
+
+@@ -62,88 +110,165 @@ void exec_vrecpe(void)
+
+ /* Choose init value arbitrarily, positive. */
+ VDUP(vector, , uint, u, 32, 2, 0x12345678);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, 1.9f);
++#endif
+ VDUP(vector, , float, f, 32, 2, 1.9f);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, q, float, f, 16, 8, 125.0f);
++#endif
+ VDUP(vector, q, uint, u, 32, 4, 0xABCDEF10);
+ VDUP(vector, q, float, f, 32, 4, 125.0f);
+
+ /* Apply the operator. */
+ TEST_VRECPE(, uint, u, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPE(, float, f, 16, 4);
++#endif
+ TEST_VRECPE(, float, f, 32, 2);
+ TEST_VRECPE(q, uint, u, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPE(q, float, f, 16, 8);
++#endif
+ TEST_VRECPE(q, float, f, 32, 4);
+
+ #define CMT " (positive input)"
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_positive, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_positive, CMT);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_positive, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_positive, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_positive, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_positive, CMT);
+
+ /* Choose init value arbitrarily,negative. */
+ VDUP(vector, , uint, u, 32, 2, 0xFFFFFFFF);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, -10.0f);
++#endif
+ VDUP(vector, , float, f, 32, 2, -10.0f);
+ VDUP(vector, q, uint, u, 32, 4, 0x89081234);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, q, float, f, 16, 8, -125.0f);
++#endif
+ VDUP(vector, q, float, f, 32, 4, -125.0f);
+
+ /* Apply the operator. */
+ TEST_VRECPE(, uint, u, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPE(, float, f, 16, 4);
++#endif
+ TEST_VRECPE(, float, f, 32, 2);
+ TEST_VRECPE(q, uint, u, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPE(q, float, f, 16, 8);
++#endif
+ TEST_VRECPE(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " (negative input)"
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_negative, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_negative, CMT);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_negative, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_negative, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_negative, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_negative, CMT);
+
+ /* Test FP variants with special input values (NaN, infinity). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, NAN);
++ VDUP(vector, q, float, f, 16, 8, HUGE_VALF);
++#endif
+ VDUP(vector, , float, f, 32, 2, NAN);
+ VDUP(vector, q, float, f, 32, 4, HUGE_VALF);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPE(, float, f, 16, 4);
++ TEST_VRECPE(q, float, f, 16, 8);
++#endif
+ TEST_VRECPE(, float, f, 32, 2);
+ TEST_VRECPE(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (NaN, infinity)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp1, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp1, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp1, CMT);
+
+ /* Test FP variants with special input values (zero, large value). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, 0.0f);
++ VDUP(vector, q, float, f, 16, 8, 8.97229e37f /*9.0e37f*/);
++#endif
+ VDUP(vector, , float, f, 32, 2, 0.0f);
+ VDUP(vector, q, float, f, 32, 4, 8.97229e37f /*9.0e37f*/);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPE(, float, f, 16, 4);
++ TEST_VRECPE(q, float, f, 16, 8);
++#endif
+ TEST_VRECPE(, float, f, 32, 2);
+ TEST_VRECPE(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (zero, large value)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp2, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp2, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp2, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp2, CMT);
+
+ /* Test FP variants with special input values (-0, -infinity). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, -0.0f);
++ VDUP(vector, q, float, f, 16, 8, -HUGE_VALF);
++#endif
+ VDUP(vector, , float, f, 32, 2, -0.0f);
+ VDUP(vector, q, float, f, 32, 4, -HUGE_VALF);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPE(, float, f, 16, 4);
++ TEST_VRECPE(q, float, f, 16, 8);
++#endif
+ TEST_VRECPE(, float, f, 32, 2);
+ TEST_VRECPE(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (-0, -infinity)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp3, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp3, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp3, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp3, CMT);
+
+ /* Test FP variants with special input values (large negative value). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, -9.0e37f);
++#endif
+ VDUP(vector, , float, f, 32, 2, -9.0e37f);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPE(, float, f, 16, 4);
++#endif
+ TEST_VRECPE(, float, f, 32, 2);
+
+ #undef CMT
+ #define CMT " FP special (large negative value)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp4, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp4, CMT);
+ }
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrecpeh_f16_1.c
+@@ -0,0 +1,42 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++#define A 123.4
++#define B 567.8
++#define C 34.8
++#define D 1024
++#define E 663.1
++#define F 144.0
++#define G 4.8
++#define H 77
++
++#define RECP_A 0x2028 /* 1/A. */
++#define RECP_B 0x1734 /* 1/B. */
++#define RECP_C 0x275C /* 1/C. */
++#define RECP_D 0x13FC /* 1/D. */
++#define RECP_E 0x162C /* 1/E. */
++#define RECP_F 0x1F18 /* 1/F. */
++#define RECP_G 0x32A8 /* 1/G. */
++#define RECP_H 0x22A4 /* 1/H. */
++
++float16_t input[] = { A, B, C, D, E, F, G, H };
++uint16_t expected[] = { RECP_A, RECP_B, RECP_C, RECP_D,
++ RECP_E, RECP_F, RECP_G, RECP_H };
++
++#define TEST_MSG "VRECPEH_F16"
++#define INSN_NAME vrecpeh_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrecps.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrecps.c
+@@ -4,22 +4,51 @@
+ #include <math.h>
+
+ /* Expected results with positive input. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xd70c, 0xd70c, 0xd70c, 0xd70c };
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xcedc, 0xcedc, 0xcedc, 0xcedc,
++ 0xcedc, 0xcedc, 0xcedc, 0xcedc };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc2e19eb7, 0xc2e19eb7 };
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1db851f, 0xc1db851f,
+ 0xc1db851f, 0xc1db851f };
+
+ /* Expected results with FP special values (NaN). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp1, hfloat, 16, 4) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++VECT_VAR_DECL(expected_fp1, hfloat, 16, 8) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++#endif
+ VECT_VAR_DECL(expected_fp1,hfloat,32,2) [] = { 0x7fc00000, 0x7fc00000 };
+ VECT_VAR_DECL(expected_fp1,hfloat,32,4) [] = { 0x7fc00000, 0x7fc00000,
+ 0x7fc00000, 0x7fc00000 };
+
+ /* Expected results with FP special values (infinity, 0) and normal
+ values. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp2, hfloat, 16, 4) [] = { 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00 };
++VECT_VAR_DECL(expected_fp2, hfloat, 16, 8) [] = { 0x4000, 0x4000,
++ 0x4000, 0x4000,
++ 0x4000, 0x4000,
++ 0x4000, 0x4000 };
++#endif
+ VECT_VAR_DECL(expected_fp2,hfloat,32,2) [] = { 0xff800000, 0xff800000 };
+ VECT_VAR_DECL(expected_fp2,hfloat,32,4) [] = { 0x40000000, 0x40000000,
+ 0x40000000, 0x40000000 };
+
+ /* Expected results with FP special values (infinity, 0). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp3, hfloat, 16, 4) [] = { 0x4000, 0x4000,
++ 0x4000, 0x4000 };
++VECT_VAR_DECL(expected_fp3, hfloat, 16, 8) [] = { 0x4000, 0x4000,
++ 0x4000, 0x4000,
++ 0x4000, 0x4000,
++ 0x4000, 0x4000 };
++#endif
+ VECT_VAR_DECL(expected_fp3,hfloat,32,2) [] = { 0x40000000, 0x40000000 };
+ VECT_VAR_DECL(expected_fp3,hfloat,32,4) [] = { 0x40000000, 0x40000000,
+ 0x40000000, 0x40000000 };
+@@ -38,74 +67,143 @@ void exec_vrecps(void)
+ VECT_VAR(vector_res, T1, W, N))
+
+ /* No need for integer variants. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector, float, 32, 2);
+ DECL_VARIABLE(vector, float, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector2, float, 32, 2);
+ DECL_VARIABLE(vector2, float, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector_res, float, 32, 2);
+ DECL_VARIABLE(vector_res, float, 32, 4);
+
+ clean_results ();
+
+ /* Choose init value arbitrarily. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, 12.9f);
++ VDUP(vector, q, float, f, 16, 8, 9.2f);
++#endif
+ VDUP(vector, , float, f, 32, 2, 12.9f);
+ VDUP(vector, q, float, f, 32, 4, 9.2f);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector2, , float, f, 16, 4, 8.9f);
++ VDUP(vector2, q, float, f, 16, 8, 3.2f);
++#endif
+ VDUP(vector2, , float, f, 32, 2, 8.9f);
+ VDUP(vector2, q, float, f, 32, 4, 3.2f);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPS(, float, f, 16, 4);
++ TEST_VRECPS(q, float, f, 16, 8);
++#endif
+ TEST_VRECPS(, float, f, 32, 2);
+ TEST_VRECPS(q, float, f, 32, 4);
+
+ #define CMT " (positive input)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, CMT);
+
+
+ /* Test FP variants with special input values (NaN). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, NAN);
++ VDUP(vector2, q, float, f, 16, 8, NAN);
++#endif
+ VDUP(vector, , float, f, 32, 2, NAN);
+ VDUP(vector2, q, float, f, 32, 4, NAN);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPS(, float, f, 16, 4);
++ TEST_VRECPS(q, float, f, 16, 8);
++#endif
+ TEST_VRECPS(, float, f, 32, 2);
+ TEST_VRECPS(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (NaN)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp1, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp1, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp1, CMT);
+
+
+ /* Test FP variants with special input values (infinity, 0). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, HUGE_VALF);
++ VDUP(vector, q, float, f, 16, 8, 0.0f);
++ VDUP(vector2, q, float, f, 16, 8, 3.2f); /* Restore a normal value. */
++#endif
+ VDUP(vector, , float, f, 32, 2, HUGE_VALF);
+ VDUP(vector, q, float, f, 32, 4, 0.0f);
+ VDUP(vector2, q, float, f, 32, 4, 3.2f); /* Restore a normal value. */
+
++
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPS(, float, f, 16, 4);
++ TEST_VRECPS(q, float, f, 16, 8);
++#endif
+ TEST_VRECPS(, float, f, 32, 2);
+ TEST_VRECPS(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (infinity, 0) and normal value"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp2, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp2, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp2, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp2, CMT);
+
+
+ /* Test FP variants with only special input values (infinity, 0). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, HUGE_VALF);
++ VDUP(vector, q, float, f, 16, 8, 0.0f);
++ VDUP(vector2, , float, f, 16, 4, 0.0f);
++ VDUP(vector2, q, float, f, 16, 8, HUGE_VALF);
++#endif
+ VDUP(vector, , float, f, 32, 2, HUGE_VALF);
+ VDUP(vector, q, float, f, 32, 4, 0.0f);
+ VDUP(vector2, , float, f, 32, 2, 0.0f);
+ VDUP(vector2, q, float, f, 32, 4, HUGE_VALF);
+
++
+ /* Apply the operator */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRECPS(, float, f, 16, 4);
++ TEST_VRECPS(q, float, f, 16, 8);
++#endif
+ TEST_VRECPS(, float, f, 32, 2);
+ TEST_VRECPS(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (infinity, 0)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp3, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp3, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp3, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp3, CMT);
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrecpsh_f16_1.c
+@@ -0,0 +1,50 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++#define A 12.4
++#define B -5.8
++#define C -3.8
++#define D 10
++#define E 66.1
++#define F 16.1
++#define G -4.8
++#define H -77
++
++#define I 0.7
++#define J -78
++#define K 10.23
++#define L 98
++#define M 87
++#define N -87.81
++#define O -1.1
++#define P 47.8
++
++float16_t input_1[] = { A, B, C, D, I, J, K, L };
++float16_t input_2[] = { E, F, G, H, M, N, O, P };
++uint16_t expected[] = { 0xE264 /* 2.0f - A * E. */,
++ 0x55F6 /* 2.0f - B * F. */,
++ 0xCC10 /* 2.0f - C * G. */,
++ 0x6208 /* 2.0f - D * H. */,
++ 0xD35D /* 2.0f - I * M. */,
++ 0xEEB0 /* 2.0f - J * N. */,
++ 0x4A9F /* 2.0f - K * O. */,
++ 0xEC93 /* 2.0f - L * P. */ };
++
++#define TEST_MSG "VRECPSH_F16"
++#define INSN_NAME vrecpsh_f16
++
++#define INPUT_1 input_1
++#define INPUT_2 input_2
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "binary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrecpxh_f16_1.c
+@@ -0,0 +1,32 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++
++float16_t input[] = { 123.4, 567.8, 34.8, 1024, 663.1, 144.0, 4.8, 77 };
++/* Expected results are calculated by:
++ for (index = 0; index < 8; index++)
++ {
++ uint16_t src_cast = * (uint16_t *) &src[index];
++ * (uint16_t *) &expected[index] =
++ (src_cast & 0x8000) | (~src_cast & 0x7C00);
++ } */
++uint16_t expected[8] = { 0x2800, 0x1C00, 0x2C00, 0x1800,
++ 0x1C00, 0x2400, 0x3800, 0x2800 };
++
++#define TEST_MSG "VRECPXH_F16"
++#define INSN_NAME vrecpxh_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vreinterpret.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vreinterpret.c
+@@ -21,6 +21,8 @@ VECT_VAR_DECL(expected_s8_8,int,8,8) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+ 0xf4, 0xf5, 0xf6, 0xf7 };
+ VECT_VAR_DECL(expected_s8_9,int,8,8) [] = { 0xf0, 0xff, 0xf1, 0xff,
+ 0xf2, 0xff, 0xf3, 0xff };
++VECT_VAR_DECL(expected_s8_10,int,8,8) [] = { 0x00, 0xcc, 0x80, 0xcb,
++ 0x00, 0xcb, 0x80, 0xca };
+
+ /* Expected results for vreinterpret_s16_xx. */
+ VECT_VAR_DECL(expected_s16_1,int,16,4) [] = { 0xf1f0, 0xf3f2, 0xf5f4, 0xf7f6 };
+@@ -32,6 +34,7 @@ VECT_VAR_DECL(expected_s16_6,int,16,4) [] = { 0xfff0, 0xffff, 0xfff1, 0xffff };
+ VECT_VAR_DECL(expected_s16_7,int,16,4) [] = { 0xfff0, 0xffff, 0xffff, 0xffff };
+ VECT_VAR_DECL(expected_s16_8,int,16,4) [] = { 0xf1f0, 0xf3f2, 0xf5f4, 0xf7f6 };
+ VECT_VAR_DECL(expected_s16_9,int,16,4) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff3 };
++VECT_VAR_DECL(expected_s16_10,int,16,4) [] = { 0xcc00, 0xcb80, 0xcb00, 0xca80 };
+
+ /* Expected results for vreinterpret_s32_xx. */
+ VECT_VAR_DECL(expected_s32_1,int,32,2) [] = { 0xf3f2f1f0, 0xf7f6f5f4 };
+@@ -43,6 +46,7 @@ VECT_VAR_DECL(expected_s32_6,int,32,2) [] = { 0xfffffff0, 0xfffffff1 };
+ VECT_VAR_DECL(expected_s32_7,int,32,2) [] = { 0xfffffff0, 0xffffffff };
+ VECT_VAR_DECL(expected_s32_8,int,32,2) [] = { 0xf3f2f1f0, 0xf7f6f5f4 };
+ VECT_VAR_DECL(expected_s32_9,int,32,2) [] = { 0xfff1fff0, 0xfff3fff2 };
++VECT_VAR_DECL(expected_s32_10,int,32,2) [] = { 0xcb80cc00, 0xca80cb00 };
+
+ /* Expected results for vreinterpret_s64_xx. */
+ VECT_VAR_DECL(expected_s64_1,int,64,1) [] = { 0xf7f6f5f4f3f2f1f0 };
+@@ -54,6 +58,7 @@ VECT_VAR_DECL(expected_s64_6,int,64,1) [] = { 0xfffffff1fffffff0 };
+ VECT_VAR_DECL(expected_s64_7,int,64,1) [] = { 0xfffffffffffffff0 };
+ VECT_VAR_DECL(expected_s64_8,int,64,1) [] = { 0xf7f6f5f4f3f2f1f0 };
+ VECT_VAR_DECL(expected_s64_9,int,64,1) [] = { 0xfff3fff2fff1fff0 };
++VECT_VAR_DECL(expected_s64_10,int,64,1) [] = { 0xca80cb00cb80cc00 };
+
+ /* Expected results for vreinterpret_u8_xx. */
+ VECT_VAR_DECL(expected_u8_1,uint,8,8) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+@@ -74,6 +79,8 @@ VECT_VAR_DECL(expected_u8_8,uint,8,8) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+ 0xf4, 0xf5, 0xf6, 0xf7 };
+ VECT_VAR_DECL(expected_u8_9,uint,8,8) [] = { 0xf0, 0xff, 0xf1, 0xff,
+ 0xf2, 0xff, 0xf3, 0xff };
++VECT_VAR_DECL(expected_u8_10,uint,8,8) [] = { 0x00, 0xcc, 0x80, 0xcb,
++ 0x00, 0xcb, 0x80, 0xca };
+
+ /* Expected results for vreinterpret_u16_xx. */
+ VECT_VAR_DECL(expected_u16_1,uint,16,4) [] = { 0xf1f0, 0xf3f2, 0xf5f4, 0xf7f6 };
+@@ -85,6 +92,7 @@ VECT_VAR_DECL(expected_u16_6,uint,16,4) [] = { 0xfff0, 0xffff, 0xfff1, 0xffff };
+ VECT_VAR_DECL(expected_u16_7,uint,16,4) [] = { 0xfff0, 0xffff, 0xffff, 0xffff };
+ VECT_VAR_DECL(expected_u16_8,uint,16,4) [] = { 0xf1f0, 0xf3f2, 0xf5f4, 0xf7f6 };
+ VECT_VAR_DECL(expected_u16_9,uint,16,4) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff3 };
++VECT_VAR_DECL(expected_u16_10,uint,16,4) [] = { 0xcc00, 0xcb80, 0xcb00, 0xca80 };
+
+ /* Expected results for vreinterpret_u32_xx. */
+ VECT_VAR_DECL(expected_u32_1,uint,32,2) [] = { 0xf3f2f1f0, 0xf7f6f5f4 };
+@@ -96,6 +104,7 @@ VECT_VAR_DECL(expected_u32_6,uint,32,2) [] = { 0xfff1fff0, 0xfff3fff2 };
+ VECT_VAR_DECL(expected_u32_7,uint,32,2) [] = { 0xfffffff0, 0xffffffff };
+ VECT_VAR_DECL(expected_u32_8,uint,32,2) [] = { 0xf3f2f1f0, 0xf7f6f5f4 };
+ VECT_VAR_DECL(expected_u32_9,uint,32,2) [] = { 0xfff1fff0, 0xfff3fff2 };
++VECT_VAR_DECL(expected_u32_10,uint,32,2) [] = { 0xcb80cc00, 0xca80cb00 };
+
+ /* Expected results for vreinterpret_u64_xx. */
+ VECT_VAR_DECL(expected_u64_1,uint,64,1) [] = { 0xf7f6f5f4f3f2f1f0 };
+@@ -107,6 +116,7 @@ VECT_VAR_DECL(expected_u64_6,uint,64,1) [] = { 0xfff3fff2fff1fff0 };
+ VECT_VAR_DECL(expected_u64_7,uint,64,1) [] = { 0xfffffff1fffffff0 };
+ VECT_VAR_DECL(expected_u64_8,uint,64,1) [] = { 0xf7f6f5f4f3f2f1f0 };
+ VECT_VAR_DECL(expected_u64_9,uint,64,1) [] = { 0xfff3fff2fff1fff0 };
++VECT_VAR_DECL(expected_u64_10,uint,64,1) [] = { 0xca80cb00cb80cc00 };
+
+ /* Expected results for vreinterpret_p8_xx. */
+ VECT_VAR_DECL(expected_p8_1,poly,8,8) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+@@ -127,6 +137,8 @@ VECT_VAR_DECL(expected_p8_8,poly,8,8) [] = { 0xf0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff };
+ VECT_VAR_DECL(expected_p8_9,poly,8,8) [] = { 0xf0, 0xff, 0xf1, 0xff,
+ 0xf2, 0xff, 0xf3, 0xff };
++VECT_VAR_DECL(expected_p8_10,poly,8,8) [] = { 0x00, 0xcc, 0x80, 0xcb,
++ 0x00, 0xcb, 0x80, 0xca };
+
+ /* Expected results for vreinterpret_p16_xx. */
+ VECT_VAR_DECL(expected_p16_1,poly,16,4) [] = { 0xf1f0, 0xf3f2, 0xf5f4, 0xf7f6 };
+@@ -138,6 +150,7 @@ VECT_VAR_DECL(expected_p16_6,poly,16,4) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff3 };
+ VECT_VAR_DECL(expected_p16_7,poly,16,4) [] = { 0xfff0, 0xffff, 0xfff1, 0xffff };
+ VECT_VAR_DECL(expected_p16_8,poly,16,4) [] = { 0xfff0, 0xffff, 0xffff, 0xffff };
+ VECT_VAR_DECL(expected_p16_9,poly,16,4) [] = { 0xf1f0, 0xf3f2, 0xf5f4, 0xf7f6 };
++VECT_VAR_DECL(expected_p16_10,poly,16,4) [] = { 0xcc00, 0xcb80, 0xcb00, 0xca80 };
+
+ /* Expected results for vreinterpretq_s8_xx. */
+ VECT_VAR_DECL(expected_q_s8_1,int,8,16) [] = { 0xf0, 0xff, 0xf1, 0xff,
+@@ -176,6 +189,10 @@ VECT_VAR_DECL(expected_q_s8_9,int,8,16) [] = { 0xf0, 0xff, 0xf1, 0xff,
+ 0xf2, 0xff, 0xf3, 0xff,
+ 0xf4, 0xff, 0xf5, 0xff,
+ 0xf6, 0xff, 0xf7, 0xff };
++VECT_VAR_DECL(expected_q_s8_10,int,8,16) [] = { 0x00, 0xcc, 0x80, 0xcb,
++ 0x00, 0xcb, 0x80, 0xca,
++ 0x00, 0xca, 0x80, 0xc9,
++ 0x00, 0xc9, 0x80, 0xc8 };
+
+ /* Expected results for vreinterpretq_s16_xx. */
+ VECT_VAR_DECL(expected_q_s16_1,int,16,8) [] = { 0xf1f0, 0xf3f2,
+@@ -214,6 +231,10 @@ VECT_VAR_DECL(expected_q_s16_9,int,16,8) [] = { 0xfff0, 0xfff1,
+ 0xfff2, 0xfff3,
+ 0xfff4, 0xfff5,
+ 0xfff6, 0xfff7 };
++VECT_VAR_DECL(expected_q_s16_10,int,16,8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
+
+ /* Expected results for vreinterpretq_s32_xx. */
+ VECT_VAR_DECL(expected_q_s32_1,int,32,4) [] = { 0xf3f2f1f0, 0xf7f6f5f4,
+@@ -234,6 +255,8 @@ VECT_VAR_DECL(expected_q_s32_8,int,32,4) [] = { 0xf3f2f1f0, 0xf7f6f5f4,
+ 0xfbfaf9f8, 0xfffefdfc };
+ VECT_VAR_DECL(expected_q_s32_9,int,32,4) [] = { 0xfff1fff0, 0xfff3fff2,
+ 0xfff5fff4, 0xfff7fff6 };
++VECT_VAR_DECL(expected_q_s32_10,int,32,4) [] = { 0xcb80cc00, 0xca80cb00,
++ 0xc980ca00, 0xc880c900 };
+
+ /* Expected results for vreinterpretq_s64_xx. */
+ VECT_VAR_DECL(expected_q_s64_1,int,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
+@@ -254,6 +277,8 @@ VECT_VAR_DECL(expected_q_s64_8,int,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
+ 0xfffefdfcfbfaf9f8 };
+ VECT_VAR_DECL(expected_q_s64_9,int,64,2) [] = { 0xfff3fff2fff1fff0,
+ 0xfff7fff6fff5fff4 };
++VECT_VAR_DECL(expected_q_s64_10,int,64,2) [] = { 0xca80cb00cb80cc00,
++ 0xc880c900c980ca00 };
+
+ /* Expected results for vreinterpretq_u8_xx. */
+ VECT_VAR_DECL(expected_q_u8_1,uint,8,16) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+@@ -292,6 +317,10 @@ VECT_VAR_DECL(expected_q_u8_9,uint,8,16) [] = { 0xf0, 0xff, 0xf1, 0xff,
+ 0xf2, 0xff, 0xf3, 0xff,
+ 0xf4, 0xff, 0xf5, 0xff,
+ 0xf6, 0xff, 0xf7, 0xff };
++VECT_VAR_DECL(expected_q_u8_10,uint,8,16) [] = { 0x00, 0xcc, 0x80, 0xcb,
++ 0x00, 0xcb, 0x80, 0xca,
++ 0x00, 0xca, 0x80, 0xc9,
++ 0x00, 0xc9, 0x80, 0xc8 };
+
+ /* Expected results for vreinterpretq_u16_xx. */
+ VECT_VAR_DECL(expected_q_u16_1,uint,16,8) [] = { 0xf1f0, 0xf3f2,
+@@ -330,6 +359,10 @@ VECT_VAR_DECL(expected_q_u16_9,uint,16,8) [] = { 0xfff0, 0xfff1,
+ 0xfff2, 0xfff3,
+ 0xfff4, 0xfff5,
+ 0xfff6, 0xfff7 };
++VECT_VAR_DECL(expected_q_u16_10,uint,16,8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
+
+ /* Expected results for vreinterpretq_u32_xx. */
+ VECT_VAR_DECL(expected_q_u32_1,uint,32,4) [] = { 0xf3f2f1f0, 0xf7f6f5f4,
+@@ -350,6 +383,8 @@ VECT_VAR_DECL(expected_q_u32_8,uint,32,4) [] = { 0xf3f2f1f0, 0xf7f6f5f4,
+ 0xfbfaf9f8, 0xfffefdfc };
+ VECT_VAR_DECL(expected_q_u32_9,uint,32,4) [] = { 0xfff1fff0, 0xfff3fff2,
+ 0xfff5fff4, 0xfff7fff6 };
++VECT_VAR_DECL(expected_q_u32_10,uint,32,4) [] = { 0xcb80cc00, 0xca80cb00,
++ 0xc980ca00, 0xc880c900 };
+
+ /* Expected results for vreinterpretq_u64_xx. */
+ VECT_VAR_DECL(expected_q_u64_1,uint,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
+@@ -370,6 +405,92 @@ VECT_VAR_DECL(expected_q_u64_8,uint,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
+ 0xfffefdfcfbfaf9f8 };
+ VECT_VAR_DECL(expected_q_u64_9,uint,64,2) [] = { 0xfff3fff2fff1fff0,
+ 0xfff7fff6fff5fff4 };
++VECT_VAR_DECL(expected_q_u64_10,uint,64,2) [] = { 0xca80cb00cb80cc00,
++ 0xc880c900c980ca00 };
++
++/* Expected results for vreinterpretq_p8_xx. */
++VECT_VAR_DECL(expected_q_p8_1,poly,8,16) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
++ 0xf4, 0xf5, 0xf6, 0xf7,
++ 0xf8, 0xf9, 0xfa, 0xfb,
++ 0xfc, 0xfd, 0xfe, 0xff };
++VECT_VAR_DECL(expected_q_p8_2,poly,8,16) [] = { 0xf0, 0xff, 0xf1, 0xff,
++ 0xf2, 0xff, 0xf3, 0xff,
++ 0xf4, 0xff, 0xf5, 0xff,
++ 0xf6, 0xff, 0xf7, 0xff };
++VECT_VAR_DECL(expected_q_p8_3,poly,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xf2, 0xff, 0xff, 0xff,
++ 0xf3, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(expected_q_p8_4,poly,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(expected_q_p8_5,poly,8,16) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
++ 0xf4, 0xf5, 0xf6, 0xf7,
++ 0xf8, 0xf9, 0xfa, 0xfb,
++ 0xfc, 0xfd, 0xfe, 0xff };
++VECT_VAR_DECL(expected_q_p8_6,poly,8,16) [] = { 0xf0, 0xff, 0xf1, 0xff,
++ 0xf2, 0xff, 0xf3, 0xff,
++ 0xf4, 0xff, 0xf5, 0xff,
++ 0xf6, 0xff, 0xf7, 0xff };
++VECT_VAR_DECL(expected_q_p8_7,poly,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xf2, 0xff, 0xff, 0xff,
++ 0xf3, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(expected_q_p8_8,poly,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(expected_q_p8_9,poly,8,16) [] = { 0xf0, 0xff, 0xf1, 0xff,
++ 0xf2, 0xff, 0xf3, 0xff,
++ 0xf4, 0xff, 0xf5, 0xff,
++ 0xf6, 0xff, 0xf7, 0xff };
++VECT_VAR_DECL(expected_q_p8_10,poly,8,16) [] = { 0x00, 0xcc, 0x80, 0xcb,
++ 0x00, 0xcb, 0x80, 0xca,
++ 0x00, 0xca, 0x80, 0xc9,
++ 0x00, 0xc9, 0x80, 0xc8 };
++
++/* Expected results for vreinterpretq_p16_xx. */
++VECT_VAR_DECL(expected_q_p16_1,poly,16,8) [] = { 0xf1f0, 0xf3f2,
++ 0xf5f4, 0xf7f6,
++ 0xf9f8, 0xfbfa,
++ 0xfdfc, 0xfffe };
++VECT_VAR_DECL(expected_q_p16_2,poly,16,8) [] = { 0xfff0, 0xfff1,
++ 0xfff2, 0xfff3,
++ 0xfff4, 0xfff5,
++ 0xfff6, 0xfff7 };
++VECT_VAR_DECL(expected_q_p16_3,poly,16,8) [] = { 0xfff0, 0xffff,
++ 0xfff1, 0xffff,
++ 0xfff2, 0xffff,
++ 0xfff3, 0xffff };
++VECT_VAR_DECL(expected_q_p16_4,poly,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(expected_q_p16_5,poly,16,8) [] = { 0xf1f0, 0xf3f2,
++ 0xf5f4, 0xf7f6,
++ 0xf9f8, 0xfbfa,
++ 0xfdfc, 0xfffe };
++VECT_VAR_DECL(expected_q_p16_6,poly,16,8) [] = { 0xfff0, 0xfff1,
++ 0xfff2, 0xfff3,
++ 0xfff4, 0xfff5,
++ 0xfff6, 0xfff7 };
++VECT_VAR_DECL(expected_q_p16_7,poly,16,8) [] = { 0xfff0, 0xffff,
++ 0xfff1, 0xffff,
++ 0xfff2, 0xffff,
++ 0xfff3, 0xffff };
++VECT_VAR_DECL(expected_q_p16_8,poly,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(expected_q_p16_9,poly,16,8) [] = { 0xf1f0, 0xf3f2,
++ 0xf5f4, 0xf7f6,
++ 0xf9f8, 0xfbfa,
++ 0xfdfc, 0xfffe };
++VECT_VAR_DECL(expected_q_p16_10,poly,16,8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
+
+ /* Expected results for vreinterpret_f32_xx. */
+ VECT_VAR_DECL(expected_f32_1,hfloat,32,2) [] = { 0xf3f2f1f0, 0xf7f6f5f4 };
+@@ -382,6 +503,7 @@ VECT_VAR_DECL(expected_f32_7,hfloat,32,2) [] = { 0xfffffff0, 0xfffffff1 };
+ VECT_VAR_DECL(expected_f32_8,hfloat,32,2) [] = { 0xfffffff0, 0xffffffff };
+ VECT_VAR_DECL(expected_f32_9,hfloat,32,2) [] = { 0xf3f2f1f0, 0xf7f6f5f4 };
+ VECT_VAR_DECL(expected_f32_10,hfloat,32,2) [] = { 0xfff1fff0, 0xfff3fff2 };
++VECT_VAR_DECL(expected_f32_11,hfloat,32,2) [] = { 0xcb80cc00, 0xca80cb00 };
+
+ /* Expected results for vreinterpretq_f32_xx. */
+ VECT_VAR_DECL(expected_q_f32_1,hfloat,32,4) [] = { 0xf3f2f1f0, 0xf7f6f5f4,
+@@ -404,8 +526,10 @@ VECT_VAR_DECL(expected_q_f32_9,hfloat,32,4) [] = { 0xf3f2f1f0, 0xf7f6f5f4,
+ 0xfbfaf9f8, 0xfffefdfc };
+ VECT_VAR_DECL(expected_q_f32_10,hfloat,32,4) [] = { 0xfff1fff0, 0xfff3fff2,
+ 0xfff5fff4, 0xfff7fff6 };
++VECT_VAR_DECL(expected_q_f32_11,hfloat,32,4) [] = { 0xcb80cc00, 0xca80cb00,
++ 0xc980ca00, 0xc880c900 };
+
+-/* Expected results for vreinterpretq_xx_f32. */
++/* Expected results for vreinterpret_xx_f32. */
+ VECT_VAR_DECL(expected_xx_f32_1,int,8,8) [] = { 0x0, 0x0, 0x80, 0xc1,
+ 0x0, 0x0, 0x70, 0xc1 };
+ VECT_VAR_DECL(expected_xx_f32_2,int,16,4) [] = { 0x0, 0xc180, 0x0, 0xc170 };
+@@ -419,6 +543,7 @@ VECT_VAR_DECL(expected_xx_f32_8,uint,64,1) [] = { 0xc1700000c1800000 };
+ VECT_VAR_DECL(expected_xx_f32_9,poly,8,8) [] = { 0x0, 0x0, 0x80, 0xc1,
+ 0x0, 0x0, 0x70, 0xc1 };
+ VECT_VAR_DECL(expected_xx_f32_10,poly,16,4) [] = { 0x0, 0xc180, 0x0, 0xc170 };
++VECT_VAR_DECL(expected_xx_f32_11,hfloat,16,4) [] = { 0x0, 0xc180, 0x0, 0xc170 };
+
+ /* Expected results for vreinterpretq_xx_f32. */
+ VECT_VAR_DECL(expected_q_xx_f32_1,int,8,16) [] = { 0x0, 0x0, 0x80, 0xc1,
+@@ -447,6 +572,62 @@ VECT_VAR_DECL(expected_q_xx_f32_9,poly,8,16) [] = { 0x0, 0x0, 0x80, 0xc1,
+ 0x0, 0x0, 0x50, 0xc1 };
+ VECT_VAR_DECL(expected_q_xx_f32_10,poly,16,8) [] = { 0x0, 0xc180, 0x0, 0xc170,
+ 0x0, 0xc160, 0x0, 0xc150 };
++VECT_VAR_DECL(expected_q_xx_f32_11,hfloat,16,8) [] = { 0x0, 0xc180, 0x0, 0xc170,
++ 0x0, 0xc160, 0x0, 0xc150 };
++
++/* Expected results for vreinterpret_f16_xx. */
++VECT_VAR_DECL(expected_f16_1,hfloat,16,4) [] = { 0xf1f0, 0xf3f2, 0xf5f4, 0xf7f6 };
++VECT_VAR_DECL(expected_f16_2,hfloat,16,4) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff3 };
++VECT_VAR_DECL(expected_f16_3,hfloat,16,4) [] = { 0xfff0, 0xffff, 0xfff1, 0xffff };
++VECT_VAR_DECL(expected_f16_4,hfloat,16,4) [] = { 0xfff0, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL(expected_f16_5,hfloat,16,4) [] = { 0xf1f0, 0xf3f2, 0xf5f4, 0xf7f6 };
++VECT_VAR_DECL(expected_f16_6,hfloat,16,4) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff3 };
++VECT_VAR_DECL(expected_f16_7,hfloat,16,4) [] = { 0xfff0, 0xffff, 0xfff1, 0xffff };
++VECT_VAR_DECL(expected_f16_8,hfloat,16,4) [] = { 0xfff0, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL(expected_f16_9,hfloat,16,4) [] = { 0xf1f0, 0xf3f2, 0xf5f4, 0xf7f6 };
++VECT_VAR_DECL(expected_f16_10,hfloat,16,4) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff3 };
++
++/* Expected results for vreinterpretq_f16_xx. */
++VECT_VAR_DECL(expected_q_f16_1,hfloat,16,8) [] = { 0xf1f0, 0xf3f2,
++ 0xf5f4, 0xf7f6,
++ 0xf9f8, 0xfbfa,
++ 0xfdfc, 0xfffe };
++VECT_VAR_DECL(expected_q_f16_2,hfloat,16,8) [] = { 0xfff0, 0xfff1,
++ 0xfff2, 0xfff3,
++ 0xfff4, 0xfff5,
++ 0xfff6, 0xfff7 };
++VECT_VAR_DECL(expected_q_f16_3,hfloat,16,8) [] = { 0xfff0, 0xffff,
++ 0xfff1, 0xffff,
++ 0xfff2, 0xffff,
++ 0xfff3, 0xffff };
++VECT_VAR_DECL(expected_q_f16_4,hfloat,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(expected_q_f16_5,hfloat,16,8) [] = { 0xf1f0, 0xf3f2,
++ 0xf5f4, 0xf7f6,
++ 0xf9f8, 0xfbfa,
++ 0xfdfc, 0xfffe };
++VECT_VAR_DECL(expected_q_f16_6,hfloat,16,8) [] = { 0xfff0, 0xfff1,
++ 0xfff2, 0xfff3,
++ 0xfff4, 0xfff5,
++ 0xfff6, 0xfff7 };
++VECT_VAR_DECL(expected_q_f16_7,hfloat,16,8) [] = { 0xfff0, 0xffff,
++ 0xfff1, 0xffff,
++ 0xfff2, 0xffff,
++ 0xfff3, 0xffff };
++VECT_VAR_DECL(expected_q_f16_8,hfloat,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(expected_q_f16_9,hfloat,16,8) [] = { 0xf1f0, 0xf3f2,
++ 0xf5f4, 0xf7f6,
++ 0xf9f8, 0xfbfa,
++ 0xfdfc, 0xfffe };
++VECT_VAR_DECL(expected_q_f16_10,hfloat,16,8) [] = { 0xfff0, 0xfff1,
++ 0xfff2, 0xfff3,
++ 0xfff4, 0xfff5,
++ 0xfff6, 0xfff7 };
+
+ #define TEST_MSG "VREINTERPRET/VREINTERPRETQ"
+
+@@ -484,6 +665,10 @@ void exec_vreinterpret (void)
+
+ /* Initialize input "vector" from "buffer". */
+ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+ VLOAD(vector, buffer, q, float, f, 32, 4);
+
+@@ -497,6 +682,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(, int, s, 8, 8, uint, u, 64, 1, expected_s8_7);
+ TEST_VREINTERPRET(, int, s, 8, 8, poly, p, 8, 8, expected_s8_8);
+ TEST_VREINTERPRET(, int, s, 8, 8, poly, p, 16, 4, expected_s8_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(, int, s, 8, 8, float, f, 16, 4, expected_s8_10);
++#endif
+
+ /* vreinterpret_s16_xx. */
+ TEST_VREINTERPRET(, int, s, 16, 4, int, s, 8, 8, expected_s16_1);
+@@ -508,6 +696,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(, int, s, 16, 4, uint, u, 64, 1, expected_s16_7);
+ TEST_VREINTERPRET(, int, s, 16, 4, poly, p, 8, 8, expected_s16_8);
+ TEST_VREINTERPRET(, int, s, 16, 4, poly, p, 16, 4, expected_s16_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(, int, s, 16, 4, float, f, 16, 4, expected_s16_10);
++#endif
+
+ /* vreinterpret_s32_xx. */
+ TEST_VREINTERPRET(, int, s, 32, 2, int, s, 8, 8, expected_s32_1);
+@@ -519,6 +710,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(, int, s, 32, 2, uint, u, 64, 1, expected_s32_7);
+ TEST_VREINTERPRET(, int, s, 32, 2, poly, p, 8, 8, expected_s32_8);
+ TEST_VREINTERPRET(, int, s, 32, 2, poly, p, 16, 4, expected_s32_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(, int, s, 32, 2, float, f, 16, 4, expected_s32_10);
++#endif
+
+ /* vreinterpret_s64_xx. */
+ TEST_VREINTERPRET(, int, s, 64, 1, int, s, 8, 8, expected_s64_1);
+@@ -530,6 +724,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(, int, s, 64, 1, uint, u, 64, 1, expected_s64_7);
+ TEST_VREINTERPRET(, int, s, 64, 1, poly, p, 8, 8, expected_s64_8);
+ TEST_VREINTERPRET(, int, s, 64, 1, poly, p, 16, 4, expected_s64_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(, int, s, 64, 1, float, f, 16, 4, expected_s64_10);
++#endif
+
+ /* vreinterpret_u8_xx. */
+ TEST_VREINTERPRET(, uint, u, 8, 8, int, s, 8, 8, expected_u8_1);
+@@ -541,6 +738,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(, uint, u, 8, 8, uint, u, 64, 1, expected_u8_7);
+ TEST_VREINTERPRET(, uint, u, 8, 8, poly, p, 8, 8, expected_u8_8);
+ TEST_VREINTERPRET(, uint, u, 8, 8, poly, p, 16, 4, expected_u8_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(, uint, u, 8, 8, float, f, 16, 4, expected_u8_10);
++#endif
+
+ /* vreinterpret_u16_xx. */
+ TEST_VREINTERPRET(, uint, u, 16, 4, int, s, 8, 8, expected_u16_1);
+@@ -552,6 +752,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(, uint, u, 16, 4, uint, u, 64, 1, expected_u16_7);
+ TEST_VREINTERPRET(, uint, u, 16, 4, poly, p, 8, 8, expected_u16_8);
+ TEST_VREINTERPRET(, uint, u, 16, 4, poly, p, 16, 4, expected_u16_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(, uint, u, 16, 4, float, f, 16, 4, expected_u16_10);
++#endif
+
+ /* vreinterpret_u32_xx. */
+ TEST_VREINTERPRET(, uint, u, 32, 2, int, s, 8, 8, expected_u32_1);
+@@ -563,6 +766,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(, uint, u, 32, 2, uint, u, 64, 1, expected_u32_7);
+ TEST_VREINTERPRET(, uint, u, 32, 2, poly, p, 8, 8, expected_u32_8);
+ TEST_VREINTERPRET(, uint, u, 32, 2, poly, p, 16, 4, expected_u32_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(, uint, u, 32, 2, float, f, 16, 4, expected_u32_10);
++#endif
+
+ /* vreinterpret_u64_xx. */
+ TEST_VREINTERPRET(, uint, u, 64, 1, int, s, 8, 8, expected_u64_1);
+@@ -574,6 +780,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(, uint, u, 64, 1, uint, u, 32, 2, expected_u64_7);
+ TEST_VREINTERPRET(, uint, u, 64, 1, poly, p, 8, 8, expected_u64_8);
+ TEST_VREINTERPRET(, uint, u, 64, 1, poly, p, 16, 4, expected_u64_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(, uint, u, 64, 1, float, f, 16, 4, expected_u64_10);
++#endif
+
+ /* vreinterpret_p8_xx. */
+ TEST_VREINTERPRET_POLY(, poly, p, 8, 8, int, s, 8, 8, expected_p8_1);
+@@ -585,6 +794,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET_POLY(, poly, p, 8, 8, uint, u, 32, 2, expected_p8_7);
+ TEST_VREINTERPRET_POLY(, poly, p, 8, 8, uint, u, 64, 1, expected_p8_8);
+ TEST_VREINTERPRET_POLY(, poly, p, 8, 8, poly, p, 16, 4, expected_p8_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_POLY(, poly, p, 8, 8, float, f, 16, 4, expected_p8_10);
++#endif
+
+ /* vreinterpret_p16_xx. */
+ TEST_VREINTERPRET_POLY(, poly, p, 16, 4, int, s, 8, 8, expected_p16_1);
+@@ -596,6 +808,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET_POLY(, poly, p, 16, 4, uint, u, 32, 2, expected_p16_7);
+ TEST_VREINTERPRET_POLY(, poly, p, 16, 4, uint, u, 64, 1, expected_p16_8);
+ TEST_VREINTERPRET_POLY(, poly, p, 16, 4, poly, p, 8, 8, expected_p16_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_POLY(, poly, p, 16, 4, float, f, 16, 4, expected_p16_10);
++#endif
+
+ /* vreinterpretq_s8_xx. */
+ TEST_VREINTERPRET(q, int, s, 8, 16, int, s, 16, 8, expected_q_s8_1);
+@@ -607,6 +822,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(q, int, s, 8, 16, uint, u, 64, 2, expected_q_s8_7);
+ TEST_VREINTERPRET(q, int, s, 8, 16, poly, p, 8, 16, expected_q_s8_8);
+ TEST_VREINTERPRET(q, int, s, 8, 16, poly, p, 16, 8, expected_q_s8_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(q, int, s, 8, 16, float, f, 16, 8, expected_q_s8_10);
++#endif
+
+ /* vreinterpretq_s16_xx. */
+ TEST_VREINTERPRET(q, int, s, 16, 8, int, s, 8, 16, expected_q_s16_1);
+@@ -618,6 +836,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(q, int, s, 16, 8, uint, u, 64, 2, expected_q_s16_7);
+ TEST_VREINTERPRET(q, int, s, 16, 8, poly, p, 8, 16, expected_q_s16_8);
+ TEST_VREINTERPRET(q, int, s, 16, 8, poly, p, 16, 8, expected_q_s16_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(q, int, s, 16, 8, float, f, 16, 8, expected_q_s16_10);
++#endif
+
+ /* vreinterpretq_s32_xx. */
+ TEST_VREINTERPRET(q, int, s, 32, 4, int, s, 8, 16, expected_q_s32_1);
+@@ -629,6 +850,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(q, int, s, 32, 4, uint, u, 64, 2, expected_q_s32_7);
+ TEST_VREINTERPRET(q, int, s, 32, 4, poly, p, 8, 16, expected_q_s32_8);
+ TEST_VREINTERPRET(q, int, s, 32, 4, poly, p, 16, 8, expected_q_s32_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(q, int, s, 32, 4, float, f, 16, 8, expected_q_s32_10);
++#endif
+
+ /* vreinterpretq_s64_xx. */
+ TEST_VREINTERPRET(q, int, s, 64, 2, int, s, 8, 16, expected_q_s64_1);
+@@ -640,6 +864,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(q, int, s, 64, 2, uint, u, 64, 2, expected_q_s64_7);
+ TEST_VREINTERPRET(q, int, s, 64, 2, poly, p, 8, 16, expected_q_s64_8);
+ TEST_VREINTERPRET(q, int, s, 64, 2, poly, p, 16, 8, expected_q_s64_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(q, int, s, 64, 2, float, f, 16, 8, expected_q_s64_10);
++#endif
+
+ /* vreinterpretq_u8_xx. */
+ TEST_VREINTERPRET(q, uint, u, 8, 16, int, s, 8, 16, expected_q_u8_1);
+@@ -651,6 +878,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(q, uint, u, 8, 16, uint, u, 64, 2, expected_q_u8_7);
+ TEST_VREINTERPRET(q, uint, u, 8, 16, poly, p, 8, 16, expected_q_u8_8);
+ TEST_VREINTERPRET(q, uint, u, 8, 16, poly, p, 16, 8, expected_q_u8_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(q, uint, u, 8, 16, float, f, 16, 8, expected_q_u8_10);
++#endif
+
+ /* vreinterpretq_u16_xx. */
+ TEST_VREINTERPRET(q, uint, u, 16, 8, int, s, 8, 16, expected_q_u16_1);
+@@ -662,6 +892,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(q, uint, u, 16, 8, uint, u, 64, 2, expected_q_u16_7);
+ TEST_VREINTERPRET(q, uint, u, 16, 8, poly, p, 8, 16, expected_q_u16_8);
+ TEST_VREINTERPRET(q, uint, u, 16, 8, poly, p, 16, 8, expected_q_u16_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(q, uint, u, 16, 8, float, f, 16, 8, expected_q_u16_10);
++#endif
+
+ /* vreinterpretq_u32_xx. */
+ TEST_VREINTERPRET(q, uint, u, 32, 4, int, s, 8, 16, expected_q_u32_1);
+@@ -673,6 +906,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(q, uint, u, 32, 4, uint, u, 64, 2, expected_q_u32_7);
+ TEST_VREINTERPRET(q, uint, u, 32, 4, poly, p, 8, 16, expected_q_u32_8);
+ TEST_VREINTERPRET(q, uint, u, 32, 4, poly, p, 16, 8, expected_q_u32_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(q, uint, u, 32, 4, float, f, 16, 8, expected_q_u32_10);
++#endif
+
+ /* vreinterpretq_u64_xx. */
+ TEST_VREINTERPRET(q, uint, u, 64, 2, int, s, 8, 16, expected_q_u64_1);
+@@ -684,6 +920,37 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(q, uint, u, 64, 2, uint, u, 32, 4, expected_q_u64_7);
+ TEST_VREINTERPRET(q, uint, u, 64, 2, poly, p, 8, 16, expected_q_u64_8);
+ TEST_VREINTERPRET(q, uint, u, 64, 2, poly, p, 16, 8, expected_q_u64_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET(q, uint, u, 64, 2, float, f, 16, 8, expected_q_u64_10);
++#endif
++
++ /* vreinterpretq_p8_xx. */
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, int, s, 8, 16, expected_q_p8_1);
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, int, s, 16, 8, expected_q_p8_2);
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, int, s, 32, 4, expected_q_p8_3);
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, int, s, 64, 2, expected_q_p8_4);
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, uint, u, 8, 16, expected_q_p8_5);
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, uint, u, 16, 8, expected_q_p8_6);
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, uint, u, 32, 4, expected_q_p8_7);
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, uint, u, 64, 2, expected_q_p8_8);
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, poly, p, 16, 8, expected_q_p8_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, float, f, 16, 8, expected_q_p8_10);
++#endif
++
++ /* vreinterpretq_p16_xx. */
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, int, s, 8, 16, expected_q_p16_1);
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, int, s, 16, 8, expected_q_p16_2);
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, int, s, 32, 4, expected_q_p16_3);
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, int, s, 64, 2, expected_q_p16_4);
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, uint, u, 8, 16, expected_q_p16_5);
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, uint, u, 16, 8, expected_q_p16_6);
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, uint, u, 32, 4, expected_q_p16_7);
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, uint, u, 64, 2, expected_q_p16_8);
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, poly, p, 8, 16, expected_q_p16_9);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, float, f, 16, 8, expected_q_p16_10);
++#endif
+
+ /* vreinterpret_f32_xx. */
+ TEST_VREINTERPRET_FP(, float, f, 32, 2, int, s, 8, 8, expected_f32_1);
+@@ -696,6 +963,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET_FP(, float, f, 32, 2, uint, u, 64, 1, expected_f32_8);
+ TEST_VREINTERPRET_FP(, float, f, 32, 2, poly, p, 8, 8, expected_f32_9);
+ TEST_VREINTERPRET_FP(, float, f, 32, 2, poly, p, 16, 4, expected_f32_10);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_FP(, float, f, 32, 2, float, f, 16, 4, expected_f32_11);
++#endif
+
+ /* vreinterpretq_f32_xx. */
+ TEST_VREINTERPRET_FP(q, float, f, 32, 4, int, s, 8, 16, expected_q_f32_1);
+@@ -708,6 +978,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET_FP(q, float, f, 32, 4, uint, u, 64, 2, expected_q_f32_8);
+ TEST_VREINTERPRET_FP(q, float, f, 32, 4, poly, p, 8, 16, expected_q_f32_9);
+ TEST_VREINTERPRET_FP(q, float, f, 32, 4, poly, p, 16, 8, expected_q_f32_10);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_FP(q, float, f, 32, 4, float, f, 16, 8, expected_q_f32_11);
++#endif
+
+ /* vreinterpret_xx_f32. */
+ TEST_VREINTERPRET(, int, s, 8, 8, float, f, 32, 2, expected_xx_f32_1);
+@@ -720,6 +993,9 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(, uint, u, 64, 1, float, f, 32, 2, expected_xx_f32_8);
+ TEST_VREINTERPRET_POLY(, poly, p, 8, 8, float, f, 32, 2, expected_xx_f32_9);
+ TEST_VREINTERPRET_POLY(, poly, p, 16, 4, float, f, 32, 2, expected_xx_f32_10);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, float, f, 32, 2, expected_xx_f32_11);
++#endif
+
+ /* vreinterpretq_xx_f32. */
+ TEST_VREINTERPRET(q, int, s, 8, 16, float, f, 32, 4, expected_q_xx_f32_1);
+@@ -732,6 +1008,33 @@ void exec_vreinterpret (void)
+ TEST_VREINTERPRET(q, uint, u, 64, 2, float, f, 32, 4, expected_q_xx_f32_8);
+ TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, float, f, 32, 4, expected_q_xx_f32_9);
+ TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, float, f, 32, 4, expected_q_xx_f32_10);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, float, f, 32, 4, expected_q_xx_f32_11);
++
++ /* vreinterpret_f16_xx. */
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, int, s, 8, 8, expected_f16_1);
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, int, s, 16, 4, expected_f16_2);
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, int, s, 32, 2, expected_f16_3);
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, int, s, 64, 1, expected_f16_4);
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, uint, u, 8, 8, expected_f16_5);
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, uint, u, 16, 4, expected_f16_6);
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, uint, u, 32, 2, expected_f16_7);
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, uint, u, 64, 1, expected_f16_8);
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, poly, p, 8, 8, expected_f16_9);
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, poly, p, 16, 4, expected_f16_10);
++
++ /* vreinterpretq_f16_xx. */
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, int, s, 8, 16, expected_q_f16_1);
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, int, s, 16, 8, expected_q_f16_2);
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, int, s, 32, 4, expected_q_f16_3);
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, int, s, 64, 2, expected_q_f16_4);
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, uint, u, 8, 16, expected_q_f16_5);
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, uint, u, 16, 8, expected_q_f16_6);
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, uint, u, 32, 4, expected_q_f16_7);
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, uint, u, 64, 2, expected_q_f16_8);
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, poly, p, 8, 16, expected_q_f16_9);
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, poly, p, 16, 8, expected_q_f16_10);
++#endif
+ }
+
+ int main (void)
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vreinterpret_p128.c
+@@ -0,0 +1,165 @@
++/* This file contains tests for the vreinterpret *p128 intrinsics. */
++
++/* { dg-require-effective-target arm_crypto_ok { target { arm*-*-* } } } */
++/* { dg-add-options arm_crypto } */
++/* { dg-additional-options "-march=armv8-a+crypto" { target { aarch64*-*-* } } }*/
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results: vreinterpretq_p128_*. */
++VECT_VAR_DECL(vreint_expected_q_p128_s8,poly,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
++ 0xfffefdfcfbfaf9f8 };
++VECT_VAR_DECL(vreint_expected_q_p128_s16,poly,64,2) [] = { 0xfff3fff2fff1fff0,
++ 0xfff7fff6fff5fff4 };
++VECT_VAR_DECL(vreint_expected_q_p128_s32,poly,64,2) [] = { 0xfffffff1fffffff0,
++ 0xfffffff3fffffff2 };
++VECT_VAR_DECL(vreint_expected_q_p128_s64,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vreint_expected_q_p128_u8,poly,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
++ 0xfffefdfcfbfaf9f8 };
++VECT_VAR_DECL(vreint_expected_q_p128_u16,poly,64,2) [] = { 0xfff3fff2fff1fff0,
++ 0xfff7fff6fff5fff4 };
++VECT_VAR_DECL(vreint_expected_q_p128_u32,poly,64,2) [] = { 0xfffffff1fffffff0,
++ 0xfffffff3fffffff2 };
++VECT_VAR_DECL(vreint_expected_q_p128_u64,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vreint_expected_q_p128_p8,poly,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
++ 0xfffefdfcfbfaf9f8 };
++VECT_VAR_DECL(vreint_expected_q_p128_p16,poly,64,2) [] = { 0xfff3fff2fff1fff0,
++ 0xfff7fff6fff5fff4 };
++VECT_VAR_DECL(vreint_expected_q_p128_f32,poly,64,2) [] = { 0xc1700000c1800000,
++ 0xc1500000c1600000 };
++VECT_VAR_DECL(vreint_expected_q_p128_f16,poly,64,2) [] = { 0xca80cb00cb80cc00,
++ 0xc880c900c980ca00 };
++
++/* Expected results: vreinterpretq_*_p128. */
++VECT_VAR_DECL(vreint_expected_q_s8_p128,int,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(vreint_expected_q_s16_p128,int,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(vreint_expected_q_s32_p128,int,32,4) [] = { 0xfffffff0, 0xffffffff,
++ 0xfffffff1, 0xffffffff };
++VECT_VAR_DECL(vreint_expected_q_s64_p128,int,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vreint_expected_q_u8_p128,uint,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(vreint_expected_q_u16_p128,uint,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(vreint_expected_q_u32_p128,uint,32,4) [] = { 0xfffffff0, 0xffffffff,
++ 0xfffffff1, 0xffffffff };
++VECT_VAR_DECL(vreint_expected_q_u64_p128,uint,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vreint_expected_q_p8_p128,poly,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(vreint_expected_q_p16_p128,poly,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(vreint_expected_q_p64_p128,uint,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vreint_expected_q_f32_p128,hfloat,32,4) [] = { 0xfffffff0, 0xffffffff,
++ 0xfffffff1, 0xffffffff };
++VECT_VAR_DECL(vreint_expected_q_f16_p128,hfloat,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++
++int main (void)
++{
++ DECL_VARIABLE_128BITS_VARIANTS(vreint_vector);
++ DECL_VARIABLE_128BITS_VARIANTS(vreint_vector_res);
++
++ clean_results ();
++
++ TEST_MACRO_128BITS_VARIANTS_2_5(VLOAD, vreint_vector, buffer);
++ VLOAD(vreint_vector, buffer, q, poly, p, 64, 2);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ VLOAD(vreint_vector, buffer, q, float, f, 16, 8);
++#endif
++ VLOAD(vreint_vector, buffer, q, float, f, 32, 4);
++
++ /* vreinterpretq_p128_* tests. */
++#undef TEST_MSG
++#define TEST_MSG "VREINTERPRETQ_P128_*"
++
++ /* Since there is no way to store a poly128_t value, convert to
++ poly64x2_t before storing. This means that we are not able to
++ test vreinterpretq_p128* alone, and that errors in
++ vreinterpretq_p64_p128 could compensate for errors in
++ vreinterpretq_p128*. */
++#define TEST_VREINTERPRET128(Q, T1, T2, W, N, TS1, TS2, WS, NS, EXPECTED) \
++ VECT_VAR(vreint_vector_res, poly, 64, 2) = vreinterpretq_p64_p128( \
++ vreinterpret##Q##_##T2##W##_##TS2##WS(VECT_VAR(vreint_vector, TS1, WS, NS))); \
++ vst1##Q##_##T2##64(VECT_VAR(result, poly, 64, 2), \
++ VECT_VAR(vreint_vector_res, poly, 64, 2)); \
++ CHECK_POLY(TEST_MSG, T1, 64, 2, PRIx##64, EXPECTED, "");
++
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, int, s, 8, 16, vreint_expected_q_p128_s8);
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, int, s, 16, 8, vreint_expected_q_p128_s16);
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, int, s, 32, 4, vreint_expected_q_p128_s32);
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, int, s, 64, 2, vreint_expected_q_p128_s64);
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, uint, u, 8, 16, vreint_expected_q_p128_u8);
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, uint, u, 16, 8, vreint_expected_q_p128_u16);
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, uint, u, 32, 4, vreint_expected_q_p128_u32);
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, uint, u, 64, 2, vreint_expected_q_p128_u64);
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, poly, p, 8, 16, vreint_expected_q_p128_p8);
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, poly, p, 16, 8, vreint_expected_q_p128_p16);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, float, f, 16, 8, vreint_expected_q_p128_f16);
++#endif
++ TEST_VREINTERPRET128(q, poly, p, 128, 1, float, f, 32, 4, vreint_expected_q_p128_f32);
++
++ /* vreinterpretq_*_p128 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VREINTERPRETQ_*_P128"
++
++ /* Since there is no way to load a poly128_t value, load a
++ poly64x2_t and convert it to poly128_t. This means that we are
++ not able to test vreinterpretq_*_p128 alone, and that errors in
++ vreinterpretq_p128_p64 could compensate for errors in
++ vreinterpretq_*_p128*. */
++#define TEST_VREINTERPRET_FROM_P128(Q, T1, T2, W, N, TS1, TS2, WS, NS, EXPECTED) \
++ VECT_VAR(vreint_vector_res, T1, W, N) = \
++ vreinterpret##Q##_##T2##W##_##TS2##WS( \
++ vreinterpretq_p128_p64(VECT_VAR(vreint_vector, TS1, 64, 2))); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), \
++ VECT_VAR(vreint_vector_res, T1, W, N)); \
++ CHECK(TEST_MSG, T1, W, N, PRIx##W, EXPECTED, "");
++
++#define TEST_VREINTERPRET_FP_FROM_P128(Q, T1, T2, W, N, TS1, TS2, WS, NS, EXPECTED) \
++ VECT_VAR(vreint_vector_res, T1, W, N) = \
++ vreinterpret##Q##_##T2##W##_##TS2##WS( \
++ vreinterpretq_p128_p64(VECT_VAR(vreint_vector, TS1, 64, 2))); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), \
++ VECT_VAR(vreint_vector_res, T1, W, N)); \
++ CHECK_FP(TEST_MSG, T1, W, N, PRIx##W, EXPECTED, "");
++
++ TEST_VREINTERPRET_FROM_P128(q, int, s, 8, 16, poly, p, 128, 1, vreint_expected_q_s8_p128);
++ TEST_VREINTERPRET_FROM_P128(q, int, s, 16, 8, poly, p, 128, 1, vreint_expected_q_s16_p128);
++ TEST_VREINTERPRET_FROM_P128(q, int, s, 32, 4, poly, p, 128, 1, vreint_expected_q_s32_p128);
++ TEST_VREINTERPRET_FROM_P128(q, int, s, 64, 2, poly, p, 128, 1, vreint_expected_q_s64_p128);
++ TEST_VREINTERPRET_FROM_P128(q, uint, u, 8, 16, poly, p, 128, 1, vreint_expected_q_u8_p128);
++ TEST_VREINTERPRET_FROM_P128(q, uint, u, 16, 8, poly, p, 128, 1, vreint_expected_q_u16_p128);
++ TEST_VREINTERPRET_FROM_P128(q, uint, u, 32, 4, poly, p, 128, 1, vreint_expected_q_u32_p128);
++ TEST_VREINTERPRET_FROM_P128(q, uint, u, 64, 2, poly, p, 128, 1, vreint_expected_q_u64_p128);
++ TEST_VREINTERPRET_FROM_P128(q, poly, p, 8, 16, poly, p, 128, 1, vreint_expected_q_p8_p128);
++ TEST_VREINTERPRET_FROM_P128(q, poly, p, 16, 8, poly, p, 128, 1, vreint_expected_q_p16_p128);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_FP_FROM_P128(q, float, f, 16, 8, poly, p, 128, 1, vreint_expected_q_f16_p128);
++#endif
++ TEST_VREINTERPRET_FP_FROM_P128(q, float, f, 32, 4, poly, p, 128, 1, vreint_expected_q_f32_p128);
++
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vreinterpret_p64.c
+@@ -0,0 +1,216 @@
++/* This file contains tests for the vreinterpret *p64 intrinsics. */
++
++/* { dg-require-effective-target arm_crypto_ok { target { arm*-*-* } } } */
++/* { dg-add-options arm_crypto } */
++/* { dg-additional-options "-march=armv8-a+crypto" { target { aarch64*-*-* } } }*/
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results: vreinterpret_p64_*. */
++VECT_VAR_DECL(vreint_expected_p64_s8,poly,64,1) [] = { 0xf7f6f5f4f3f2f1f0 };
++VECT_VAR_DECL(vreint_expected_p64_s16,poly,64,1) [] = { 0xfff3fff2fff1fff0 };
++VECT_VAR_DECL(vreint_expected_p64_s32,poly,64,1) [] = { 0xfffffff1fffffff0 };
++VECT_VAR_DECL(vreint_expected_p64_s64,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vreint_expected_p64_u8,poly,64,1) [] = { 0xf7f6f5f4f3f2f1f0 };
++VECT_VAR_DECL(vreint_expected_p64_u16,poly,64,1) [] = { 0xfff3fff2fff1fff0 };
++VECT_VAR_DECL(vreint_expected_p64_u32,poly,64,1) [] = { 0xfffffff1fffffff0 };
++VECT_VAR_DECL(vreint_expected_p64_u64,poly,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vreint_expected_p64_p8,poly,64,1) [] = { 0xf7f6f5f4f3f2f1f0 };
++VECT_VAR_DECL(vreint_expected_p64_p16,poly,64,1) [] = { 0xfff3fff2fff1fff0 };
++VECT_VAR_DECL(vreint_expected_p64_f32,poly,64,1) [] = { 0xc1700000c1800000 };
++VECT_VAR_DECL(vreint_expected_p64_f16,poly,64,1) [] = { 0xca80cb00cb80cc00 };
++
++/* Expected results: vreinterpretq_p64_*. */
++VECT_VAR_DECL(vreint_expected_q_p64_s8,poly,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
++ 0xfffefdfcfbfaf9f8 };
++VECT_VAR_DECL(vreint_expected_q_p64_s16,poly,64,2) [] = { 0xfff3fff2fff1fff0,
++ 0xfff7fff6fff5fff4 };
++VECT_VAR_DECL(vreint_expected_q_p64_s32,poly,64,2) [] = { 0xfffffff1fffffff0,
++ 0xfffffff3fffffff2 };
++VECT_VAR_DECL(vreint_expected_q_p64_s64,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vreint_expected_q_p64_u8,poly,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
++ 0xfffefdfcfbfaf9f8 };
++VECT_VAR_DECL(vreint_expected_q_p64_u16,poly,64,2) [] = { 0xfff3fff2fff1fff0,
++ 0xfff7fff6fff5fff4 };
++VECT_VAR_DECL(vreint_expected_q_p64_u32,poly,64,2) [] = { 0xfffffff1fffffff0,
++ 0xfffffff3fffffff2 };
++VECT_VAR_DECL(vreint_expected_q_p64_u64,poly,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vreint_expected_q_p64_p8,poly,64,2) [] = { 0xf7f6f5f4f3f2f1f0,
++ 0xfffefdfcfbfaf9f8 };
++VECT_VAR_DECL(vreint_expected_q_p64_p16,poly,64,2) [] = { 0xfff3fff2fff1fff0,
++ 0xfff7fff6fff5fff4 };
++VECT_VAR_DECL(vreint_expected_q_p64_f32,poly,64,2) [] = { 0xc1700000c1800000,
++ 0xc1500000c1600000 };
++VECT_VAR_DECL(vreint_expected_q_p64_f16,poly,64,2) [] = { 0xca80cb00cb80cc00,
++ 0xc880c900c980ca00 };
++
++/* Expected results: vreinterpret_*_p64. */
++VECT_VAR_DECL(vreint_expected_s8_p64,int,8,8) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(vreint_expected_s16_p64,int,16,4) [] = { 0xfff0, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL(vreint_expected_s32_p64,int,32,2) [] = { 0xfffffff0, 0xffffffff };
++VECT_VAR_DECL(vreint_expected_s64_p64,int,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vreint_expected_u8_p64,uint,8,8) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(vreint_expected_u16_p64,uint,16,4) [] = { 0xfff0, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL(vreint_expected_u32_p64,uint,32,2) [] = { 0xfffffff0, 0xffffffff };
++VECT_VAR_DECL(vreint_expected_u64_p64,uint,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(vreint_expected_p8_p64,poly,8,8) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(vreint_expected_p16_p64,poly,16,4) [] = { 0xfff0, 0xffff, 0xffff, 0xffff };
++VECT_VAR_DECL(vreint_expected_f32_p64,hfloat,32,2) [] = { 0xfffffff0, 0xffffffff };
++VECT_VAR_DECL(vreint_expected_f16_p64,hfloat,16,4) [] = { 0xfff0, 0xffff, 0xffff, 0xffff };
++
++/* Expected results: vreinterpretq_*_p64. */
++VECT_VAR_DECL(vreint_expected_q_s8_p64,int,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(vreint_expected_q_s16_p64,int,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(vreint_expected_q_s32_p64,int,32,4) [] = { 0xfffffff0, 0xffffffff,
++ 0xfffffff1, 0xffffffff };
++VECT_VAR_DECL(vreint_expected_q_s64_p64,int,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vreint_expected_q_u8_p64,uint,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(vreint_expected_q_u16_p64,uint,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(vreint_expected_q_u32_p64,uint,32,4) [] = { 0xfffffff0, 0xffffffff,
++ 0xfffffff1, 0xffffffff };
++VECT_VAR_DECL(vreint_expected_q_u64_p64,uint,64,2) [] = { 0xfffffffffffffff0,
++ 0xfffffffffffffff1 };
++VECT_VAR_DECL(vreint_expected_q_p8_p64,poly,8,16) [] = { 0xf0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xf1, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(vreint_expected_q_p16_p64,poly,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++VECT_VAR_DECL(vreint_expected_q_f32_p64,hfloat,32,4) [] = { 0xfffffff0, 0xffffffff,
++ 0xfffffff1, 0xffffffff };
++VECT_VAR_DECL(vreint_expected_q_f16_p64,hfloat,16,8) [] = { 0xfff0, 0xffff,
++ 0xffff, 0xffff,
++ 0xfff1, 0xffff,
++ 0xffff, 0xffff };
++
++int main (void)
++{
++#define TEST_VREINTERPRET(Q, T1, T2, W, N, TS1, TS2, WS, NS, EXPECTED) \
++ VECT_VAR(vreint_vector_res, T1, W, N) = \
++ vreinterpret##Q##_##T2##W##_##TS2##WS(VECT_VAR(vreint_vector, TS1, WS, NS)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), \
++ VECT_VAR(vreint_vector_res, T1, W, N)); \
++ CHECK(TEST_MSG, T1, W, N, PRIx##W, EXPECTED, "");
++
++#define TEST_VREINTERPRET_TO_POLY(Q, T1, T2, W, N, TS1, TS2, WS, NS, EXPECTED) \
++ VECT_VAR(vreint_vector_res, T1, W, N) = \
++ vreinterpret##Q##_##T2##W##_##TS2##WS(VECT_VAR(vreint_vector, TS1, WS, NS)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), \
++ VECT_VAR(vreint_vector_res, T1, W, N)); \
++ CHECK_POLY(TEST_MSG, T1, W, N, PRIx##W, EXPECTED, "");
++
++#define TEST_VREINTERPRET_FP(Q, T1, T2, W, N, TS1, TS2, WS, NS, EXPECTED) \
++ VECT_VAR(vreint_vector_res, T1, W, N) = \
++ vreinterpret##Q##_##T2##W##_##TS2##WS(VECT_VAR(vreint_vector, TS1, WS, NS)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), \
++ VECT_VAR(vreint_vector_res, T1, W, N)); \
++ CHECK_FP(TEST_MSG, T1, W, N, PRIx##W, EXPECTED, "");
++
++ DECL_VARIABLE_ALL_VARIANTS(vreint_vector);
++ DECL_VARIABLE_ALL_VARIANTS(vreint_vector_res);
++
++ clean_results ();
++
++ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vreint_vector, buffer);
++ VLOAD(vreint_vector, buffer, , poly, p, 64, 1);
++ VLOAD(vreint_vector, buffer, q, poly, p, 64, 2);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ VLOAD(vreint_vector, buffer, , float, f, 16, 4);
++ VLOAD(vreint_vector, buffer, q, float, f, 16, 8);
++#endif
++ VLOAD(vreint_vector, buffer, , float, f, 32, 2);
++ VLOAD(vreint_vector, buffer, q, float, f, 32, 4);
++
++ /* vreinterpret_p64_* tests. */
++#undef TEST_MSG
++#define TEST_MSG "VREINTERPRET_P64_*"
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, int, s, 8, 8, vreint_expected_p64_s8);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, int, s, 16, 4, vreint_expected_p64_s16);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, int, s, 32, 2, vreint_expected_p64_s32);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, int, s, 64, 1, vreint_expected_p64_s64);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, uint, u, 8, 8, vreint_expected_p64_u8);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, uint, u, 16, 4, vreint_expected_p64_u16);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, uint, u, 32, 2, vreint_expected_p64_u32);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, uint, u, 64, 1, vreint_expected_p64_u64);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, poly, p, 8, 8, vreint_expected_p64_p8);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, poly, p, 16, 4, vreint_expected_p64_p16);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, float, f, 16, 4, vreint_expected_p64_f16);
++#endif
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 64, 1, float, f, 32, 2, vreint_expected_p64_f32);
++
++ /* vreinterpretq_p64_* tests. */
++#undef TEST_MSG
++#define TEST_MSG "VREINTERPRETQ_P64_*"
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, int, s, 8, 16, vreint_expected_q_p64_s8);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, int, s, 16, 8, vreint_expected_q_p64_s16);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, int, s, 32, 4, vreint_expected_q_p64_s32);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, int, s, 64, 2, vreint_expected_q_p64_s64);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, uint, u, 8, 16, vreint_expected_q_p64_u8);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, uint, u, 16, 8, vreint_expected_q_p64_u16);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, uint, u, 32, 4, vreint_expected_q_p64_u32);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, uint, u, 64, 2, vreint_expected_q_p64_u64);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, poly, p, 8, 16, vreint_expected_q_p64_p8);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, poly, p, 16, 8, vreint_expected_q_p64_p16);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, float, f, 16, 8, vreint_expected_q_p64_f16);
++#endif
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 64, 2, float, f, 32, 4, vreint_expected_q_p64_f32);
++
++ /* vreinterpret_*_p64 tests. */
++#undef TEST_MSG
++#define TEST_MSG "VREINTERPRET_*_P64"
++
++ TEST_VREINTERPRET(, int, s, 8, 8, poly, p, 64, 1, vreint_expected_s8_p64);
++ TEST_VREINTERPRET(, int, s, 16, 4, poly, p, 64, 1, vreint_expected_s16_p64);
++ TEST_VREINTERPRET(, int, s, 32, 2, poly, p, 64, 1, vreint_expected_s32_p64);
++ TEST_VREINTERPRET(, int, s, 64, 1, poly, p, 64, 1, vreint_expected_s64_p64);
++ TEST_VREINTERPRET(, uint, u, 8, 8, poly, p, 64, 1, vreint_expected_u8_p64);
++ TEST_VREINTERPRET(, uint, u, 16, 4, poly, p, 64, 1, vreint_expected_u16_p64);
++ TEST_VREINTERPRET(, uint, u, 32, 2, poly, p, 64, 1, vreint_expected_u32_p64);
++ TEST_VREINTERPRET(, uint, u, 64, 1, poly, p, 64, 1, vreint_expected_u64_p64);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 8, 8, poly, p, 64, 1, vreint_expected_p8_p64);
++ TEST_VREINTERPRET_TO_POLY(, poly, p, 16, 4, poly, p, 64, 1, vreint_expected_p16_p64);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_FP(, float, f, 16, 4, poly, p, 64, 1, vreint_expected_f16_p64);
++#endif
++ TEST_VREINTERPRET_FP(, float, f, 32, 2, poly, p, 64, 1, vreint_expected_f32_p64);
++ TEST_VREINTERPRET(q, int, s, 8, 16, poly, p, 64, 2, vreint_expected_q_s8_p64);
++ TEST_VREINTERPRET(q, int, s, 16, 8, poly, p, 64, 2, vreint_expected_q_s16_p64);
++ TEST_VREINTERPRET(q, int, s, 32, 4, poly, p, 64, 2, vreint_expected_q_s32_p64);
++ TEST_VREINTERPRET(q, int, s, 64, 2, poly, p, 64, 2, vreint_expected_q_s64_p64);
++ TEST_VREINTERPRET(q, uint, u, 8, 16, poly, p, 64, 2, vreint_expected_q_u8_p64);
++ TEST_VREINTERPRET(q, uint, u, 16, 8, poly, p, 64, 2, vreint_expected_q_u16_p64);
++ TEST_VREINTERPRET(q, uint, u, 32, 4, poly, p, 64, 2, vreint_expected_q_u32_p64);
++ TEST_VREINTERPRET(q, uint, u, 64, 2, poly, p, 64, 2, vreint_expected_q_u64_p64);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 8, 16, poly, p, 64, 2, vreint_expected_q_p8_p64);
++ TEST_VREINTERPRET_TO_POLY(q, poly, p, 16, 8, poly, p, 64, 2, vreint_expected_q_p16_p64);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ TEST_VREINTERPRET_FP(q, float, f, 16, 8, poly, p, 64, 2, vreint_expected_q_f16_p64);
++#endif
++ TEST_VREINTERPRET_FP(q, float, f, 32, 4, poly, p, 64, 2, vreint_expected_q_f32_p64);
++
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrev.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrev.c
+@@ -63,6 +63,10 @@ VECT_VAR_DECL(expected_vrev64,uint,32,2) [] = { 0xfffffff1, 0xfffffff0 };
+ VECT_VAR_DECL(expected_vrev64,poly,8,8) [] = { 0xf7, 0xf6, 0xf5, 0xf4,
+ 0xf3, 0xf2, 0xf1, 0xf0 };
+ VECT_VAR_DECL(expected_vrev64,poly,16,4) [] = { 0xfff3, 0xfff2, 0xfff1, 0xfff0 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected_vrev64, hfloat, 16, 4) [] = { 0xca80, 0xcb00,
++ 0xcb80, 0xcc00 };
++#endif
+ VECT_VAR_DECL(expected_vrev64,hfloat,32,2) [] = { 0xc1700000, 0xc1800000 };
+ VECT_VAR_DECL(expected_vrev64,int,8,16) [] = { 0xf7, 0xf6, 0xf5, 0xf4,
+ 0xf3, 0xf2, 0xf1, 0xf0,
+@@ -86,6 +90,12 @@ VECT_VAR_DECL(expected_vrev64,poly,8,16) [] = { 0xf7, 0xf6, 0xf5, 0xf4,
+ 0xfb, 0xfa, 0xf9, 0xf8 };
+ VECT_VAR_DECL(expected_vrev64,poly,16,8) [] = { 0xfff3, 0xfff2, 0xfff1, 0xfff0,
+ 0xfff7, 0xfff6, 0xfff5, 0xfff4 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected_vrev64, hfloat, 16, 8) [] = { 0xca80, 0xcb00,
++ 0xcb80, 0xcc00,
++ 0xc880, 0xc900,
++ 0xc980, 0xca00 };
++#endif
+ VECT_VAR_DECL(expected_vrev64,hfloat,32,4) [] = { 0xc1700000, 0xc1800000,
+ 0xc1500000, 0xc1600000 };
+
+@@ -104,6 +114,10 @@ void exec_vrev (void)
+
+ /* Initialize input "vector" from "buffer". */
+ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (FP16_SUPPORTED)
++ VLOAD (vector, buffer, , float, f, 16, 4);
++ VLOAD (vector, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector, buffer, , float, f, 32, 2);
+ VLOAD(vector, buffer, q, float, f, 32, 4);
+
+@@ -118,10 +132,10 @@ void exec_vrev (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vrev16, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vrev16, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vrev16, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vrev16, "");
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vrev16, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vrev16, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vrev16, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vrev16, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VREV32"
+@@ -142,14 +156,14 @@ void exec_vrev (void)
+ CHECK(TEST_MSG, int, 16, 4, PRIx16, expected_vrev32, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vrev32, "");
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_vrev32, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vrev32, "");
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_vrev32, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vrev32, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_vrev32, "");
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vrev32, "");
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_vrev32, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vrev32, "");
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_vrev32, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vrev32, "");
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_vrev32, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vrev32, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_vrev32, "");
+
+ #undef TEST_MSG
+ #define TEST_MSG "VREV64"
+@@ -176,17 +190,23 @@ void exec_vrev (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vrev64, "");
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_vrev64, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_vrev64, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vrev64, "");
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_vrev64, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vrev64, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_vrev64, "");
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_vrev64, "");
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_vrev64, "");
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_vrev64, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_vrev64, "");
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_vrev64, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_vrev64, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_vrev64, "");
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_vrev64, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_vrev64, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_vrev64, "");
+
++#if defined (FP16_SUPPORTED)
++ TEST_VREV (, float, f, 16, 4, 64);
++ TEST_VREV (q, float, f, 16, 8, 64);
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx32, expected_vrev64, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx32, expected_vrev64, "");
++#endif
+ TEST_VREV(, float, f, 32, 2, 64);
+ TEST_VREV(q, float, f, 32, 4, 64);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_vrev64, "");
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrnd.c
+@@ -0,0 +1,24 @@
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-add-options arm_v8_neon } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80 };
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
++#endif
++VECT_VAR_DECL (expected, hfloat, 32, 2) [] = { 0xc1800000, 0xc1700000 };
++VECT_VAR_DECL (expected, hfloat, 32, 4) [] = { 0xc1800000, 0xc1700000,
++ 0xc1600000, 0xc1500000 };
++
++#define INSN vrnd
++#define TEST_MSG "VRND"
++
++#include "vrndX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndX.inc
+@@ -0,0 +1,63 @@
++#define FNNAME1(NAME) exec_ ## NAME
++#define FNNAME(NAME) FNNAME1 (NAME)
++
++void FNNAME (INSN) (void)
++{
++ /* vector_res = vrndX (vector), then store the result. */
++#define TEST_VRND2(INSN, Q, T1, T2, W, N) \
++ VECT_VAR (vector_res, T1, W, N) = \
++ INSN##Q##_##T2##W (VECT_VAR (vector, T1, W, N)); \
++ vst1##Q##_##T2##W (VECT_VAR (result, T1, W, N), \
++ VECT_VAR (vector_res, T1, W, N))
++
++ /* Two auxliary macros are necessary to expand INSN. */
++#define TEST_VRND1(INSN, Q, T1, T2, W, N) \
++ TEST_VRND2 (INSN, Q, T1, T2, W, N)
++
++#define TEST_VRND(Q, T1, T2, W, N) \
++ TEST_VRND1 (INSN, Q, T1, T2, W, N)
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++#endif
++ DECL_VARIABLE (vector, float, 32, 2);
++ DECL_VARIABLE (vector, float, 32, 4);
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
++ DECL_VARIABLE (vector_res, float, 32, 2);
++ DECL_VARIABLE (vector_res, float, 32, 4);
++
++ clean_results ();
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VLOAD (vector, buffer, , float, f, 16, 4);
++ VLOAD (vector, buffer, q, float, f, 16, 8);
++#endif
++ VLOAD (vector, buffer, , float, f, 32, 2);
++ VLOAD (vector, buffer, q, float, f, 32, 4);
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRND ( , float, f, 16, 4);
++ TEST_VRND (q, float, f, 16, 8);
++#endif
++ TEST_VRND ( , float, f, 32, 2);
++ TEST_VRND (q, float, f, 32, 4);
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected, "");
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected, "");
++#endif
++ CHECK_FP (TEST_MSG, float, 32, 2, PRIx32, expected, "");
++ CHECK_FP (TEST_MSG, float, 32, 4, PRIx32, expected, "");
++}
++
++int
++main (void)
++{
++ FNNAME (INSN) ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrnda.c
+@@ -0,0 +1,25 @@
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-add-options arm_v8_neon } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results. */
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80 };
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
++#endif
++VECT_VAR_DECL (expected, hfloat, 32, 2) [] = { 0xc1800000, 0xc1700000 };
++VECT_VAR_DECL (expected, hfloat, 32, 4) [] = { 0xc1800000, 0xc1700000,
++ 0xc1600000, 0xc1500000 };
++
++#define INSN vrnda
++#define TEST_MSG "VRNDA"
++
++#include "vrndX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndah_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0x4200 /* 3.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0xc000 /* -2.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0xc800 /* -8.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4a80 /* 13.000000 */,
++ 0xc600 /* -6.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x7c00 /* inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VRNDAH_F16"
++#define INSN_NAME vrndah_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndh_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0x4200 /* 3.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0xc000 /* -2.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0xc700 /* -7.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4a80 /* 13.000000 */,
++ 0xc600 /* -6.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x7c00 /* inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VRNDH_F16"
++#define INSN_NAME vrndh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndi_f16_1.c
+@@ -0,0 +1,71 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (123.4)
++#define RNDI_A 0x57B0 /* FP16_C (123). */
++#define B FP16_C (-567.5)
++#define RNDI_B 0xE070 /* FP16_C (-568). */
++#define C FP16_C (-34.8)
++#define RNDI_C 0xD060 /* FP16_C (-35). */
++#define D FP16_C (1024)
++#define RNDI_D 0x6400 /* FP16_C (1024). */
++#define E FP16_C (663.1)
++#define RNDI_E 0x612E /* FP16_C (663). */
++#define F FP16_C (169.1)
++#define RNDI_F 0x5948 /* FP16_C (169). */
++#define G FP16_C (-4.8)
++#define RNDI_G 0xC500 /* FP16_C (-5). */
++#define H FP16_C (77.5)
++#define RNDI_H 0x54E0 /* FP16_C (78). */
++
++/* Expected results for vrndi. */
++VECT_VAR_DECL (expected_static, hfloat, 16, 4) []
++ = { RNDI_A, RNDI_B, RNDI_C, RNDI_D };
++
++VECT_VAR_DECL (expected_static, hfloat, 16, 8) []
++ = { RNDI_A, RNDI_B, RNDI_C, RNDI_D, RNDI_E, RNDI_F, RNDI_G, RNDI_H };
++
++void exec_vrndi_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VRNDI (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 4);
++ VECT_VAR_DECL (buf_src, float, 16, 4) [] = {A, B, C, D};
++ VLOAD (vsrc, buf_src, , float, f, 16, 4);
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vrndi_f16 (VECT_VAR (vsrc, float, 16, 4));
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VRNDIQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 8);
++ VECT_VAR_DECL (buf_src, float, 16, 8) [] = {A, B, C, D, E, F, G, H};
++ VLOAD (vsrc, buf_src, q, float, f, 16, 8);
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vrndiq_f16 (VECT_VAR (vsrc, float, 16, 8));
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_static, "");
++}
++
++int
++main (void)
++{
++ exec_vrndi_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndih_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0x4200 /* 3.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0xc000 /* -2.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0xc800 /* -8.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4a80 /* 13.000000 */,
++ 0xc600 /* -6.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x7c00 /* inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VRNDIH_F16"
++#define INSN_NAME vrndih_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndm.c
+@@ -0,0 +1,25 @@
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-add-options arm_v8_neon } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results. */
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80 };
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
++#endif
++VECT_VAR_DECL (expected, hfloat, 32, 2) [] = { 0xc1800000, 0xc1700000 };
++VECT_VAR_DECL (expected, hfloat, 32, 4) [] = { 0xc1800000, 0xc1700000,
++ 0xc1600000, 0xc1500000 };
++
++#define INSN vrndm
++#define TEST_MSG "VRNDM"
++
++#include "vrndX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndmh_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0x4200 /* 3.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0xc200 /* -3.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0xc800 /* -8.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4a80 /* 13.000000 */,
++ 0xc700 /* -7.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x7c00 /* inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VRNDMH_F16"
++#define INSN_NAME vrndmh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndn.c
+@@ -0,0 +1,25 @@
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-add-options arm_v8_neon } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results. */
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80 };
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
++#endif
++VECT_VAR_DECL (expected, hfloat, 32, 2) [] = { 0xc1800000, 0xc1700000 };
++VECT_VAR_DECL (expected, hfloat, 32, 4) [] = { 0xc1800000, 0xc1700000,
++ 0xc1600000, 0xc1500000 };
++
++#define INSN vrndn
++#define TEST_MSG "VRNDN"
++
++#include "vrndX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndnh_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0x4200 /* 3.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0xc000 /* -2.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0xc800 /* -8.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4a80 /* 13.000000 */,
++ 0xc600 /* -6.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x7c00 /* inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VRNDNH_F16"
++#define INSN_NAME vrndnh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndp.c
+@@ -0,0 +1,24 @@
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-add-options arm_v8_neon } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80 };
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
++#endif
++VECT_VAR_DECL (expected, hfloat, 32, 2) [] = { 0xc1800000, 0xc1700000 };
++VECT_VAR_DECL (expected, hfloat, 32, 4) [] = { 0xc1800000, 0xc1700000,
++ 0xc1600000, 0xc1500000 };
++
++#define INSN vrndp
++#define TEST_MSG "VRNDP"
++
++#include "vrndX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndph_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0x4400 /* 4.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0xc000 /* -2.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0xc700 /* -7.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4b00 /* 14.000000 */,
++ 0xc600 /* -6.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x7c00 /* inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VRNDPH_F16"
++#define INSN_NAME vrndph_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndx.c
+@@ -0,0 +1,24 @@
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-add-options arm_v8_neon } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80 };
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
++#endif
++VECT_VAR_DECL (expected, hfloat, 32, 2) [] = { 0xc1800000, 0xc1700000 };
++VECT_VAR_DECL (expected, hfloat, 32, 4) [] = { 0xc1800000, 0xc1700000,
++ 0xc1600000, 0xc1500000 };
++
++#define INSN vrndx
++#define TEST_MSG "VRNDX"
++
++#include "vrndX.inc"
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrndxh_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x4000 /* 2.000000 */,
++ 0x4200 /* 3.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0xc000 /* -2.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0xc800 /* -8.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x0000 /* 0.000000 */,
++ 0x3c00 /* 1.000000 */,
++ 0x4a80 /* 13.000000 */,
++ 0xc600 /* -6.000000 */,
++ 0x4d00 /* 20.000000 */,
++ 0x7c00 /* inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VRNDNH_F16"
++#define INSN_NAME vrndnh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrsqrte.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrsqrte.c
+@@ -7,6 +7,11 @@
+ VECT_VAR_DECL(expected,uint,32,2) [] = { 0xffffffff, 0xffffffff };
+ VECT_VAR_DECL(expected,uint,32,4) [] = { 0x9c800000, 0x9c800000,
+ 0x9c800000, 0x9c800000 };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0x324c, 0x324c, 0x324c, 0x324c };
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0x3380, 0x3380, 0x3380, 0x3380,
++ 0x3380, 0x3380, 0x3380, 0x3380 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0x3e498000, 0x3e498000 };
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0x3e700000, 0x3e700000,
+ 0x3e700000, 0x3e700000 };
+@@ -22,17 +27,39 @@ VECT_VAR_DECL(expected_2,uint,32,4) [] = { 0xed000000, 0xed000000,
+ 0xed000000, 0xed000000 };
+
+ /* Expected results with FP special inputs values (NaNs, ...). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp1, hfloat, 16, 4) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++VECT_VAR_DECL(expected_fp1, hfloat, 16, 8) [] = { 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00,
++ 0x7c00, 0x7c00 };
++#endif
+ VECT_VAR_DECL(expected_fp1,hfloat,32,2) [] = { 0x7fc00000, 0x7fc00000 };
+ VECT_VAR_DECL(expected_fp1,hfloat,32,4) [] = { 0x7f800000, 0x7f800000,
+ 0x7f800000, 0x7f800000 };
+
+ /* Expected results with FP special inputs values
+ (negative, infinity). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp2, hfloat, 16, 4) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++VECT_VAR_DECL(expected_fp2, hfloat, 16, 8) [] = { 0x0, 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0 };
++#endif
+ VECT_VAR_DECL(expected_fp2,hfloat,32,2) [] = { 0x7fc00000, 0x7fc00000 };
+ VECT_VAR_DECL(expected_fp2,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+
+ /* Expected results with FP special inputs values
+ (-0, -infinity). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp3, hfloat, 16, 4) [] = { 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00 };
++VECT_VAR_DECL(expected_fp3, hfloat, 16, 8) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++#endif
+ VECT_VAR_DECL(expected_fp3,hfloat,32,2) [] = { 0xff800000, 0xff800000 };
+ VECT_VAR_DECL(expected_fp3,hfloat,32,4) [] = { 0x7fc00000, 0x7fc00000,
+ 0x7fc00000, 0x7fc00000 };
+@@ -50,32 +77,60 @@ void exec_vrsqrte(void)
+ VECT_VAR(vector_res, T1, W, N))
+
+ DECL_VARIABLE(vector, uint, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++#endif
+ DECL_VARIABLE(vector, float, 32, 2);
+ DECL_VARIABLE(vector, uint, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector, float, 32, 4);
+
+ DECL_VARIABLE(vector_res, uint, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, float, 16, 4);
++#endif
+ DECL_VARIABLE(vector_res, float, 32, 2);
+ DECL_VARIABLE(vector_res, uint, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector_res, float, 32, 4);
+
+ clean_results ();
+
+ /* Choose init value arbitrarily. */
+ VDUP(vector, , uint, u, 32, 2, 0x12345678);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, 25.799999f);
++#endif
+ VDUP(vector, , float, f, 32, 2, 25.799999f);
+ VDUP(vector, q, uint, u, 32, 4, 0xABCDEF10);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, q, float, f, 16, 8, 18.2f);
++#endif
+ VDUP(vector, q, float, f, 32, 4, 18.2f);
+
+ /* Apply the operator. */
+ TEST_VRSQRTE(, uint, u, 32, 2);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRSQRTE(, float, f, 16, 4);
++#endif
+ TEST_VRSQRTE(, float, f, 32, 2);
+ TEST_VRSQRTE(q, uint, u, 32, 4);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRSQRTE(q, float, f, 16, 8);
++#endif
+ TEST_VRSQRTE(q, float, f, 32, 4);
+
+ #define CMT ""
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, CMT);
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, CMT);
+
+@@ -110,42 +165,78 @@ void exec_vrsqrte(void)
+
+
+ /* Test FP variants with special input values (NaNs, ...). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, NAN);
++ VDUP(vector, q, float, f, 16, 8, 0.0f);
++#endif
+ VDUP(vector, , float, f, 32, 2, NAN);
+ VDUP(vector, q, float, f, 32, 4, 0.0f);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRSQRTE(, float, f, 16, 4);
++ TEST_VRSQRTE(q, float, f, 16, 8);
++#endif
+ TEST_VRSQRTE(, float, f, 32, 2);
+ TEST_VRSQRTE(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (NaN, 0)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp1, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp1, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp1, CMT);
+
+
+ /* Test FP variants with special input values (negative, infinity). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, -1.0f);
++ VDUP(vector, q, float, f, 16, 8, HUGE_VALF);
++#endif
+ VDUP(vector, , float, f, 32, 2, -1.0f);
+ VDUP(vector, q, float, f, 32, 4, HUGE_VALF);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRSQRTE(, float, f, 16, 4);
++ TEST_VRSQRTE(q, float, f, 16, 8);
++#endif
+ TEST_VRSQRTE(, float, f, 32, 2);
+ TEST_VRSQRTE(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (negative, infinity)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp2, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp2, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp2, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp2, CMT);
+
+ /* Test FP variants with special input values (-0, -infinity). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, -0.0f);
++ VDUP(vector, q, float, f, 16, 8, -HUGE_VALF);
++#endif
+ VDUP(vector, , float, f, 32, 2, -0.0f);
+ VDUP(vector, q, float, f, 32, 4, -HUGE_VALF);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRSQRTE(, float, f, 16, 4);
++ TEST_VRSQRTE(q, float, f, 16, 8);
++#endif
+ TEST_VRSQRTE(, float, f, 32, 2);
+ TEST_VRSQRTE(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (-0, -infinity)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp3, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp3, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp3, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp3, CMT);
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrsqrteh_f16_1.c
+@@ -0,0 +1,30 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++float16_t input[] = { 123.4, 67.8, 34.8, 24.0, 66.1, 144.0, 4.8, 77.0 };
++uint16_t expected[] = { 0x2DC4 /* FP16_C (1/__builtin_sqrtf (123.4)). */,
++ 0x2FC8 /* FP16_C (1/__builtin_sqrtf (67.8)). */,
++ 0x316C /* FP16_C (1/__builtin_sqrtf (34.8)). */,
++ 0x3288 /* FP16_C (1/__builtin_sqrtf (24.0)). */,
++ 0x2FDC /* FP16_C (1/__builtin_sqrtf (66.1)). */,
++ 0x2D54 /* FP16_C (1/__builtin_sqrtf (144.0)). */,
++ 0x3750 /* FP16_C (1/__builtin_sqrtf (4.8)). */,
++ 0x2F48 /* FP16_C (1/__builtin_sqrtf (77.0)). */ };
++
++#define TEST_MSG "VRSQRTEH_F16"
++#define INSN_NAME vrsqrteh_f16
++
++#define INPUT input
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrsqrts.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrsqrts.c
+@@ -4,22 +4,51 @@
+ #include <math.h>
+
+ /* Expected results. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected, hfloat, 16, 4) [] = { 0xd3cb, 0xd3cb, 0xd3cb, 0xd3cb };
++VECT_VAR_DECL(expected, hfloat, 16, 8) [] = { 0xc726, 0xc726, 0xc726, 0xc726,
++ 0xc726, 0xc726, 0xc726, 0xc726 };
++#endif
+ VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc2796b84, 0xc2796b84 };
+ VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc0e4a3d8, 0xc0e4a3d8,
+ 0xc0e4a3d8, 0xc0e4a3d8 };
+
+ /* Expected results with input=NaN. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_nan, hfloat, 16, 4) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++VECT_VAR_DECL(expected_nan, hfloat, 16, 8) [] = { 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00,
++ 0x7e00, 0x7e00 };
++#endif
+ VECT_VAR_DECL(expected_nan,hfloat,32,2) [] = { 0x7fc00000, 0x7fc00000 };
+ VECT_VAR_DECL(expected_nan,hfloat,32,4) [] = { 0x7fc00000, 0x7fc00000,
+ 0x7fc00000, 0x7fc00000 };
+
+ /* Expected results with FP special inputs values (infinity, 0). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp1, hfloat, 16, 4) [] = { 0xfc00, 0xfc00,
++ 0xfc00, 0xfc00 };
++VECT_VAR_DECL(expected_fp1, hfloat, 16, 8) [] = { 0x3e00, 0x3e00,
++ 0x3e00, 0x3e00,
++ 0x3e00, 0x3e00,
++ 0x3e00, 0x3e00 };
++#endif
+ VECT_VAR_DECL(expected_fp1,hfloat,32,2) [] = { 0xff800000, 0xff800000 };
+ VECT_VAR_DECL(expected_fp1,hfloat,32,4) [] = { 0x3fc00000, 0x3fc00000,
+ 0x3fc00000, 0x3fc00000 };
+
+ /* Expected results with only FP special inputs values (infinity,
+ 0). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_fp2, hfloat, 16, 4) [] = { 0x3e00, 0x3e00,
++ 0x3e00, 0x3e00 };
++VECT_VAR_DECL(expected_fp2, hfloat, 16, 8) [] = { 0x3e00, 0x3e00,
++ 0x3e00, 0x3e00,
++ 0x3e00, 0x3e00,
++ 0x3e00, 0x3e00 };
++#endif
+ VECT_VAR_DECL(expected_fp2,hfloat,32,2) [] = { 0x3fc00000, 0x3fc00000 };
+ VECT_VAR_DECL(expected_fp2,hfloat,32,4) [] = { 0x3fc00000, 0x3fc00000,
+ 0x3fc00000, 0x3fc00000 };
+@@ -38,75 +67,143 @@ void exec_vrsqrts(void)
+ VECT_VAR(vector_res, T1, W, N))
+
+ /* No need for integer variants. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector, float, 32, 2);
+ DECL_VARIABLE(vector, float, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector2, float, 32, 2);
+ DECL_VARIABLE(vector2, float, 32, 4);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++#endif
+ DECL_VARIABLE(vector_res, float, 32, 2);
+ DECL_VARIABLE(vector_res, float, 32, 4);
+
+ clean_results ();
+
+ /* Choose init value arbitrarily. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, 12.9f);
++ VDUP(vector, q, float, f, 16, 8, 9.1f);
++#endif
+ VDUP(vector, , float, f, 32, 2, 12.9f);
+ VDUP(vector, q, float, f, 32, 4, 9.1f);
+
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector2, , float, f, 16, 4, 9.9f);
++ VDUP(vector2, q, float, f, 16, 8, 1.9f);
++#endif
+ VDUP(vector2, , float, f, 32, 2, 9.9f);
+ VDUP(vector2, q, float, f, 32, 4, 1.9f);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRSQRTS(, float, f, 16, 4);
++ TEST_VRSQRTS(q, float, f, 16, 8);
++#endif
+ TEST_VRSQRTS(, float, f, 32, 2);
+ TEST_VRSQRTS(q, float, f, 32, 4);
+
+ #define CMT ""
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, CMT);
+
+
+ /* Test FP variants with special input values (NaN). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, NAN);
++ VDUP(vector2, q, float, f, 16, 8, NAN);
++#endif
+ VDUP(vector, , float, f, 32, 2, NAN);
+ VDUP(vector2, q, float, f, 32, 4, NAN);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRSQRTS(, float, f, 16, 4);
++ TEST_VRSQRTS(q, float, f, 16, 8);
++#endif
+ TEST_VRSQRTS(, float, f, 32, 2);
+ TEST_VRSQRTS(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (NAN) and normal values"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_nan, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_nan, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_nan, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_nan, CMT);
+
+
+ /* Test FP variants with special input values (infinity, 0). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, HUGE_VALF);
++ VDUP(vector, q, float, f, 16, 8, 0.0f);
++ /* Restore a normal value in vector2. */
++ VDUP(vector2, q, float, f, 16, 8, 3.2f);
++#endif
+ VDUP(vector, , float, f, 32, 2, HUGE_VALF);
+ VDUP(vector, q, float, f, 32, 4, 0.0f);
+ /* Restore a normal value in vector2. */
+ VDUP(vector2, q, float, f, 32, 4, 3.2f);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRSQRTS(, float, f, 16, 4);
++ TEST_VRSQRTS(q, float, f, 16, 8);
++#endif
+ TEST_VRSQRTS(, float, f, 32, 2);
+ TEST_VRSQRTS(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " FP special (infinity, 0) and normal values"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp1, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp1, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp1, CMT);
+
+
+ /* Test FP variants with only special input values (infinity, 0). */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ VDUP(vector, , float, f, 16, 4, HUGE_VALF);
++ VDUP(vector, q, float, f, 16, 8, 0.0f);
++ VDUP(vector2, , float, f, 16, 4, -0.0f);
++ VDUP(vector2, q, float, f, 16, 8, HUGE_VALF);
++#endif
+ VDUP(vector, , float, f, 32, 2, HUGE_VALF);
+ VDUP(vector, q, float, f, 32, 4, 0.0f);
+ VDUP(vector2, , float, f, 32, 2, -0.0f);
+ VDUP(vector2, q, float, f, 32, 4, HUGE_VALF);
+
+ /* Apply the operator. */
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ TEST_VRSQRTS(, float, f, 16, 4);
++ TEST_VRSQRTS(q, float, f, 16, 8);
++#endif
+ TEST_VRSQRTS(, float, f, 32, 2);
+ TEST_VRSQRTS(q, float, f, 32, 4);
+
+ #undef CMT
+ #define CMT " only FP special (infinity, 0)"
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_fp2, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_fp2, CMT);
++#endif
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_fp2, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_fp2, CMT);
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrsqrtsh_f16_1.c
+@@ -0,0 +1,50 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_fp16.h>
++
++/* Input values. */
++#define A 12.4
++#define B -5.8
++#define C -3.8
++#define D 10
++#define E 66.1
++#define F 16.1
++#define G -4.8
++#define H -77
++
++#define I 0.7
++#define J -78
++#define K 10.23
++#define L 98
++#define M 87
++#define N -87.81
++#define O -1.1
++#define P 47.8
++
++float16_t input_1[] = { A, B, C, D, I, J, K, L };
++float16_t input_2[] = { E, F, G, H, M, N, O, P };
++uint16_t expected[] = { 0xDE62 /* (3.0f + (-A) * E) / 2.0f. */,
++ 0x5206 /* (3.0f + (-B) * F) / 2.0f. */,
++ 0xC7A0 /* (3.0f + (-C) * G) / 2.0f. */,
++ 0x5E0A /* (3.0f + (-D) * H) / 2.0f. */,
++ 0xCF3D /* (3.0f + (-I) * M) / 2.0f. */,
++ 0xEAB0 /* (3.0f + (-J) * N) / 2.0f. */,
++ 0x471F /* (3.0f + (-K) * O) / 2.0f. */,
++ 0xE893 /* (3.0f + (-L) * P) / 2.0f. */ };
++
++#define TEST_MSG "VRSQRTSH_F16"
++#define INSN_NAME vrsqrtsh_f16
++
++#define INPUT_1 input_1
++#define INPUT_2 input_2
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "binary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsXi_n.inc
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsXi_n.inc
+@@ -76,16 +76,16 @@ void FNNAME (INSN_NAME) (void)
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
+ CHECK(TEST_MSG, uint, 64, 1, PRIx64, expected, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected, "");
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected, "");
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected, "");
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected, "");
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected, "");
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected, "");
+
+ #ifdef EXTRA_TESTS
+ EXTRA_TESTS();
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl.c
+@@ -101,10 +101,8 @@ VECT_VAR_DECL(expected_negative_shift,uint,64,2) [] = { 0x7ffffffffffffff,
+ 0x7ffffffffffffff };
+
+
+-#ifndef INSN_NAME
+ #define INSN_NAME vshl
+ #define TEST_MSG "VSHL/VSHLQ"
+-#endif
+
+ #define FNNAME1(NAME) exec_ ## NAME
+ #define FNNAME(NAME) FNNAME1(NAME)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshuffle.inc
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshuffle.inc
+@@ -53,9 +53,17 @@ void FNNAME (INSN_NAME) (void)
+ DECL_VSHUFFLE(float, 32, 4)
+
+ DECL_ALL_VSHUFFLE();
++#if defined (FP16_SUPPORTED)
++ DECL_VSHUFFLE (float, 16, 4);
++ DECL_VSHUFFLE (float, 16, 8);
++#endif
+
+ /* Initialize input "vector" from "buffer". */
+ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector1, buffer);
++#if defined (FP16_SUPPORTED)
++ VLOAD (vector1, buffer, , float, f, 16, 4);
++ VLOAD (vector1, buffer, q, float, f, 16, 8);
++#endif
+ VLOAD(vector1, buffer, , float, f, 32, 2);
+ VLOAD(vector1, buffer, q, float, f, 32, 4);
+
+@@ -68,6 +76,9 @@ void FNNAME (INSN_NAME) (void)
+ VDUP(vector2, , uint, u, 32, 2, 0x77);
+ VDUP(vector2, , poly, p, 8, 8, 0x55);
+ VDUP(vector2, , poly, p, 16, 4, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, , float, f, 16, 4, 14.6f); /* 14.6f is 0x4b4d. */
++#endif
+ VDUP(vector2, , float, f, 32, 2, 33.6f);
+
+ VDUP(vector2, q, int, s, 8, 16, 0x11);
+@@ -78,8 +89,11 @@ void FNNAME (INSN_NAME) (void)
+ VDUP(vector2, q, uint, u, 32, 4, 0x77);
+ VDUP(vector2, q, poly, p, 8, 16, 0x55);
+ VDUP(vector2, q, poly, p, 16, 8, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, q, float, f, 16, 8, 14.6f);
++#endif
+ VDUP(vector2, q, float, f, 32, 4, 33.8f);
+-
++
+ #define TEST_ALL_VSHUFFLE(INSN) \
+ TEST_VSHUFFLE(INSN, , int, s, 8, 8); \
+ TEST_VSHUFFLE(INSN, , int, s, 16, 4); \
+@@ -100,6 +114,10 @@ void FNNAME (INSN_NAME) (void)
+ TEST_VSHUFFLE(INSN, q, poly, p, 16, 8); \
+ TEST_VSHUFFLE(INSN, q, float, f, 32, 4)
+
++#define TEST_VSHUFFLE_FP16(INSN) \
++ TEST_VSHUFFLE(INSN, , float, f, 16, 4); \
++ TEST_VSHUFFLE(INSN, q, float, f, 16, 8);
++
+ #define TEST_ALL_EXTRA_CHUNKS() \
+ TEST_EXTRA_CHUNK(int, 8, 8, 1); \
+ TEST_EXTRA_CHUNK(int, 16, 4, 1); \
+@@ -130,8 +148,8 @@ void FNNAME (INSN_NAME) (void)
+ CHECK(test_name, uint, 8, 8, PRIx8, EXPECTED, comment); \
+ CHECK(test_name, uint, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, uint, 32, 2, PRIx32, EXPECTED, comment); \
+- CHECK(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
+- CHECK(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 8, 8, PRIx8, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 16, 4, PRIx16, EXPECTED, comment); \
+ CHECK_FP(test_name, float, 32, 2, PRIx32, EXPECTED, comment); \
+ \
+ CHECK(test_name, int, 8, 16, PRIx8, EXPECTED, comment); \
+@@ -140,20 +158,40 @@ void FNNAME (INSN_NAME) (void)
+ CHECK(test_name, uint, 8, 16, PRIx8, EXPECTED, comment); \
+ CHECK(test_name, uint, 16, 8, PRIx16, EXPECTED, comment); \
+ CHECK(test_name, uint, 32, 4, PRIx32, EXPECTED, comment); \
+- CHECK(test_name, poly, 8, 16, PRIx8, EXPECTED, comment); \
+- CHECK(test_name, poly, 16, 8, PRIx16, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 8, 16, PRIx8, EXPECTED, comment); \
++ CHECK_POLY(test_name, poly, 16, 8, PRIx16, EXPECTED, comment); \
+ CHECK_FP(test_name, float, 32, 4, PRIx32, EXPECTED, comment); \
+- } \
++ }
++
++#define CHECK_RESULTS_VSHUFFLE_FP16(test_name,EXPECTED,comment) \
++ { \
++ CHECK_FP (test_name, float, 16, 4, PRIx16, EXPECTED, comment); \
++ CHECK_FP (test_name, float, 16, 8, PRIx16, EXPECTED, comment); \
++ }
+
+ clean_results ();
+
+ /* Execute the tests. */
+ TEST_ALL_VSHUFFLE(INSN_NAME);
++#if defined (FP16_SUPPORTED)
++ TEST_VSHUFFLE_FP16 (INSN_NAME);
++#endif
+
+ CHECK_RESULTS_VSHUFFLE (TEST_MSG, expected0, "(chunk 0)");
++#if defined (FP16_SUPPORTED)
++ CHECK_RESULTS_VSHUFFLE_FP16 (TEST_MSG, expected0, "(chunk 0)");
++#endif
+
+ TEST_ALL_EXTRA_CHUNKS();
++#if defined (FP16_SUPPORTED)
++ TEST_EXTRA_CHUNK (float, 16, 4, 1);
++ TEST_EXTRA_CHUNK (float, 16, 8, 1);
++#endif
++
+ CHECK_RESULTS_VSHUFFLE (TEST_MSG, expected1, "(chunk 1)");
++#if defined (FP16_SUPPORTED)
++ CHECK_RESULTS_VSHUFFLE_FP16 (TEST_MSG, expected1, "(chunk 1)");
++#endif
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsli_n.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsli_n.c
+@@ -161,14 +161,16 @@ void vsli_extra(void)
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 64, 1, PRIx64, expected_max_shift, COMMENT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_max_shift, COMMENT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_max_shift, COMMENT);
++ CHECK(TEST_MSG, int, 64, 2, PRIx64, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_max_shift, COMMENT);
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_max_shift, COMMENT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_max_shift, COMMENT);
++ CHECK(TEST_MSG, uint, 64, 2, PRIx64, expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_max_shift, COMMENT);
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsqrt_f16_1.c
+@@ -0,0 +1,72 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++#define FP16_C(a) ((__fp16) a)
++#define A FP16_C (123.4)
++#define B FP16_C (567.8)
++#define C FP16_C (34.8)
++#define D FP16_C (1024)
++#define E FP16_C (663.1)
++#define F FP16_C (144.0)
++#define G FP16_C (4.8)
++#define H FP16_C (77)
++
++#define SQRT_A 0x498E /* FP16_C (__builtin_sqrtf (123.4)). */
++#define SQRT_B 0x4DF5 /* FP16_C (__builtin_sqrtf (567.8)). */
++#define SQRT_C 0x45E6 /* FP16_C (__builtin_sqrtf (34.8)). */
++#define SQRT_D 0x5000 /* FP16_C (__builtin_sqrtf (1024)). */
++#define SQRT_E 0x4E70 /* FP16_C (__builtin_sqrtf (663.1)). */
++#define SQRT_F 0x4A00 /* FP16_C (__builtin_sqrtf (144.0)). */
++#define SQRT_G 0x4062 /* FP16_C (__builtin_sqrtf (4.8)). */
++#define SQRT_H 0x4863 /* FP16_C (__builtin_sqrtf (77)). */
++
++/* Expected results for vsqrt. */
++VECT_VAR_DECL (expected_static, hfloat, 16, 4) []
++ = { SQRT_A, SQRT_B, SQRT_C, SQRT_D };
++
++VECT_VAR_DECL (expected_static, hfloat, 16, 8) []
++ = { SQRT_A, SQRT_B, SQRT_C, SQRT_D, SQRT_E, SQRT_F, SQRT_G, SQRT_H };
++
++void exec_vsqrt_f16 (void)
++{
++#undef TEST_MSG
++#define TEST_MSG "VSQRT (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 4);
++ VECT_VAR_DECL (buf_src, float, 16, 4) [] = {A, B, C, D};
++ VLOAD (vsrc, buf_src, , float, f, 16, 4);
++ DECL_VARIABLE (vector_res, float, 16, 4)
++ = vsqrt_f16 (VECT_VAR (vsrc, float, 16, 4));
++ vst1_f16 (VECT_VAR (result, float, 16, 4),
++ VECT_VAR (vector_res, float, 16, 4));
++
++ CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_static, "");
++
++#undef TEST_MSG
++#define TEST_MSG "VSQRTQ (FP16)"
++ clean_results ();
++
++ DECL_VARIABLE(vsrc, float, 16, 8);
++ VECT_VAR_DECL (buf_src, float, 16, 8) [] = {A, B, C, D, E, F, G, H};
++ VLOAD (vsrc, buf_src, q, float, f, 16, 8);
++ DECL_VARIABLE (vector_res, float, 16, 8)
++ = vsqrtq_f16 (VECT_VAR (vsrc, float, 16, 8));
++ vst1q_f16 (VECT_VAR (result, float, 16, 8),
++ VECT_VAR (vector_res, float, 16, 8));
++
++ CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_static, "");
++}
++
++int
++main (void)
++{
++ exec_vsqrt_f16 ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsqrth_f16_1.c
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0x0000 /* 0.000000 */,
++ 0x8000 /* -0.000000 */,
++ 0x3da8 /* 1.414062 */,
++ 0x3f0b /* 1.760742 */,
++ 0x4479 /* 4.472656 */,
++ 0x390f /* 0.632324 */,
++ 0x7e00 /* nan */,
++ 0x3c9d /* 1.153320 */,
++ 0x7e00 /* nan */,
++ 0x3874 /* 0.556641 */,
++ 0x38a2 /* 0.579102 */,
++ 0x39a8 /* 0.707031 */,
++ 0x3c00 /* 1.000000 */,
++ 0x433f /* 3.623047 */,
++ 0x7e00 /* nan */,
++ 0x4479 /* 4.472656 */,
++ 0x7c00 /* inf */,
++ 0x7e00 /* nan */
++};
++
++#define TEST_MSG "VSQRTH_F16"
++#define INSN_NAME vsqrth_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for unary scalar operations. */
++#include "unary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsri_n.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsri_n.c
+@@ -163,14 +163,14 @@ void vsri_extra(void)
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 64, 1, PRIx64, expected_max_shift, COMMENT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_max_shift, COMMENT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, int, 8, 16, PRIx8, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_max_shift, COMMENT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_max_shift, COMMENT);
+- CHECK(TEST_MSG, poly, 8, 16, PRIx8, expected_max_shift, COMMENT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 8, 16, PRIx8, expected_max_shift, COMMENT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_max_shift, COMMENT);
+ }
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst2_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst2_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ void
+ f_vst2_lane_f16 (float16_t * p, float16x4x2_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst2q_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst2q_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ void
+ f_vst2q_lane_f16 (float16_t * p, float16x8x2_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst3_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst3_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ void
+ f_vst3_lane_f16 (float16_t * p, float16x4x3_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst3q_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst3q_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ void
+ f_vst3q_lane_f16 (float16_t * p, float16x8x3_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst4_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst4_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ void
+ f_vst4_lane_f16 (float16_t * p, float16x4x4_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst4q_lane_f16_indices_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst4q_lane_f16_indices_1.c
+@@ -2,6 +2,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
++/* { dg-require-effective-target arm_neon_fp16_ok { target { arm*-*-* } } } */
+
+ void
+ f_vst4q_lane_f16 (float16_t * p, float16x8x4_t v)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vstX_lane.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vstX_lane.c
+@@ -14,6 +14,7 @@ VECT_VAR_DECL(expected_st2_0,uint,32,2) [] = { 0xfffffff0, 0xfffffff1 };
+ VECT_VAR_DECL(expected_st2_0,poly,8,8) [] = { 0xf0, 0xf1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_0,poly,16,4) [] = { 0xfff0, 0xfff1, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st2_0,hfloat,16,4) [] = { 0xcc00, 0xcb80, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_0,hfloat,32,2) [] = { 0xc1800000, 0xc1700000 };
+ VECT_VAR_DECL(expected_st2_0,int,16,8) [] = { 0xfff0, 0xfff1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+@@ -24,6 +25,8 @@ VECT_VAR_DECL(expected_st2_0,uint,32,4) [] = { 0xfffffff0, 0xfffffff1,
+ 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_0,poly,16,8) [] = { 0xfff0, 0xfff1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st2_0,hfloat,16,8) [] = { 0xcc00, 0xcb80, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_0,hfloat,32,4) [] = { 0xc1800000, 0xc1700000,
+ 0x0, 0x0 };
+
+@@ -39,6 +42,7 @@ VECT_VAR_DECL(expected_st2_1,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_1,poly,8,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_1,poly,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st2_1,hfloat,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_1,hfloat,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_1,int,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+@@ -48,6 +52,8 @@ VECT_VAR_DECL(expected_st2_1,uint,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ VECT_VAR_DECL(expected_st2_1,uint,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_1,poly,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st2_1,hfloat,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st2_1,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+
+ /* Expected results for vst3, chunk 0. */
+@@ -62,6 +68,7 @@ VECT_VAR_DECL(expected_st3_0,uint,32,2) [] = { 0xfffffff0, 0xfffffff1 };
+ VECT_VAR_DECL(expected_st3_0,poly,8,8) [] = { 0xf0, 0xf1, 0xf2, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_0,poly,16,4) [] = { 0xfff0, 0xfff1, 0xfff2, 0x0 };
++VECT_VAR_DECL(expected_st3_0,hfloat,16,4) [] = { 0xcc00, 0xcb80, 0xcb00, 0x0 };
+ VECT_VAR_DECL(expected_st3_0,hfloat,32,2) [] = { 0xc1800000, 0xc1700000 };
+ VECT_VAR_DECL(expected_st3_0,int,16,8) [] = { 0xfff0, 0xfff1, 0xfff2, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+@@ -73,6 +80,8 @@ VECT_VAR_DECL(expected_st3_0,uint,32,4) [] = { 0xfffffff0, 0xfffffff1,
+ 0xfffffff2, 0x0 };
+ VECT_VAR_DECL(expected_st3_0,poly,16,8) [] = { 0xfff0, 0xfff1, 0xfff2, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st3_0,hfloat,16,8) [] = { 0xcc00, 0xcb80, 0xcb00, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_0,hfloat,32,4) [] = { 0xc1800000, 0xc1700000,
+ 0xc1600000, 0x0 };
+
+@@ -88,6 +97,7 @@ VECT_VAR_DECL(expected_st3_1,uint,32,2) [] = { 0xfffffff2, 0x0 };
+ VECT_VAR_DECL(expected_st3_1,poly,8,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_1,poly,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st3_1,hfloat,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_1,hfloat,32,2) [] = { 0xc1600000, 0x0 };
+ VECT_VAR_DECL(expected_st3_1,int,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+@@ -97,6 +107,8 @@ VECT_VAR_DECL(expected_st3_1,uint,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ VECT_VAR_DECL(expected_st3_1,uint,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_1,poly,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st3_1,hfloat,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_1,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+
+ /* Expected results for vst3, chunk 2. */
+@@ -111,6 +123,7 @@ VECT_VAR_DECL(expected_st3_2,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_2,poly,8,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_2,poly,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st3_2,hfloat,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_2,hfloat,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_2,int,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+@@ -120,6 +133,8 @@ VECT_VAR_DECL(expected_st3_2,uint,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ VECT_VAR_DECL(expected_st3_2,uint,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_2,poly,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st3_2,hfloat,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st3_2,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+
+ /* Expected results for vst4, chunk 0. */
+@@ -134,6 +149,7 @@ VECT_VAR_DECL(expected_st4_0,uint,32,2) [] = { 0xfffffff0, 0xfffffff1 };
+ VECT_VAR_DECL(expected_st4_0,poly,8,8) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_0,poly,16,4) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff3 };
++VECT_VAR_DECL(expected_st4_0,hfloat,16,4) [] = { 0xcc00, 0xcb80, 0xcb00, 0xca80 };
+ VECT_VAR_DECL(expected_st4_0,hfloat,32,2) [] = { 0xc1800000, 0xc1700000 };
+ VECT_VAR_DECL(expected_st4_0,int,16,8) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff3,
+ 0x0, 0x0, 0x0, 0x0 };
+@@ -145,6 +161,8 @@ VECT_VAR_DECL(expected_st4_0,uint,32,4) [] = { 0xfffffff0, 0xfffffff1,
+ 0xfffffff2, 0xfffffff3 };
+ VECT_VAR_DECL(expected_st4_0,poly,16,8) [] = { 0xfff0, 0xfff1, 0xfff2, 0xfff3,
+ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st4_0,hfloat,16,8) [] = { 0xcc00, 0xcb80, 0xcb00, 0xca80,
++ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_0,hfloat,32,4) [] = { 0xc1800000, 0xc1700000,
+ 0xc1600000, 0xc1500000 };
+
+@@ -160,6 +178,7 @@ VECT_VAR_DECL(expected_st4_1,uint,32,2) [] = { 0xfffffff2, 0xfffffff3 };
+ VECT_VAR_DECL(expected_st4_1,poly,8,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_1,poly,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st4_1,hfloat,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_1,hfloat,32,2) [] = { 0xc1600000, 0xc1500000 };
+ VECT_VAR_DECL(expected_st4_1,int,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+@@ -169,6 +188,8 @@ VECT_VAR_DECL(expected_st4_1,uint,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ VECT_VAR_DECL(expected_st4_1,uint,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_1,poly,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st4_1,hfloat,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_1,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+
+ /* Expected results for vst4, chunk 2. */
+@@ -183,6 +204,7 @@ VECT_VAR_DECL(expected_st4_2,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_2,poly,8,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_2,poly,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st4_2,hfloat,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_2,hfloat,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_2,int,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+@@ -192,6 +214,8 @@ VECT_VAR_DECL(expected_st4_2,uint,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ VECT_VAR_DECL(expected_st4_2,uint,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_2,poly,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st4_2,hfloat,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_2,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+
+ /* Expected results for vst4, chunk 3. */
+@@ -206,6 +230,7 @@ VECT_VAR_DECL(expected_st4_3,uint,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_3,poly,8,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_3,poly,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st4_3,hfloat,16,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_3,hfloat,32,2) [] = { 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_3,int,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
+@@ -215,6 +240,8 @@ VECT_VAR_DECL(expected_st4_3,uint,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ VECT_VAR_DECL(expected_st4_3,uint,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_3,poly,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0 };
++VECT_VAR_DECL(expected_st4_3,hfloat,16,8) [] = { 0x0, 0x0, 0x0, 0x0,
++ 0x0, 0x0, 0x0, 0x0 };
+ VECT_VAR_DECL(expected_st4_3,hfloat,32,4) [] = { 0x0, 0x0, 0x0, 0x0 };
+
+ /* Declare additional input buffers as needed. */
+@@ -229,6 +256,9 @@ VECT_VAR_DECL_INIT(buffer_vld2_lane, uint, 32, 2);
+ VECT_VAR_DECL_INIT(buffer_vld2_lane, uint, 64, 2);
+ VECT_VAR_DECL_INIT(buffer_vld2_lane, poly, 8, 2);
+ VECT_VAR_DECL_INIT(buffer_vld2_lane, poly, 16, 2);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++VECT_VAR_DECL_INIT(buffer_vld2_lane, float, 16, 2);
++#endif
+ VECT_VAR_DECL_INIT(buffer_vld2_lane, float, 32, 2);
+
+ /* Input buffers for vld3_lane. */
+@@ -242,6 +272,9 @@ VECT_VAR_DECL_INIT(buffer_vld3_lane, uint, 32, 3);
+ VECT_VAR_DECL_INIT(buffer_vld3_lane, uint, 64, 3);
+ VECT_VAR_DECL_INIT(buffer_vld3_lane, poly, 8, 3);
+ VECT_VAR_DECL_INIT(buffer_vld3_lane, poly, 16, 3);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++VECT_VAR_DECL_INIT(buffer_vld3_lane, float, 16, 3);
++#endif
+ VECT_VAR_DECL_INIT(buffer_vld3_lane, float, 32, 3);
+
+ /* Input buffers for vld4_lane. */
+@@ -255,6 +288,9 @@ VECT_VAR_DECL_INIT(buffer_vld4_lane, uint, 32, 4);
+ VECT_VAR_DECL_INIT(buffer_vld4_lane, uint, 64, 4);
+ VECT_VAR_DECL_INIT(buffer_vld4_lane, poly, 8, 4);
+ VECT_VAR_DECL_INIT(buffer_vld4_lane, poly, 16, 4);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++VECT_VAR_DECL_INIT(buffer_vld4_lane, float, 16, 4);
++#endif
+ VECT_VAR_DECL_INIT(buffer_vld4_lane, float, 32, 4);
+
+ void exec_vstX_lane (void)
+@@ -302,7 +338,7 @@ void exec_vstX_lane (void)
+
+ /* We need all variants in 64 bits, but there is no 64x2 variant,
+ nor 128 bits vectors of int8/uint8/poly8. */
+-#define DECL_ALL_VSTX_LANE(X) \
++#define DECL_ALL_VSTX_LANE_NO_FP16(X) \
+ DECL_VSTX_LANE(int, 8, 8, X); \
+ DECL_VSTX_LANE(int, 16, 4, X); \
+ DECL_VSTX_LANE(int, 32, 2, X); \
+@@ -319,11 +355,20 @@ void exec_vstX_lane (void)
+ DECL_VSTX_LANE(poly, 16, 8, X); \
+ DECL_VSTX_LANE(float, 32, 4, X)
+
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++#define DECL_ALL_VSTX_LANE(X) \
++ DECL_ALL_VSTX_LANE_NO_FP16(X); \
++ DECL_VSTX_LANE(float, 16, 4, X); \
++ DECL_VSTX_LANE(float, 16, 8, X)
++#else
++#define DECL_ALL_VSTX_LANE(X) DECL_ALL_VSTX_LANE_NO_FP16(X)
++#endif
++
+ #define DUMMY_ARRAY(V, T, W, N, L) VECT_VAR_DECL(V,T,W,N)[N*L]
+
+ /* Use the same lanes regardless of the size of the array (X), for
+ simplicity. */
+-#define TEST_ALL_VSTX_LANE(X) \
++#define TEST_ALL_VSTX_LANE_NO_FP16(X) \
+ TEST_VSTX_LANE(, int, s, 8, 8, X, 7); \
+ TEST_VSTX_LANE(, int, s, 16, 4, X, 2); \
+ TEST_VSTX_LANE(, int, s, 32, 2, X, 0); \
+@@ -340,7 +385,16 @@ void exec_vstX_lane (void)
+ TEST_VSTX_LANE(q, poly, p, 16, 8, X, 5); \
+ TEST_VSTX_LANE(q, float, f, 32, 4, X, 2)
+
+-#define TEST_ALL_EXTRA_CHUNKS(X, Y) \
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++#define TEST_ALL_VSTX_LANE(X) \
++ TEST_ALL_VSTX_LANE_NO_FP16(X); \
++ TEST_VSTX_LANE(, float, f, 16, 4, X, 2); \
++ TEST_VSTX_LANE(q, float, f, 16, 8, X, 6)
++#else
++#define TEST_ALL_VSTX_LANE(X) TEST_ALL_VSTX_LANE_NO_FP16(X)
++#endif
++
++#define TEST_ALL_EXTRA_CHUNKS_NO_FP16(X, Y) \
+ TEST_EXTRA_CHUNK(int, 8, 8, X, Y); \
+ TEST_EXTRA_CHUNK(int, 16, 4, X, Y); \
+ TEST_EXTRA_CHUNK(int, 32, 2, X, Y); \
+@@ -357,6 +411,15 @@ void exec_vstX_lane (void)
+ TEST_EXTRA_CHUNK(poly, 16, 8, X, Y); \
+ TEST_EXTRA_CHUNK(float, 32, 4, X, Y)
+
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++#define TEST_ALL_EXTRA_CHUNKS(X,Y) \
++ TEST_ALL_EXTRA_CHUNKS_NO_FP16(X, Y); \
++ TEST_EXTRA_CHUNK(float, 16, 4, X, Y); \
++ TEST_EXTRA_CHUNK(float, 16, 8, X, Y)
++#else
++#define TEST_ALL_EXTRA_CHUNKS(X,Y) TEST_ALL_EXTRA_CHUNKS_NO_FP16(X, Y)
++#endif
++
+ /* Declare the temporary buffers / variables. */
+ DECL_ALL_VSTX_LANE(2);
+ DECL_ALL_VSTX_LANE(3);
+@@ -371,12 +434,18 @@ void exec_vstX_lane (void)
+ DUMMY_ARRAY(buffer_src, uint, 32, 2, 4);
+ DUMMY_ARRAY(buffer_src, poly, 8, 8, 4);
+ DUMMY_ARRAY(buffer_src, poly, 16, 4, 4);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ DUMMY_ARRAY(buffer_src, float, 16, 4, 4);
++#endif
+ DUMMY_ARRAY(buffer_src, float, 32, 2, 4);
+ DUMMY_ARRAY(buffer_src, int, 16, 8, 4);
+ DUMMY_ARRAY(buffer_src, int, 32, 4, 4);
+ DUMMY_ARRAY(buffer_src, uint, 16, 8, 4);
+ DUMMY_ARRAY(buffer_src, uint, 32, 4, 4);
+ DUMMY_ARRAY(buffer_src, poly, 16, 8, 4);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ DUMMY_ARRAY(buffer_src, float, 16, 8, 4);
++#endif
+ DUMMY_ARRAY(buffer_src, float, 32, 4, 4);
+
+ /* Check vst2_lane/vst2q_lane. */
+@@ -391,15 +460,19 @@ void exec_vstX_lane (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_st2_0, CMT);
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_st2_0, CMT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_st2_0, CMT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_st2_0, CMT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_st2_0, CMT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_st2_0, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_st2_0, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_st2_0, CMT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_st2_0, CMT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_st2_0, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_st2_0, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_st2_0, CMT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_st2_0, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_st2_0, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_st2_0, CMT);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_st2_0, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_st2_0, CMT);
++#endif
+
+ TEST_ALL_EXTRA_CHUNKS(2, 1);
+ #undef CMT
+@@ -410,15 +483,19 @@ void exec_vstX_lane (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_st2_1, CMT);
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_st2_1, CMT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_st2_1, CMT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_st2_1, CMT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_st2_1, CMT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_st2_1, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_st2_1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_st2_1, CMT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_st2_1, CMT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_st2_1, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_st2_1, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_st2_1, CMT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_st2_1, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_st2_1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_st2_1, CMT);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_st2_1, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_st2_1, CMT);
++#endif
+
+
+ /* Check vst3_lane/vst3q_lane. */
+@@ -435,15 +512,19 @@ void exec_vstX_lane (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_st3_0, CMT);
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_st3_0, CMT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_st3_0, CMT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_st3_0, CMT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_st3_0, CMT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_st3_0, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_st3_0, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_st3_0, CMT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_st3_0, CMT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_st3_0, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_st3_0, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_st3_0, CMT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_st3_0, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_st3_0, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_st3_0, CMT);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_st3_0, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_st3_0, CMT);
++#endif
+
+ TEST_ALL_EXTRA_CHUNKS(3, 1);
+
+@@ -455,15 +536,19 @@ void exec_vstX_lane (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_st3_1, CMT);
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_st3_1, CMT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_st3_1, CMT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_st3_1, CMT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_st3_1, CMT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_st3_1, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_st3_1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_st3_1, CMT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_st3_1, CMT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_st3_1, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_st3_1, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_st3_1, CMT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_st3_1, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_st3_1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_st3_1, CMT);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_st3_1, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_st3_1, CMT);
++#endif
+
+ TEST_ALL_EXTRA_CHUNKS(3, 2);
+
+@@ -475,15 +560,19 @@ void exec_vstX_lane (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_st3_2, CMT);
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_st3_2, CMT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_st3_2, CMT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_st3_2, CMT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_st3_2, CMT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_st3_2, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_st3_2, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_st3_2, CMT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_st3_2, CMT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_st3_2, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_st3_2, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_st3_2, CMT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_st3_2, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_st3_2, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_st3_2, CMT);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_st3_2, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_st3_2, CMT);
++#endif
+
+
+ /* Check vst4_lane/vst4q_lane. */
+@@ -500,15 +589,19 @@ void exec_vstX_lane (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_st4_0, CMT);
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_st4_0, CMT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_st4_0, CMT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_st4_0, CMT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_st4_0, CMT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_st4_0, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_st4_0, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_st4_0, CMT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_st4_0, CMT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_st4_0, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_st4_0, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_st4_0, CMT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_st4_0, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_st4_0, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_st4_0, CMT);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_st4_0, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_st4_0, CMT);
++#endif
+
+ TEST_ALL_EXTRA_CHUNKS(4, 1);
+
+@@ -520,15 +613,19 @@ void exec_vstX_lane (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_st4_1, CMT);
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_st4_1, CMT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_st4_1, CMT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_st4_1, CMT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_st4_1, CMT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_st4_1, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_st4_1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_st4_1, CMT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_st4_1, CMT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_st4_1, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_st4_1, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_st4_1, CMT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_st4_1, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_st4_1, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_st4_1, CMT);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_st4_1, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_st4_1, CMT);
++#endif
+
+ TEST_ALL_EXTRA_CHUNKS(4, 2);
+
+@@ -540,15 +637,19 @@ void exec_vstX_lane (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_st4_2, CMT);
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_st4_2, CMT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_st4_2, CMT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_st4_2, CMT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_st4_2, CMT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_st4_2, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_st4_2, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_st4_2, CMT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_st4_2, CMT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_st4_2, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_st4_2, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_st4_2, CMT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_st4_2, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_st4_2, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_st4_2, CMT);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_st4_2, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_st4_2, CMT);
++#endif
+
+ TEST_ALL_EXTRA_CHUNKS(4, 3);
+
+@@ -560,15 +661,19 @@ void exec_vstX_lane (void)
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_st4_3, CMT);
+ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_st4_3, CMT);
+ CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected_st4_3, CMT);
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_st4_3, CMT);
+- CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected_st4_3, CMT);
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_st4_3, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 4, PRIx16, expected_st4_3, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_st4_3, CMT);
+ CHECK(TEST_MSG, int, 16, 8, PRIx16, expected_st4_3, CMT);
+ CHECK(TEST_MSG, int, 32, 4, PRIx32, expected_st4_3, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_st4_3, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_st4_3, CMT);
+- CHECK(TEST_MSG, poly, 16, 8, PRIx16, expected_st4_3, CMT);
++ CHECK_POLY(TEST_MSG, poly, 16, 8, PRIx16, expected_st4_3, CMT);
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_st4_3, CMT);
++#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_st4_3, CMT);
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_st4_3, CMT);
++#endif
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsub.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsub.c
+@@ -44,6 +44,14 @@ VECT_VAR_DECL(expected,uint,64,2) [] = { 0xffffffffffffffed,
+ VECT_VAR_DECL(expected_float32,hfloat,32,2) [] = { 0xc00ccccd, 0xc00ccccd };
+ VECT_VAR_DECL(expected_float32,hfloat,32,4) [] = { 0xc00ccccc, 0xc00ccccc,
+ 0xc00ccccc, 0xc00ccccc };
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++VECT_VAR_DECL(expected_float16, hfloat, 16, 4) [] = { 0xc066, 0xc066,
++ 0xc066, 0xc066 };
++VECT_VAR_DECL(expected_float16, hfloat, 16, 8) [] = { 0xc067, 0xc067,
++ 0xc067, 0xc067,
++ 0xc067, 0xc067,
++ 0xc067, 0xc067 };
++#endif
+
+ void exec_vsub_f32(void)
+ {
+@@ -67,4 +75,27 @@ void exec_vsub_f32(void)
+
+ CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected_float32, "");
+ CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_float32, "");
++
++#if defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ DECL_VARIABLE(vector, float, 16, 4);
++ DECL_VARIABLE(vector, float, 16, 8);
++
++ DECL_VARIABLE(vector2, float, 16, 4);
++ DECL_VARIABLE(vector2, float, 16, 8);
++
++ DECL_VARIABLE(vector_res, float, 16, 4);
++ DECL_VARIABLE(vector_res, float, 16, 8);
++
++ VDUP(vector, , float, f, 16, 4, 2.3f);
++ VDUP(vector, q, float, f, 16, 8, 3.4f);
++
++ VDUP(vector2, , float, f, 16, 4, 4.5f);
++ VDUP(vector2, q, float, f, 16, 8, 5.6f);
++
++ TEST_BINARY_OP(INSN_NAME, , float, f, 16, 4);
++ TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
++
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected_float16, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_float16, "");
++#endif
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsubh_f16_1.c
+@@ -0,0 +1,42 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_hw } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++#include <arm_fp16.h>
++
++#define INFF __builtin_inf ()
++
++/* Expected results (16-bit hexadecimal representation). */
++uint16_t expected[] =
++{
++ 0xbc00 /* -1.000000 */,
++ 0xbc00 /* -1.000000 */,
++ 0x4654 /* 6.328125 */,
++ 0xd60e /* -96.875000 */,
++ 0xc900 /* -10.000000 */,
++ 0x36b8 /* 0.419922 */,
++ 0xc19a /* -2.800781 */,
++ 0x4848 /* 8.562500 */,
++ 0xbd34 /* -1.300781 */,
++ 0xccec /* -19.687500 */,
++ 0x4791 /* 7.566406 */,
++ 0xbf34 /* -1.800781 */,
++ 0x484d /* 8.601562 */,
++ 0x4804 /* 8.031250 */,
++ 0xc69c /* -6.609375 */,
++ 0x4ceb /* 19.671875 */,
++ 0x7c00 /* inf */,
++ 0xfc00 /* -inf */
++};
++
++#define TEST_MSG "VSUB_F16"
++#define INSN_NAME vsubh_f16
++
++#define EXPECTED expected
++
++#define INPUT_TYPE float16_t
++#define OUTPUT_TYPE float16_t
++#define OUTPUT_TYPE_SIZE 16
++
++/* Include the template for binary scalar operations. */
++#include "binary_scalar_op.inc"
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vtbX.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vtbX.c
+@@ -167,7 +167,7 @@ void exec_vtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vtbl1, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vtbl1, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbl1, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbl1, "");
+
+ /* Check vtbl2. */
+ clean_results ();
+@@ -177,7 +177,7 @@ void exec_vtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vtbl2, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vtbl2, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbl2, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbl2, "");
+
+ /* Check vtbl3. */
+ clean_results ();
+@@ -187,7 +187,7 @@ void exec_vtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vtbl3, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vtbl3, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbl3, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbl3, "");
+
+ /* Check vtbl4. */
+ clean_results ();
+@@ -197,7 +197,7 @@ void exec_vtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vtbl4, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vtbl4, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbl4, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbl4, "");
+
+
+ /* Now test VTBX. */
+@@ -249,7 +249,7 @@ void exec_vtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vtbx1, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vtbx1, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbx1, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbx1, "");
+
+ /* Check vtbx2. */
+ clean_results ();
+@@ -259,7 +259,7 @@ void exec_vtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vtbx2, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vtbx2, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbx2, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbx2, "");
+
+ /* Check vtbx3. */
+ clean_results ();
+@@ -269,7 +269,7 @@ void exec_vtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vtbx3, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vtbx3, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbx3, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbx3, "");
+
+ /* Check vtbx4. */
+ clean_results ();
+@@ -279,7 +279,7 @@ void exec_vtbX (void)
+
+ CHECK(TEST_MSG, int, 8, 8, PRIx8, expected_vtbx4, "");
+ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_vtbx4, "");
+- CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbx4, "");
++ CHECK_POLY(TEST_MSG, poly, 8, 8, PRIx8, expected_vtbx4, "");
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vtrn.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vtrn.c
+@@ -15,6 +15,10 @@ VECT_VAR_DECL(expected0,uint,32,2) [] = { 0xfffffff0, 0xfffffff1 };
+ VECT_VAR_DECL(expected0,poly,8,8) [] = { 0xf0, 0xf1, 0x55, 0x55,
+ 0xf2, 0xf3, 0x55, 0x55 };
+ VECT_VAR_DECL(expected0,poly,16,4) [] = { 0xfff0, 0xfff1, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected0, hfloat, 16, 4) [] = { 0xcc00, 0xcb80,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected0,hfloat,32,2) [] = { 0xc1800000, 0xc1700000 };
+ VECT_VAR_DECL(expected0,int,8,16) [] = { 0xf0, 0xf1, 0x11, 0x11,
+ 0xf2, 0xf3, 0x11, 0x11,
+@@ -36,6 +40,12 @@ VECT_VAR_DECL(expected0,poly,8,16) [] = { 0xf0, 0xf1, 0x55, 0x55,
+ 0xf6, 0xf7, 0x55, 0x55 };
+ VECT_VAR_DECL(expected0,poly,16,8) [] = { 0xfff0, 0xfff1, 0x66, 0x66,
+ 0xfff2, 0xfff3, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected0, hfloat, 16, 8) [] = { 0xcc00, 0xcb80,
++ 0x4b4d, 0x4b4d,
++ 0xcb00, 0xca80,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected0,hfloat,32,4) [] = { 0xc1800000, 0xc1700000,
+ 0x42073333, 0x42073333 };
+
+@@ -51,6 +61,10 @@ VECT_VAR_DECL(expected1,uint,32,2) [] = { 0x77, 0x77 };
+ VECT_VAR_DECL(expected1,poly,8,8) [] = { 0xf4, 0xf5, 0x55, 0x55,
+ 0xf6, 0xf7, 0x55, 0x55 };
+ VECT_VAR_DECL(expected1,poly,16,4) [] = { 0xfff2, 0xfff3, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected1, hfloat, 16, 4) [] = { 0xcb00, 0xca80,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected1,hfloat,32,2) [] = { 0x42066666, 0x42066666 };
+ VECT_VAR_DECL(expected1,int,8,16) [] = { 0xf8, 0xf9, 0x11, 0x11,
+ 0xfa, 0xfb, 0x11, 0x11,
+@@ -72,6 +86,12 @@ VECT_VAR_DECL(expected1,poly,8,16) [] = { 0xf8, 0xf9, 0x55, 0x55,
+ 0xfe, 0xff, 0x55, 0x55 };
+ VECT_VAR_DECL(expected1,poly,16,8) [] = { 0xfff4, 0xfff5, 0x66, 0x66,
+ 0xfff6, 0xfff7, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected1, hfloat, 16, 8) [] = { 0xca00, 0xc980,
++ 0x4b4d, 0x4b4d,
++ 0xc900, 0xc880,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected1,hfloat,32,4) [] = { 0xc1600000, 0xc1500000,
+ 0x42073333, 0x42073333 };
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vtrn_half.c
+@@ -0,0 +1,263 @@
++/* { dg-do run } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results. */
++VECT_VAR_DECL(expected,int,8,8) [] = { 0xf0, 0x11, 0xf2, 0x11,
++ 0xf4, 0x11, 0xf6, 0x11 };
++VECT_VAR_DECL(expected,int,16,4) [] = { 0xfff0, 0x22, 0xfff2, 0x22 };
++VECT_VAR_DECL(expected,int,32,2) [] = { 0xfffffff0, 0x33 };
++VECT_VAR_DECL(expected,int,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf0, 0x55, 0xf2, 0x55,
++ 0xf4, 0x55, 0xf6, 0x55 };
++VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff0, 0x66, 0xfff2, 0x66 };
++VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff0, 0x77 };
++VECT_VAR_DECL(expected,uint,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected,poly,8,8) [] = { 0xf0, 0x55, 0xf2, 0x55,
++ 0xf4, 0x55, 0xf6, 0x55 };
++VECT_VAR_DECL(expected,poly,16,4) [] = { 0xfff0, 0x66, 0xfff2, 0x66 };
++VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1800000, 0x42066666 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0x4b4d,
++ 0xcb00, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected,int,8,16) [] = { 0xf0, 0x11, 0xf2, 0x11,
++ 0xf4, 0x11, 0xf6, 0x11,
++ 0xf8, 0x11, 0xfa, 0x11,
++ 0xfc, 0x11, 0xfe, 0x11 };
++VECT_VAR_DECL(expected,int,16,8) [] = { 0xfff0, 0x22, 0xfff2, 0x22,
++ 0xfff4, 0x22, 0xfff6, 0x22 };
++VECT_VAR_DECL(expected,int,32,4) [] = { 0xfffffff0, 0x33,
++ 0xfffffff2, 0x33 };
++VECT_VAR_DECL(expected,int,64,2) [] = { 0xfffffffffffffff0,
++ 0x44 };
++VECT_VAR_DECL(expected,uint,8,16) [] = { 0xf0, 0x55, 0xf2, 0x55,
++ 0xf4, 0x55, 0xf6, 0x55,
++ 0xf8, 0x55, 0xfa, 0x55,
++ 0xfc, 0x55, 0xfe, 0x55 };
++VECT_VAR_DECL(expected,uint,16,8) [] = { 0xfff0, 0x66, 0xfff2, 0x66,
++ 0xfff4, 0x66, 0xfff6, 0x66 };
++VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffffff0, 0x77,
++ 0xfffffff2, 0x77 };
++VECT_VAR_DECL(expected,uint,64,2) [] = { 0xfffffffffffffff0,
++ 0x88 };
++VECT_VAR_DECL(expected,poly,8,16) [] = { 0xf0, 0x55, 0xf2, 0x55,
++ 0xf4, 0x55, 0xf6, 0x55,
++ 0xf8, 0x55, 0xfa, 0x55,
++ 0xfc, 0x55, 0xfe, 0x55 };
++VECT_VAR_DECL(expected,poly,16,8) [] = { 0xfff0, 0x66, 0xfff2, 0x66,
++ 0xfff4, 0x66, 0xfff6, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0x4b4d,
++ 0xcb00, 0x4b4d,
++ 0xca00, 0x4b4d,
++ 0xc900, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1800000, 0x42073333,
++ 0xc1600000, 0x42073333 };
++
++#define TEST_MSG "VTRN1"
++void exec_vtrn_half (void)
++{
++#define TEST_VTRN(PART, Q, T1, T2, W, N) \
++ VECT_VAR(vector_res, T1, W, N) = \
++ vtrn##PART##Q##_##T2##W(VECT_VAR(vector, T1, W, N), \
++ VECT_VAR(vector2, T1, W, N)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
++
++#define TEST_VTRN1(Q, T1, T2, W, N) TEST_VTRN(1, Q, T1, T2, W, N)
++
++ /* Input vector can only have 64 bits. */
++ DECL_VARIABLE_ALL_VARIANTS(vector);
++ DECL_VARIABLE_ALL_VARIANTS(vector2);
++ DECL_VARIABLE(vector, float, 64, 2);
++ DECL_VARIABLE(vector2, float, 64, 2);
++
++ DECL_VARIABLE_ALL_VARIANTS(vector_res);
++ DECL_VARIABLE(vector_res, float, 64, 2);
++
++ clean_results ();
++ /* We don't have vtrn1_T64x1, so set expected to the clean value. */
++ CLEAN(expected, int, 64, 1);
++ CLEAN(expected, uint, 64, 1);
++
++ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (FP16_SUPPORTED)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
++ VLOAD(vector, buffer, , float, f, 32, 2);
++ VLOAD(vector, buffer, q, float, f, 32, 4);
++ VLOAD(vector, buffer, q, float, f, 64, 2);
++
++ /* Choose arbitrary initialization values. */
++ VDUP(vector2, , int, s, 8, 8, 0x11);
++ VDUP(vector2, , int, s, 16, 4, 0x22);
++ VDUP(vector2, , int, s, 32, 2, 0x33);
++ VDUP(vector2, , uint, u, 8, 8, 0x55);
++ VDUP(vector2, , uint, u, 16, 4, 0x66);
++ VDUP(vector2, , uint, u, 32, 2, 0x77);
++ VDUP(vector2, , poly, p, 8, 8, 0x55);
++ VDUP(vector2, , poly, p, 16, 4, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, , float, f, 16, 4, 14.6f); /* 14.6f is 0x4b4d. */
++#endif
++ VDUP(vector2, , float, f, 32, 2, 33.6f);
++
++ VDUP(vector2, q, int, s, 8, 16, 0x11);
++ VDUP(vector2, q, int, s, 16, 8, 0x22);
++ VDUP(vector2, q, int, s, 32, 4, 0x33);
++ VDUP(vector2, q, int, s, 64, 2, 0x44);
++ VDUP(vector2, q, uint, u, 8, 16, 0x55);
++ VDUP(vector2, q, uint, u, 16, 8, 0x66);
++ VDUP(vector2, q, uint, u, 32, 4, 0x77);
++ VDUP(vector2, q, uint, u, 64, 2, 0x88);
++ VDUP(vector2, q, poly, p, 8, 16, 0x55);
++ VDUP(vector2, q, poly, p, 16, 8, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, q, float, f, 16, 8, 14.6f);
++#endif
++ VDUP(vector2, q, float, f, 32, 4, 33.8f);
++ VDUP(vector2, q, float, f, 64, 2, 33.8f);
++
++ TEST_VTRN1(, int, s, 8, 8);
++ TEST_VTRN1(, int, s, 16, 4);
++ TEST_VTRN1(, int, s, 32, 2);
++ TEST_VTRN1(, uint, u, 8, 8);
++ TEST_VTRN1(, uint, u, 16, 4);
++ TEST_VTRN1(, uint, u, 32, 2);
++ TEST_VTRN1(, poly, p, 8, 8);
++ TEST_VTRN1(, poly, p, 16, 4);
++#if defined (FP16_SUPPORTED)
++ TEST_VTRN1(, float, f, 16, 4);
++#endif
++ TEST_VTRN1(, float, f, 32, 2);
++
++ TEST_VTRN1(q, int, s, 8, 16);
++ TEST_VTRN1(q, int, s, 16, 8);
++ TEST_VTRN1(q, int, s, 32, 4);
++ TEST_VTRN1(q, int, s, 64, 2);
++ TEST_VTRN1(q, uint, u, 8, 16);
++ TEST_VTRN1(q, uint, u, 16, 8);
++ TEST_VTRN1(q, uint, u, 32, 4);
++ TEST_VTRN1(q, uint, u, 64, 2);
++ TEST_VTRN1(q, poly, p, 8, 16);
++ TEST_VTRN1(q, poly, p, 16, 8);
++#if defined (FP16_SUPPORTED)
++ TEST_VTRN1(q, float, f, 16, 8);
++#endif
++ TEST_VTRN1(q, float, f, 32, 4);
++ TEST_VTRN1(q, float, f, 64, 2);
++
++#if defined (FP16_SUPPORTED)
++ CHECK_RESULTS (TEST_MSG, "");
++#else
++ CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
++#endif
++
++#undef TEST_MSG
++#define TEST_MSG "VTRN2"
++
++#define TEST_VTRN2(Q, T1, T2, W, N) TEST_VTRN(2, Q, T1, T2, W, N)
++
++/* Expected results. */
++VECT_VAR_DECL(expected2,int,8,8) [] = { 0xf1, 0x11, 0xf3, 0x11,
++ 0xf5, 0x11, 0xf7, 0x11 };
++VECT_VAR_DECL(expected2,int,16,4) [] = { 0xfff1, 0x22, 0xfff3, 0x22 };
++VECT_VAR_DECL(expected2,int,32,2) [] = { 0xfffffff1, 0x33 };
++VECT_VAR_DECL(expected2,int,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected2,uint,8,8) [] = { 0xf1, 0x55, 0xf3, 0x55,
++ 0xf5, 0x55, 0xf7, 0x55 };
++VECT_VAR_DECL(expected2,uint,16,4) [] = { 0xfff1, 0x66, 0xfff3, 0x66 };
++VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xfffffff1, 0x77 };
++VECT_VAR_DECL(expected2,uint,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected2,poly,8,8) [] = { 0xf1, 0x55, 0xf3, 0x55,
++ 0xf5, 0x55, 0xf7, 0x55 };
++VECT_VAR_DECL(expected2,poly,16,4) [] = { 0xfff1, 0x66, 0xfff3, 0x66 };
++VECT_VAR_DECL(expected2,hfloat,32,2) [] = { 0xc1700000, 0x42066666 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 4) [] = { 0xcb80, 0x4b4d,
++ 0xca80, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected2,int,8,16) [] = { 0xf1, 0x11, 0xf3, 0x11,
++ 0xf5, 0x11, 0xf7, 0x11,
++ 0xf9, 0x11, 0xfb, 0x11,
++ 0xfd, 0x11, 0xff, 0x11 };
++VECT_VAR_DECL(expected2,int,16,8) [] = { 0xfff1, 0x22, 0xfff3, 0x22,
++ 0xfff5, 0x22, 0xfff7, 0x22 };
++VECT_VAR_DECL(expected2,int,32,4) [] = { 0xfffffff1, 0x33,
++ 0xfffffff3, 0x33 };
++VECT_VAR_DECL(expected2,int,64,2) [] = { 0xfffffffffffffff1,
++ 0x44 };
++VECT_VAR_DECL(expected2,uint,8,16) [] = { 0xf1, 0x55, 0xf3, 0x55,
++ 0xf5, 0x55, 0xf7, 0x55,
++ 0xf9, 0x55, 0xfb, 0x55,
++ 0xfd, 0x55, 0xff, 0x55 };
++VECT_VAR_DECL(expected2,uint,16,8) [] = { 0xfff1, 0x66, 0xfff3, 0x66,
++ 0xfff5, 0x66, 0xfff7, 0x66 };
++VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xfffffff1, 0x77,
++ 0xfffffff3, 0x77 };
++VECT_VAR_DECL(expected2,uint,64,2) [] = { 0xfffffffffffffff1,
++ 0x88 };
++VECT_VAR_DECL(expected2,poly,8,16) [] = { 0xf1, 0x55, 0xf3, 0x55,
++ 0xf5, 0x55, 0xf7, 0x55,
++ 0xf9, 0x55, 0xfb, 0x55,
++ 0xfd, 0x55, 0xff, 0x55 };
++VECT_VAR_DECL(expected2,poly,16,8) [] = { 0xfff1, 0x66, 0xfff3, 0x66,
++ 0xfff5, 0x66, 0xfff7, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 8) [] = { 0xcb80, 0x4b4d,
++ 0xca80, 0x4b4d,
++ 0xc980, 0x4b4d,
++ 0xc880, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected2,hfloat,32,4) [] = { 0xc1700000, 0x42073333,
++ 0xc1500000, 0x42073333 };
++ clean_results ();
++ CLEAN(expected2, int, 64, 1);
++ CLEAN(expected2, uint, 64, 1);
++
++ TEST_VTRN2(, int, s, 8, 8);
++ TEST_VTRN2(, int, s, 16, 4);
++ TEST_VTRN2(, int, s, 32, 2);
++ TEST_VTRN2(, uint, u, 8, 8);
++ TEST_VTRN2(, uint, u, 16, 4);
++ TEST_VTRN2(, uint, u, 32, 2);
++ TEST_VTRN2(, poly, p, 8, 8);
++ TEST_VTRN2(, poly, p, 16, 4);
++#if defined (FP16_SUPPORTED)
++ TEST_VTRN2(, float, f, 16, 4);
++#endif
++ TEST_VTRN2(, float, f, 32, 2);
++
++ TEST_VTRN2(q, int, s, 8, 16);
++ TEST_VTRN2(q, int, s, 16, 8);
++ TEST_VTRN2(q, int, s, 32, 4);
++ TEST_VTRN2(q, int, s, 64, 2);
++ TEST_VTRN2(q, uint, u, 8, 16);
++ TEST_VTRN2(q, uint, u, 16, 8);
++ TEST_VTRN2(q, uint, u, 32, 4);
++ TEST_VTRN2(q, uint, u, 64, 2);
++ TEST_VTRN2(q, poly, p, 8, 16);
++ TEST_VTRN2(q, poly, p, 16, 8);
++#if defined (FP16_SUPPORTED)
++ TEST_VTRN2(q, float, f, 16, 8);
++#endif
++ TEST_VTRN2(q, float, f, 32, 4);
++ TEST_VTRN2(q, float, f, 64, 2);
++
++ CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
++#if defined (FP16_SUPPORTED)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected2, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected2, "");
++#endif
++}
++
++int main (void)
++{
++ exec_vtrn_half ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vtst.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vtst.c
+@@ -32,10 +32,21 @@ VECT_VAR_DECL(expected_unsigned,uint,16,8) [] = { 0x0, 0xffff,
+ VECT_VAR_DECL(expected_unsigned,uint,32,4) [] = { 0x0, 0xffffffff,
+ 0x0, 0xffffffff };
+
+-#ifndef INSN_NAME
++/* Expected results with poly input. */
++VECT_VAR_DECL(expected_poly,uint,8,8) [] = { 0x0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(expected_poly,uint,8,16) [] = { 0x0, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff };
++VECT_VAR_DECL(expected_poly,uint,16,4) [] = { 0x0, 0xffff, 0x0, 0xffff };
++VECT_VAR_DECL(expected_poly,uint,16,8) [] = { 0x0, 0xffff,
++ 0x0, 0xffff,
++ 0xffff, 0xffff,
++ 0xffff, 0xffff };
++
+ #define INSN_NAME vtst
+ #define TEST_MSG "VTST/VTSTQ"
+-#endif
+
+ /* We can't use the standard ref_v_binary_op.c template because vtst
+ has no 64 bits variant, and outputs are always of uint type. */
+@@ -73,12 +84,16 @@ FNNAME (INSN_NAME)
+ VDUP(vector2, , uint, u, 8, 8, 15);
+ VDUP(vector2, , uint, u, 16, 4, 5);
+ VDUP(vector2, , uint, u, 32, 2, 1);
++ VDUP(vector2, , poly, p, 8, 8, 15);
++ VDUP(vector2, , poly, p, 16, 4, 5);
+ VDUP(vector2, q, int, s, 8, 16, 15);
+ VDUP(vector2, q, int, s, 16, 8, 5);
+ VDUP(vector2, q, int, s, 32, 4, 1);
+ VDUP(vector2, q, uint, u, 8, 16, 15);
+ VDUP(vector2, q, uint, u, 16, 8, 5);
+ VDUP(vector2, q, uint, u, 32, 4, 1);
++ VDUP(vector2, q, poly, p, 8, 16, 15);
++ VDUP(vector2, q, poly, p, 16, 8, 5);
+
+ #define TEST_MACRO_NO64BIT_VARIANT_1_5(MACRO, VAR, T1, T2) \
+ MACRO(VAR, , T1, T2, 8, 8); \
+@@ -111,6 +126,18 @@ FNNAME (INSN_NAME)
+ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_unsigned, CMT);
+ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_unsigned, CMT);
+ CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected_unsigned, CMT);
++
++ /* Now, test the variants with poly8 and poly16 as input. */
++#undef CMT
++#define CMT " (poly input)"
++ TEST_BINARY_OP(INSN_NAME, , poly, p, 8, 8);
++ TEST_BINARY_OP(INSN_NAME, , poly, p, 16, 4);
++ TEST_BINARY_OP(INSN_NAME, q, poly, p, 8, 16);
++ TEST_BINARY_OP(INSN_NAME, q, poly, p, 16, 8);
++ CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected_poly, CMT);
++ CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected_poly, CMT);
++ CHECK(TEST_MSG, uint, 8, 16, PRIx8, expected_poly, CMT);
++ CHECK(TEST_MSG, uint, 16, 8, PRIx16, expected_poly, CMT);
+ }
+
+ int main (void)
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vuzp.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vuzp.c
+@@ -19,6 +19,10 @@ VECT_VAR_DECL(expected0,poly,8,8) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+ 0xf4, 0xf5, 0xf6, 0xf7 };
+ VECT_VAR_DECL(expected0,poly,16,4) [] = { 0xfff0, 0xfff1,
+ 0xfff2, 0xfff3 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected0, hfloat, 16, 4) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80 };
++#endif
+ VECT_VAR_DECL(expected0,hfloat,32,2) [] = { 0xc1800000, 0xc1700000 };
+ VECT_VAR_DECL(expected0,int,8,16) [] = { 0xf0, 0xf1, 0xf2, 0xf3,
+ 0xf4, 0xf5, 0xf6, 0xf7,
+@@ -48,6 +52,12 @@ VECT_VAR_DECL(expected0,poly,16,8) [] = { 0xfff0, 0xfff1,
+ 0xfff2, 0xfff3,
+ 0xfff4, 0xfff5,
+ 0xfff6, 0xfff7 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected0, hfloat, 16, 8) [] = { 0xcc00, 0xcb80,
++ 0xcb00, 0xca80,
++ 0xca00, 0xc980,
++ 0xc900, 0xc880 };
++#endif
+ VECT_VAR_DECL(expected0,hfloat,32,4) [] = { 0xc1800000, 0xc1700000,
+ 0xc1600000, 0xc1500000 };
+
+@@ -63,6 +73,10 @@ VECT_VAR_DECL(expected1,uint,32,2) [] = { 0x77, 0x77 };
+ VECT_VAR_DECL(expected1,poly,8,8) [] = { 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55 };
+ VECT_VAR_DECL(expected1,poly,16,4) [] = { 0x66, 0x66, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected1, hfloat, 16, 4) [] = { 0x4b4d, 0x4b4d,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected1,hfloat,32,2) [] = { 0x42066666, 0x42066666 };
+ VECT_VAR_DECL(expected1,int,8,16) [] = { 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11,
+@@ -84,6 +98,12 @@ VECT_VAR_DECL(expected1,poly,8,16) [] = { 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55 };
+ VECT_VAR_DECL(expected1,poly,16,8) [] = { 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected1, hfloat, 16, 8) [] = { 0x4b4d, 0x4b4d,
++ 0x4b4d, 0x4b4d,
++ 0x4b4d, 0x4b4d,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected1,hfloat,32,4) [] = { 0x42073333, 0x42073333,
+ 0x42073333, 0x42073333 };
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vuzp_half.c
+@@ -0,0 +1,259 @@
++/* { dg-do run } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results. */
++VECT_VAR_DECL(expected,int,8,8) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
++ 0x11, 0x11, 0x11, 0x11 };
++VECT_VAR_DECL(expected,int,16,4) [] = { 0xfff0, 0xfff2, 0x22, 0x22 };
++VECT_VAR_DECL(expected,int,32,2) [] = { 0xfffffff0, 0x33 };
++VECT_VAR_DECL(expected,int,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
++ 0x55, 0x55, 0x55, 0x55 };
++VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff0, 0xfff2, 0x66, 0x66 };
++VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff0, 0x77 };
++VECT_VAR_DECL(expected,uint,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected,poly,8,8) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
++ 0x55, 0x55, 0x55, 0x55 };
++VECT_VAR_DECL(expected,poly,16,4) [] = { 0xfff0, 0xfff2, 0x66, 0x66 };
++VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1800000, 0x42066666 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0xcb00,
++ 0x4b4d, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected,int,8,16) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
++ 0xf8, 0xfa, 0xfc, 0xfe,
++ 0x11, 0x11, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11 };
++VECT_VAR_DECL(expected,int,16,8) [] = { 0xfff0, 0xfff2, 0xfff4, 0xfff6,
++ 0x22, 0x22, 0x22, 0x22 };
++VECT_VAR_DECL(expected,int,32,4) [] = { 0xfffffff0, 0xfffffff2,
++ 0x33, 0x33 };
++VECT_VAR_DECL(expected,int,64,2) [] = { 0xfffffffffffffff0,
++ 0x44 };
++VECT_VAR_DECL(expected,uint,8,16) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
++ 0xf8, 0xfa, 0xfc, 0xfe,
++ 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x55, 0x55 };
++VECT_VAR_DECL(expected,uint,16,8) [] = { 0xfff0, 0xfff2, 0xfff4, 0xfff6,
++ 0x66, 0x66, 0x66, 0x66 };
++VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffffff0, 0xfffffff2, 0x77, 0x77 };
++VECT_VAR_DECL(expected,uint,64,2) [] = { 0xfffffffffffffff0,
++ 0x88 };
++VECT_VAR_DECL(expected,poly,8,16) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
++ 0xf8, 0xfa, 0xfc, 0xfe,
++ 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x55, 0x55 };
++VECT_VAR_DECL(expected,poly,16,8) [] = { 0xfff0, 0xfff2, 0xfff4, 0xfff6,
++ 0x66, 0x66, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb00, 0xca00, 0xc900,
++ 0x4b4d, 0x4b4d, 0x4b4d, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1800000, 0xc1600000,
++ 0x42073333, 0x42073333 };
++
++#define TEST_MSG "VUZP1"
++void exec_vuzp_half (void)
++{
++#define TEST_VUZP(PART, Q, T1, T2, W, N) \
++ VECT_VAR(vector_res, T1, W, N) = \
++ vuzp##PART##Q##_##T2##W(VECT_VAR(vector, T1, W, N), \
++ VECT_VAR(vector2, T1, W, N)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
++
++#define TEST_VUZP1(Q, T1, T2, W, N) TEST_VUZP(1, Q, T1, T2, W, N)
++
++ /* Input vector can only have 64 bits. */
++ DECL_VARIABLE_ALL_VARIANTS(vector);
++ DECL_VARIABLE_ALL_VARIANTS(vector2);
++ DECL_VARIABLE(vector, float, 64, 2);
++ DECL_VARIABLE(vector2, float, 64, 2);
++
++ DECL_VARIABLE_ALL_VARIANTS(vector_res);
++ DECL_VARIABLE(vector_res, float, 64, 2);
++
++ clean_results ();
++ /* We don't have vuzp1_T64x1, so set expected to the clean value. */
++ CLEAN(expected, int, 64, 1);
++ CLEAN(expected, uint, 64, 1);
++
++ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (FP16_SUPPORTED)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
++ VLOAD(vector, buffer, , float, f, 32, 2);
++ VLOAD(vector, buffer, q, float, f, 32, 4);
++ VLOAD(vector, buffer, q, float, f, 64, 2);
++
++ /* Choose arbitrary initialization values. */
++ VDUP(vector2, , int, s, 8, 8, 0x11);
++ VDUP(vector2, , int, s, 16, 4, 0x22);
++ VDUP(vector2, , int, s, 32, 2, 0x33);
++ VDUP(vector2, , uint, u, 8, 8, 0x55);
++ VDUP(vector2, , uint, u, 16, 4, 0x66);
++ VDUP(vector2, , uint, u, 32, 2, 0x77);
++ VDUP(vector2, , poly, p, 8, 8, 0x55);
++ VDUP(vector2, , poly, p, 16, 4, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, , float, f, 16, 4, 14.6f); /* 14.6f is 0x4b4d. */
++#endif
++ VDUP(vector2, , float, f, 32, 2, 33.6f);
++
++ VDUP(vector2, q, int, s, 8, 16, 0x11);
++ VDUP(vector2, q, int, s, 16, 8, 0x22);
++ VDUP(vector2, q, int, s, 32, 4, 0x33);
++ VDUP(vector2, q, int, s, 64, 2, 0x44);
++ VDUP(vector2, q, uint, u, 8, 16, 0x55);
++ VDUP(vector2, q, uint, u, 16, 8, 0x66);
++ VDUP(vector2, q, uint, u, 32, 4, 0x77);
++ VDUP(vector2, q, uint, u, 64, 2, 0x88);
++ VDUP(vector2, q, poly, p, 8, 16, 0x55);
++ VDUP(vector2, q, poly, p, 16, 8, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, q, float, f, 16, 8, 14.6f);
++#endif
++ VDUP(vector2, q, float, f, 32, 4, 33.8f);
++ VDUP(vector2, q, float, f, 64, 2, 33.8f);
++
++ TEST_VUZP1(, int, s, 8, 8);
++ TEST_VUZP1(, int, s, 16, 4);
++ TEST_VUZP1(, int, s, 32, 2);
++ TEST_VUZP1(, uint, u, 8, 8);
++ TEST_VUZP1(, uint, u, 16, 4);
++ TEST_VUZP1(, uint, u, 32, 2);
++ TEST_VUZP1(, poly, p, 8, 8);
++ TEST_VUZP1(, poly, p, 16, 4);
++#if defined (FP16_SUPPORTED)
++ TEST_VUZP1(, float, f, 16, 4);
++#endif
++ TEST_VUZP1(, float, f, 32, 2);
++
++ TEST_VUZP1(q, int, s, 8, 16);
++ TEST_VUZP1(q, int, s, 16, 8);
++ TEST_VUZP1(q, int, s, 32, 4);
++ TEST_VUZP1(q, int, s, 64, 2);
++ TEST_VUZP1(q, uint, u, 8, 16);
++ TEST_VUZP1(q, uint, u, 16, 8);
++ TEST_VUZP1(q, uint, u, 32, 4);
++ TEST_VUZP1(q, uint, u, 64, 2);
++ TEST_VUZP1(q, poly, p, 8, 16);
++ TEST_VUZP1(q, poly, p, 16, 8);
++#if defined (FP16_SUPPORTED)
++ TEST_VUZP1(q, float, f, 16, 8);
++#endif
++ TEST_VUZP1(q, float, f, 32, 4);
++ TEST_VUZP1(q, float, f, 64, 2);
++
++#if defined (FP16_SUPPORTED)
++ CHECK_RESULTS (TEST_MSG, "");
++#else
++ CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
++#endif
++
++#undef TEST_MSG
++#define TEST_MSG "VUZP2"
++
++#define TEST_VUZP2(Q, T1, T2, W, N) TEST_VUZP(2, Q, T1, T2, W, N)
++
++/* Expected results. */
++VECT_VAR_DECL(expected2,int,8,8) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
++ 0x11, 0x11, 0x11, 0x11 };
++VECT_VAR_DECL(expected2,int,16,4) [] = { 0xfff1, 0xfff3, 0x22, 0x22 };
++VECT_VAR_DECL(expected2,int,32,2) [] = { 0xfffffff1, 0x33 };
++VECT_VAR_DECL(expected2,int,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected2,uint,8,8) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
++ 0x55, 0x55, 0x55, 0x55 };
++VECT_VAR_DECL(expected2,uint,16,4) [] = { 0xfff1, 0xfff3, 0x66, 0x66 };
++VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xfffffff1, 0x77 };
++VECT_VAR_DECL(expected2,uint,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected2,poly,8,8) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
++ 0x55, 0x55, 0x55, 0x55 };
++VECT_VAR_DECL(expected2,poly,16,4) [] = { 0xfff1, 0xfff3, 0x66, 0x66 };
++VECT_VAR_DECL(expected2,hfloat,32,2) [] = { 0xc1700000, 0x42066666 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 4) [] = { 0xcb80, 0xca80,
++ 0x4b4d, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected2,int,8,16) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
++ 0xf9, 0xfb, 0xfd, 0xff,
++ 0x11, 0x11, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11 };
++VECT_VAR_DECL(expected2,int,16,8) [] = { 0xfff1, 0xfff3, 0xfff5, 0xfff7,
++ 0x22, 0x22, 0x22, 0x22 };
++VECT_VAR_DECL(expected2,int,32,4) [] = { 0xfffffff1, 0xfffffff3,
++ 0x33, 0x33 };
++VECT_VAR_DECL(expected2,int,64,2) [] = { 0xfffffffffffffff1,
++ 0x44 };
++VECT_VAR_DECL(expected2,uint,8,16) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
++ 0xf9, 0xfb, 0xfd, 0xff,
++ 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x55, 0x55 };
++VECT_VAR_DECL(expected2,uint,16,8) [] = { 0xfff1, 0xfff3, 0xfff5, 0xfff7,
++ 0x66, 0x66, 0x66, 0x66 };
++VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xfffffff1, 0xfffffff3, 0x77, 0x77 };
++VECT_VAR_DECL(expected2,uint,64,2) [] = { 0xfffffffffffffff1,
++ 0x88 };
++VECT_VAR_DECL(expected2,poly,8,16) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
++ 0xf9, 0xfb, 0xfd, 0xff,
++ 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x55, 0x55 };
++VECT_VAR_DECL(expected2,poly,16,8) [] = { 0xfff1, 0xfff3, 0xfff5, 0xfff7,
++ 0x66, 0x66, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 8) [] = { 0xcb80, 0xca80, 0xc980, 0xc880,
++ 0x4b4d, 0x4b4d, 0x4b4d, 0x4b4d
++ };
++#endif
++VECT_VAR_DECL(expected2,hfloat,32,4) [] = { 0xc1700000, 0xc1500000,
++ 0x42073333, 0x42073333 };
++
++ clean_results ();
++ CLEAN(expected2, int, 64, 1);
++ CLEAN(expected2, uint, 64, 1);
++
++ TEST_VUZP2(, int, s, 8, 8);
++ TEST_VUZP2(, int, s, 16, 4);
++ TEST_VUZP2(, int, s, 32, 2);
++ TEST_VUZP2(, uint, u, 8, 8);
++ TEST_VUZP2(, uint, u, 16, 4);
++ TEST_VUZP2(, uint, u, 32, 2);
++ TEST_VUZP2(, poly, p, 8, 8);
++ TEST_VUZP2(, poly, p, 16, 4);
++#if defined (FP16_SUPPORTED)
++ TEST_VUZP2(, float, f, 16, 4);
++#endif
++ TEST_VUZP2(, float, f, 32, 2);
++
++ TEST_VUZP2(q, int, s, 8, 16);
++ TEST_VUZP2(q, int, s, 16, 8);
++ TEST_VUZP2(q, int, s, 32, 4);
++ TEST_VUZP2(q, int, s, 64, 2);
++ TEST_VUZP2(q, uint, u, 8, 16);
++ TEST_VUZP2(q, uint, u, 16, 8);
++ TEST_VUZP2(q, uint, u, 32, 4);
++ TEST_VUZP2(q, uint, u, 64, 2);
++ TEST_VUZP2(q, poly, p, 8, 16);
++ TEST_VUZP2(q, poly, p, 16, 8);
++#if defined (FP16_SUPPORTED)
++ TEST_VUZP2(q, float, f, 16, 8);
++#endif
++ TEST_VUZP2(q, float, f, 32, 4);
++ TEST_VUZP2(q, float, f, 64, 2);
++
++ CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
++#if defined (FP16_SUPPORTED)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected2, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected2, "");
++#endif
++}
++
++int main (void)
++{
++ exec_vuzp_half ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vzip.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vzip.c
+@@ -18,6 +18,10 @@ VECT_VAR_DECL(expected0,poly,8,8) [] = { 0xf0, 0xf4, 0x55, 0x55,
+ 0xf1, 0xf5, 0x55, 0x55 };
+ VECT_VAR_DECL(expected0,poly,16,4) [] = { 0xfff0, 0xfff2,
+ 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected0, hfloat, 16, 4) [] = { 0xcc00, 0xcb00,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected0,hfloat,32,2) [] = { 0xc1800000, 0xc1700000 };
+ VECT_VAR_DECL(expected0,int,8,16) [] = { 0xf0, 0xf8, 0x11, 0x11,
+ 0xf1, 0xf9, 0x11, 0x11,
+@@ -41,6 +45,12 @@ VECT_VAR_DECL(expected0,poly,8,16) [] = { 0xf0, 0xf8, 0x55, 0x55,
+ 0xf3, 0xfb, 0x55, 0x55 };
+ VECT_VAR_DECL(expected0,poly,16,8) [] = { 0xfff0, 0xfff4, 0x66, 0x66,
+ 0xfff1, 0xfff5, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected0, hfloat, 16, 8) [] = { 0xcc00, 0xca00,
++ 0x4b4d, 0x4b4d,
++ 0xcb80, 0xc980,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected0,hfloat,32,4) [] = { 0xc1800000, 0xc1600000,
+ 0x42073333, 0x42073333 };
+
+@@ -59,6 +69,10 @@ VECT_VAR_DECL(expected1,poly,8,8) [] = { 0xf2, 0xf6, 0x55, 0x55,
+ 0xf3, 0xf7, 0x55, 0x55 };
+ VECT_VAR_DECL(expected1,poly,16,4) [] = { 0xfff1, 0xfff3,
+ 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected1, hfloat, 16, 4) [] = { 0xcb80, 0xca80,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected1,hfloat,32,2) [] = { 0x42066666, 0x42066666 };
+ VECT_VAR_DECL(expected1,int,8,16) [] = { 0xf4, 0xfc, 0x11, 0x11,
+ 0xf5, 0xfd, 0x11, 0x11,
+@@ -82,6 +96,12 @@ VECT_VAR_DECL(expected1,poly,8,16) [] = { 0xf4, 0xfc, 0x55, 0x55,
+ 0xf7, 0xff, 0x55, 0x55 };
+ VECT_VAR_DECL(expected1,poly,16,8) [] = { 0xfff2, 0xfff6, 0x66, 0x66,
+ 0xfff3, 0xfff7, 0x66, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected1, hfloat, 16, 8) [] = { 0xcb00, 0xc900,
++ 0x4b4d, 0x4b4d,
++ 0xca80, 0xc880,
++ 0x4b4d, 0x4b4d };
++#endif
+ VECT_VAR_DECL(expected1,hfloat,32,4) [] = { 0xc1700000, 0xc1500000,
+ 0x42073333, 0x42073333 };
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vzip_half.c
+@@ -0,0 +1,263 @@
++/* { dg-do run } */
++/* { dg-skip-if "" { arm*-*-* } } */
++
++#include <arm_neon.h>
++#include "arm-neon-ref.h"
++#include "compute-ref-data.h"
++
++/* Expected results. */
++VECT_VAR_DECL(expected,int,8,8) [] = { 0xf0, 0x11, 0xf1, 0x11,
++ 0xf2, 0x11, 0xf3, 0x11 };
++VECT_VAR_DECL(expected,int,16,4) [] = { 0xfff0, 0x22, 0xfff1, 0x22 };
++VECT_VAR_DECL(expected,int,32,2) [] = { 0xfffffff0, 0x33 };
++VECT_VAR_DECL(expected,int,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf0, 0x55, 0xf1, 0x55,
++ 0xf2, 0x55, 0xf3, 0x55 };
++VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff0, 0x66, 0xfff1, 0x66 };
++VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff0, 0x77 };
++VECT_VAR_DECL(expected,uint,64,1) [] = { 0xfffffffffffffff0 };
++VECT_VAR_DECL(expected,poly,8,8) [] = { 0xf0, 0x55, 0xf1, 0x55,
++ 0xf2, 0x55, 0xf3, 0x55 };
++VECT_VAR_DECL(expected,poly,16,4) [] = { 0xfff0, 0x66, 0xfff1, 0x66 };
++VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1800000, 0x42066666 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0x4b4d,
++ 0xcb80, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected,int,8,16) [] = { 0xf0, 0x11, 0xf1, 0x11,
++ 0xf2, 0x11, 0xf3, 0x11,
++ 0xf4, 0x11, 0xf5, 0x11,
++ 0xf6, 0x11, 0xf7, 0x11 };
++VECT_VAR_DECL(expected,int,16,8) [] = { 0xfff0, 0x22, 0xfff1, 0x22,
++ 0xfff2, 0x22, 0xfff3, 0x22 };
++VECT_VAR_DECL(expected,int,32,4) [] = { 0xfffffff0, 0x33,
++ 0xfffffff1, 0x33 };
++VECT_VAR_DECL(expected,int,64,2) [] = { 0xfffffffffffffff0,
++ 0x44 };
++VECT_VAR_DECL(expected,uint,8,16) [] = { 0xf0, 0x55, 0xf1, 0x55,
++ 0xf2, 0x55, 0xf3, 0x55,
++ 0xf4, 0x55, 0xf5, 0x55,
++ 0xf6, 0x55, 0xf7, 0x55 };
++VECT_VAR_DECL(expected,uint,16,8) [] = { 0xfff0, 0x66, 0xfff1, 0x66,
++ 0xfff2, 0x66, 0xfff3, 0x66 };
++VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffffff0, 0x77,
++ 0xfffffff1, 0x77 };
++VECT_VAR_DECL(expected,uint,64,2) [] = { 0xfffffffffffffff0,
++ 0x88 };
++VECT_VAR_DECL(expected,poly,8,16) [] = { 0xf0, 0x55, 0xf1, 0x55,
++ 0xf2, 0x55, 0xf3, 0x55,
++ 0xf4, 0x55, 0xf5, 0x55,
++ 0xf6, 0x55, 0xf7, 0x55 };
++VECT_VAR_DECL(expected,poly,16,8) [] = { 0xfff0, 0x66, 0xfff1, 0x66,
++ 0xfff2, 0x66, 0xfff3, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0x4b4d,
++ 0xcb80, 0x4b4d,
++ 0xcb00, 0x4b4d,
++ 0xca80, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1800000, 0x42073333,
++ 0xc1700000, 0x42073333 };
++
++#define TEST_MSG "VZIP1"
++void exec_vzip_half (void)
++{
++#define TEST_VZIP(PART, Q, T1, T2, W, N) \
++ VECT_VAR(vector_res, T1, W, N) = \
++ vzip##PART##Q##_##T2##W(VECT_VAR(vector, T1, W, N), \
++ VECT_VAR(vector2, T1, W, N)); \
++ vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
++
++#define TEST_VZIP1(Q, T1, T2, W, N) TEST_VZIP(1, Q, T1, T2, W, N)
++
++ /* Input vector can only have 64 bits. */
++ DECL_VARIABLE_ALL_VARIANTS(vector);
++ DECL_VARIABLE_ALL_VARIANTS(vector2);
++ DECL_VARIABLE(vector, float, 64, 2);
++ DECL_VARIABLE(vector2, float, 64, 2);
++
++ DECL_VARIABLE_ALL_VARIANTS(vector_res);
++ DECL_VARIABLE(vector_res, float, 64, 2);
++
++ clean_results ();
++ /* We don't have vzip1_T64x1, so set expected to the clean value. */
++ CLEAN(expected, int, 64, 1);
++ CLEAN(expected, uint, 64, 1);
++
++ TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
++#if defined (FP16_SUPPORTED)
++ VLOAD(vector, buffer, , float, f, 16, 4);
++ VLOAD(vector, buffer, q, float, f, 16, 8);
++#endif
++ VLOAD(vector, buffer, , float, f, 32, 2);
++ VLOAD(vector, buffer, q, float, f, 32, 4);
++ VLOAD(vector, buffer, q, float, f, 64, 2);
++
++ /* Choose arbitrary initialization values. */
++ VDUP(vector2, , int, s, 8, 8, 0x11);
++ VDUP(vector2, , int, s, 16, 4, 0x22);
++ VDUP(vector2, , int, s, 32, 2, 0x33);
++ VDUP(vector2, , uint, u, 8, 8, 0x55);
++ VDUP(vector2, , uint, u, 16, 4, 0x66);
++ VDUP(vector2, , uint, u, 32, 2, 0x77);
++ VDUP(vector2, , poly, p, 8, 8, 0x55);
++ VDUP(vector2, , poly, p, 16, 4, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, , float, f, 16, 4, 14.6f); /* 14.6f is 0x4b4d. */
++#endif
++ VDUP(vector2, , float, f, 32, 2, 33.6f);
++
++ VDUP(vector2, q, int, s, 8, 16, 0x11);
++ VDUP(vector2, q, int, s, 16, 8, 0x22);
++ VDUP(vector2, q, int, s, 32, 4, 0x33);
++ VDUP(vector2, q, int, s, 64, 2, 0x44);
++ VDUP(vector2, q, uint, u, 8, 16, 0x55);
++ VDUP(vector2, q, uint, u, 16, 8, 0x66);
++ VDUP(vector2, q, uint, u, 32, 4, 0x77);
++ VDUP(vector2, q, uint, u, 64, 2, 0x88);
++ VDUP(vector2, q, poly, p, 8, 16, 0x55);
++ VDUP(vector2, q, poly, p, 16, 8, 0x66);
++#if defined (FP16_SUPPORTED)
++ VDUP (vector2, q, float, f, 16, 8, 14.6f);
++#endif
++ VDUP(vector2, q, float, f, 32, 4, 33.8f);
++ VDUP(vector2, q, float, f, 64, 2, 33.8f);
++
++ TEST_VZIP1(, int, s, 8, 8);
++ TEST_VZIP1(, int, s, 16, 4);
++ TEST_VZIP1(, int, s, 32, 2);
++ TEST_VZIP1(, uint, u, 8, 8);
++ TEST_VZIP1(, uint, u, 16, 4);
++ TEST_VZIP1(, uint, u, 32, 2);
++ TEST_VZIP1(, poly, p, 8, 8);
++ TEST_VZIP1(, poly, p, 16, 4);
++#if defined (FP16_SUPPORTED)
++ TEST_VZIP1(, float, f, 16, 4);
++#endif
++ TEST_VZIP1(, float, f, 32, 2);
++
++ TEST_VZIP1(q, int, s, 8, 16);
++ TEST_VZIP1(q, int, s, 16, 8);
++ TEST_VZIP1(q, int, s, 32, 4);
++ TEST_VZIP1(q, int, s, 64, 2);
++ TEST_VZIP1(q, uint, u, 8, 16);
++ TEST_VZIP1(q, uint, u, 16, 8);
++ TEST_VZIP1(q, uint, u, 32, 4);
++ TEST_VZIP1(q, uint, u, 64, 2);
++ TEST_VZIP1(q, poly, p, 8, 16);
++ TEST_VZIP1(q, poly, p, 16, 8);
++#if defined (FP16_SUPPORTED)
++ TEST_VZIP1(q, float, f, 16, 8);
++#endif
++ TEST_VZIP1(q, float, f, 32, 4);
++ TEST_VZIP1(q, float, f, 64, 2);
++
++#if defined (FP16_SUPPORTED)
++ CHECK_RESULTS (TEST_MSG, "");
++#else
++ CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
++#endif
++
++#undef TEST_MSG
++#define TEST_MSG "VZIP2"
++
++#define TEST_VZIP2(Q, T1, T2, W, N) TEST_VZIP(2, Q, T1, T2, W, N)
++
++/* Expected results. */
++VECT_VAR_DECL(expected2,int,8,8) [] = { 0xf4, 0x11, 0xf5, 0x11,
++ 0xf6, 0x11, 0xf7, 0x11 };
++VECT_VAR_DECL(expected2,int,16,4) [] = { 0xfff2, 0x22, 0xfff3, 0x22 };
++VECT_VAR_DECL(expected2,int,32,2) [] = { 0xfffffff1, 0x33 };
++VECT_VAR_DECL(expected2,int,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected2,uint,8,8) [] = { 0xf4, 0x55, 0xf5, 0x55,
++ 0xf6, 0x55, 0xf7, 0x55 };
++VECT_VAR_DECL(expected2,uint,16,4) [] = { 0xfff2, 0x66, 0xfff3, 0x66 };
++VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xfffffff1, 0x77 };
++VECT_VAR_DECL(expected2,uint,64,1) [] = { 0xfffffffffffffff1 };
++VECT_VAR_DECL(expected2,poly,8,8) [] = { 0xf4, 0x55, 0xf5, 0x55,
++ 0xf6, 0x55, 0xf7, 0x55 };
++VECT_VAR_DECL(expected2,poly,16,4) [] = { 0xfff2, 0x66, 0xfff3, 0x66 };
++VECT_VAR_DECL(expected2,hfloat,32,2) [] = { 0xc1700000, 0x42066666 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 4) [] = { 0xcb00, 0x4b4d,
++ 0xca80, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected2,int,8,16) [] = { 0xf8, 0x11, 0xf9, 0x11,
++ 0xfa, 0x11, 0xfb, 0x11,
++ 0xfc, 0x11, 0xfd, 0x11,
++ 0xfe, 0x11, 0xff, 0x11 };
++VECT_VAR_DECL(expected2,int,16,8) [] = { 0xfff4, 0x22, 0xfff5, 0x22,
++ 0xfff6, 0x22, 0xfff7, 0x22 };
++VECT_VAR_DECL(expected2,int,32,4) [] = { 0xfffffff2, 0x33,
++ 0xfffffff3, 0x33 };
++VECT_VAR_DECL(expected2,int,64,2) [] = { 0xfffffffffffffff1,
++ 0x44 };
++VECT_VAR_DECL(expected2,uint,8,16) [] = { 0xf8, 0x55, 0xf9, 0x55,
++ 0xfa, 0x55, 0xfb, 0x55,
++ 0xfc, 0x55, 0xfd, 0x55,
++ 0xfe, 0x55, 0xff, 0x55 };
++VECT_VAR_DECL(expected2,uint,16,8) [] = { 0xfff4, 0x66, 0xfff5, 0x66,
++ 0xfff6, 0x66, 0xfff7, 0x66 };
++VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xfffffff2, 0x77,
++ 0xfffffff3, 0x77 };
++VECT_VAR_DECL(expected2,uint,64,2) [] = { 0xfffffffffffffff1,
++ 0x88 };
++VECT_VAR_DECL(expected2,poly,8,16) [] = { 0xf8, 0x55, 0xf9, 0x55,
++ 0xfa, 0x55, 0xfb, 0x55,
++ 0xfc, 0x55, 0xfd, 0x55,
++ 0xfe, 0x55, 0xff, 0x55 };
++VECT_VAR_DECL(expected2,poly,16,8) [] = { 0xfff4, 0x66, 0xfff5, 0x66,
++ 0xfff6, 0x66, 0xfff7, 0x66 };
++#if defined (FP16_SUPPORTED)
++VECT_VAR_DECL (expected2, hfloat, 16, 8) [] = { 0xca00, 0x4b4d,
++ 0xc980, 0x4b4d,
++ 0xc900, 0x4b4d,
++ 0xc880, 0x4b4d };
++#endif
++VECT_VAR_DECL(expected2,hfloat,32,4) [] = { 0xc1600000, 0x42073333,
++ 0xc1500000, 0x42073333 };
++ clean_results ();
++ CLEAN(expected2, int, 64, 1);
++ CLEAN(expected2, uint, 64, 1);
++
++ TEST_VZIP2(, int, s, 8, 8);
++ TEST_VZIP2(, int, s, 16, 4);
++ TEST_VZIP2(, int, s, 32, 2);
++ TEST_VZIP2(, uint, u, 8, 8);
++ TEST_VZIP2(, uint, u, 16, 4);
++ TEST_VZIP2(, uint, u, 32, 2);
++ TEST_VZIP2(, poly, p, 8, 8);
++ TEST_VZIP2(, poly, p, 16, 4);
++#if defined (FP16_SUPPORTED)
++ TEST_VZIP2(, float, f, 16, 4);
++#endif
++ TEST_VZIP2(, float, f, 32, 2);
++
++ TEST_VZIP2(q, int, s, 8, 16);
++ TEST_VZIP2(q, int, s, 16, 8);
++ TEST_VZIP2(q, int, s, 32, 4);
++ TEST_VZIP2(q, int, s, 64, 2);
++ TEST_VZIP2(q, uint, u, 8, 16);
++ TEST_VZIP2(q, uint, u, 16, 8);
++ TEST_VZIP2(q, uint, u, 32, 4);
++ TEST_VZIP2(q, uint, u, 64, 2);
++ TEST_VZIP2(q, poly, p, 8, 16);
++ TEST_VZIP2(q, poly, p, 16, 8);
++#if defined (FP16_SUPPORTED)
++ TEST_VZIP2(q, float, f, 16, 8);
++#endif
++ TEST_VZIP2(q, float, f, 32, 4);
++ TEST_VZIP2(q, float, f, 64, 2);
++
++ CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
++#if defined (FP16_SUPPORTED)
++ CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected2, "");
++ CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected2, "");
++#endif
++}
++
++int main (void)
++{
++ exec_vzip_half ();
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/ands_3.c
+@@ -0,0 +1,12 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++int
++f9 (unsigned char x, int y)
++{
++ if (y > 1 && x == 0)
++ return 10;
++ return x;
++}
++
++/* { dg-final { scan-assembler "ands\t(x|w)\[0-9\]+,\[ \t\]*(x|w)\[0-9\]+,\[ \t\]*255" } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-1.c
+@@ -1,4 +1,5 @@
+ /* { dg-error "unknown" "" {target "aarch64*-*-*" } } */
++/* { dg-skip-if "do not override -mcpu" { *-*-* } { "-mcpu=*" } { "" } } */
+ /* { dg-options "-O2 -mcpu=dummy" } */
+
+ void f ()
+--- a/src/gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-2.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-2.c
+@@ -1,4 +1,5 @@
+ /* { dg-error "missing" "" {target "aarch64*-*-*" } } */
++/* { dg-skip-if "do not override -mcpu" { *-*-* } { "-mcpu=*" } { "" } } */
+ /* { dg-options "-O2 -mcpu=cortex-a53+no" } */
+
+ void f ()
+--- a/src/gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-3.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-3.c
+@@ -1,4 +1,5 @@
+ /* { dg-error "invalid feature" "" {target "aarch64*-*-*" } } */
++/* { dg-skip-if "do not override -mcpu" { *-*-* } { "-mcpu=*" } { "" } } */
+ /* { dg-options "-O2 -mcpu=cortex-a53+dummy" } */
+
+ void f ()
+--- a/src/gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-4.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-4.c
+@@ -1,4 +1,5 @@
+ /* { dg-error "missing" "" {target "aarch64*-*-*" } } */
++/* { dg-skip-if "do not override -mcpu" { *-*-* } { "-mcpu=*" } { "" } } */
+ /* { dg-options "-O2 -mcpu=+dummy" } */
+
+ void f ()
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmaxmin.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmaxmin.c
+@@ -1,5 +1,5 @@
+ /* { dg-do run } */
+-/* { dg-options "-O2 -ftree-vectorize -fno-inline -save-temps" } */
++/* { dg-options "-O2 -ftree-vectorize -fno-inline -fno-vect-cost-model -save-temps" } */
+
+
+ extern void abort (void);
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmla_intrinsic_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmla_intrinsic_1.c
+@@ -110,6 +110,6 @@ main (int argc, char **argv)
+ /* vfmaq_lane_f64.
+ vfma_laneq_f64.
+ vfmaq_laneq_f64. */
+-/* { dg-final { scan-assembler-times "fmla\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, v\[0-9\]+\.2d\\\[\[0-9\]+\\\]" 3 } } */
++/* { dg-final { scan-assembler-times "fmla\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, v\[0-9\]+\.2?d\\\[\[0-9\]+\\\]" 3 } } */
+
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmls_intrinsic_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmls_intrinsic_1.c
+@@ -111,6 +111,6 @@ main (int argc, char **argv)
+ /* vfmsq_lane_f64.
+ vfms_laneq_f64.
+ vfmsq_laneq_f64. */
+-/* { dg-final { scan-assembler-times "fmls\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, v\[0-9\]+\.2d\\\[\[0-9\]+\\\]" 3 } } */
++/* { dg-final { scan-assembler-times "fmls\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, v\[0-9\]+\.2?d\\\[\[0-9\]+\\\]" 3 } } */
+
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmovd-zero-reg.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmovd-zero-reg.c
+@@ -8,4 +8,4 @@ foo (void)
+ bar (0.0);
+ }
+
+-/* { dg-final { scan-assembler "fmov\\td0, xzr" } } */
++/* { dg-final { scan-assembler "movi\\td0, #0" } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmovf-zero-reg.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmovf-zero-reg.c
+@@ -8,4 +8,4 @@ foo (void)
+ bar (0.0);
+ }
+
+-/* { dg-final { scan-assembler "fmov\\ts0, wzr" } } */
++/* { dg-final { scan-assembler "movi\\tv0\.2s, #0" } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmul_fcvt_2.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmul_fcvt_2.c
+@@ -1,5 +1,5 @@
+ /* { dg-do run } */
+-/* { dg-options "-save-temps -O2 -ftree-vectorize -fno-inline" } */
++/* { dg-options "-save-temps -O2 -ftree-vectorize -fno-inline -fno-vect-cost-model" } */
+
+ #define N 1024
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/ifcvt_multiple_sets_subreg_1.c
+@@ -0,0 +1,30 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fdump-rtl-ce1" } */
++
++/* Check that the inner if is transformed into CSELs. */
++
++int
++foo (int *x, int *z, int a)
++{
++ int b = 0;
++ int c = 0;
++ int d = 0;
++ int i;
++
++ for (i = 0; i < a; i++)
++ {
++ if (x[i] < c)
++ {
++ b = z[i];
++ if (c < b)
++ {
++ c = b;
++ d = i;
++ }
++ }
++ }
++
++ return c + d;
++}
++
++/* { dg-final { scan-rtl-dump "if-conversion succeeded through noce_convert_multiple_sets" "ce1" } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/ldp_stp_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/ldp_stp_1.c
+@@ -1,4 +1,4 @@
+-/* { dg-options "-O2" } */
++/* { dg-options "-O2 -mcpu=generic" } */
+
+ int arr[4][4];
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_1.c
+@@ -0,0 +1,20 @@
++/* { dg-options "-O2" } */
++
++/* Check that we can use a REG + IMM addressing mode when moving an unaligned
++ TImode value to and from memory. */
++
++struct foo
++{
++ long long b;
++ __int128 a;
++} __attribute__ ((packed));
++
++void
++bar (struct foo *p, struct foo *q)
++{
++ p->a = q->a;
++}
++
++/* { dg-final { scan-assembler-not "add\tx\[0-9\]+, x\[0-9\]+" } } */
++/* { dg-final { scan-assembler-times "ldp\tx\[0-9\]+, x\[0-9\], .*8" 1 } } */
++/* { dg-final { scan-assembler-times "stp\tx\[0-9\]+, x\[0-9\], .*8" 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/popcnt.c
+@@ -0,0 +1,23 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++int
++foo (int x)
++{
++ return __builtin_popcount (x);
++}
++
++long
++foo1 (long x)
++{
++ return __builtin_popcountl (x);
++}
++
++long long
++foo2 (long long x)
++{
++ return __builtin_popcountll (x);
++}
++
++/* { dg-final { scan-assembler-not "popcount" } } */
++/* { dg-final { scan-assembler-times "cnt\t" 3 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/pr37780_1.c
+@@ -0,0 +1,46 @@
++/* Test that we can remove the conditional move due to CLZ
++ and CTZ being defined at zero. */
++
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++int
++fooctz (int i)
++{
++ return (i == 0) ? 32 : __builtin_ctz (i);
++}
++
++int
++fooctz2 (int i)
++{
++ return (i != 0) ? __builtin_ctz (i) : 32;
++}
++
++unsigned int
++fooctz3 (unsigned int i)
++{
++ return (i > 0) ? __builtin_ctz (i) : 32;
++}
++
++/* { dg-final { scan-assembler-times "rbit\t*" 3 } } */
++
++int
++fooclz (int i)
++{
++ return (i == 0) ? 32 : __builtin_clz (i);
++}
++
++int
++fooclz2 (int i)
++{
++ return (i != 0) ? __builtin_clz (i) : 32;
++}
++
++unsigned int
++fooclz3 (unsigned int i)
++{
++ return (i > 0) ? __builtin_clz (i) : 32;
++}
++
++/* { dg-final { scan-assembler-times "clz\t" 6 } } */
++/* { dg-final { scan-assembler-not "cmp\t.*0" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/pr63874.c
+@@ -0,0 +1,22 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-skip-if "Not applicable for mcmodel=large" { aarch64*-*-* } { "-mcmodel=large" } { "" } } */
++
++extern void __attribute__((weak)) foo_weakref (void);
++void __attribute__((weak, noinline)) bar (void)
++{
++ return;
++}
++void (*f) (void);
++void (*g) (void);
++
++int
++main (void)
++{
++ f = &foo_weakref;
++ g = &bar;
++ return 0;
++}
++
++/* { dg-final { scan-assembler-not "adr*foo_weakref" } } */
++/* { dg-final { scan-assembler-not "\\.(word|xword)\tbar" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/pr71727.c
+@@ -0,0 +1,33 @@
++/* { dg-do compile } */
++/* { dg-options "-mstrict-align -O3" } */
++
++struct test_struct_s
++{
++ long a;
++ long b;
++ long c;
++ long d;
++ unsigned long e;
++};
++
++
++char _a;
++struct test_struct_s xarray[128];
++
++void
++_start (void)
++{
++ struct test_struct_s *new_entry;
++
++ new_entry = &xarray[0];
++ new_entry->a = 1;
++ new_entry->b = 2;
++ new_entry->c = 3;
++ new_entry->d = 4;
++ new_entry->e = 5;
++
++ return;
++}
++
++/* { dg-final { scan-assembler-times "mov\tx" 5 {target lp64} } } */
++/* { dg-final { scan-assembler-not "add\tx0, x0, :" {target lp64} } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/pr78382.c
+@@ -0,0 +1,10 @@
++/* { dg-require-effective-target fpic } */
++/* { dg-options "-mtls-dialect=trad -fpic" } */
++
++__thread int abc;
++void
++foo ()
++{
++ int *p;
++ p = &abc;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/simd/vminmaxnm_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/simd/vminmaxnm_1.c
+@@ -1,4 +1,4 @@
+-/* Test the `v[min|max]nm{q}_f*' AArch64 SIMD intrinsic. */
++/* Test the `v[min|max]{nm}{q}_f*' AArch64 SIMD intrinsic. */
+
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+@@ -18,6 +18,7 @@ extern void abort ();
+ int
+ main (int argc, char **argv)
+ {
++ /* v{min|max}nm_f32 normal. */
+ float32x2_t f32x2_input1 = vdup_n_f32 (-1.0);
+ float32x2_t f32x2_input2 = vdup_n_f32 (0.0);
+ float32x2_t f32x2_exp_minnm = vdup_n_f32 (-1.0);
+@@ -28,6 +29,7 @@ main (int argc, char **argv)
+ CHECK (uint32_t, 2, f32x2_ret_minnm, f32x2_exp_minnm);
+ CHECK (uint32_t, 2, f32x2_ret_maxnm, f32x2_exp_maxnm);
+
++ /* v{min|max}nm_f32 NaN. */
+ f32x2_input1 = vdup_n_f32 (__builtin_nanf (""));
+ f32x2_input2 = vdup_n_f32 (1.0);
+ f32x2_exp_minnm = vdup_n_f32 (1.0);
+@@ -38,6 +40,7 @@ main (int argc, char **argv)
+ CHECK (uint32_t, 2, f32x2_ret_minnm, f32x2_exp_minnm);
+ CHECK (uint32_t, 2, f32x2_ret_maxnm, f32x2_exp_maxnm);
+
++ /* v{min|max}nmq_f32 normal. */
+ float32x4_t f32x4_input1 = vdupq_n_f32 (-1024.0);
+ float32x4_t f32x4_input2 = vdupq_n_f32 (77.0);
+ float32x4_t f32x4_exp_minnm = vdupq_n_f32 (-1024.0);
+@@ -48,6 +51,7 @@ main (int argc, char **argv)
+ CHECK (uint32_t, 4, f32x4_ret_minnm, f32x4_exp_minnm);
+ CHECK (uint32_t, 4, f32x4_ret_maxnm, f32x4_exp_maxnm);
+
++ /* v{min|max}nmq_f32 NaN. */
+ f32x4_input1 = vdupq_n_f32 (-__builtin_nanf (""));
+ f32x4_input2 = vdupq_n_f32 (-1.0);
+ f32x4_exp_minnm = vdupq_n_f32 (-1.0);
+@@ -58,16 +62,57 @@ main (int argc, char **argv)
+ CHECK (uint32_t, 4, f32x4_ret_minnm, f32x4_exp_minnm);
+ CHECK (uint32_t, 4, f32x4_ret_maxnm, f32x4_exp_maxnm);
+
++ /* v{min|max}nm_f64 normal. */
++ float64x1_t f64x1_input1 = vdup_n_f64 (1.23);
++ float64x1_t f64x1_input2 = vdup_n_f64 (4.56);
++ float64x1_t f64x1_exp_minnm = vdup_n_f64 (1.23);
++ float64x1_t f64x1_exp_maxnm = vdup_n_f64 (4.56);
++ float64x1_t f64x1_ret_minnm = vminnm_f64 (f64x1_input1, f64x1_input2);
++ float64x1_t f64x1_ret_maxnm = vmaxnm_f64 (f64x1_input1, f64x1_input2);
++ CHECK (uint64_t, 1, f64x1_ret_minnm, f64x1_exp_minnm);
++ CHECK (uint64_t, 1, f64x1_ret_maxnm, f64x1_exp_maxnm);
++
++ /* v{min|max}_f64 normal. */
++ float64x1_t f64x1_exp_min = vdup_n_f64 (1.23);
++ float64x1_t f64x1_exp_max = vdup_n_f64 (4.56);
++ float64x1_t f64x1_ret_min = vmin_f64 (f64x1_input1, f64x1_input2);
++ float64x1_t f64x1_ret_max = vmax_f64 (f64x1_input1, f64x1_input2);
++ CHECK (uint64_t, 1, f64x1_ret_min, f64x1_exp_min);
++ CHECK (uint64_t, 1, f64x1_ret_max, f64x1_exp_max);
++
++ /* v{min|max}nmq_f64 normal. */
+ float64x2_t f64x2_input1 = vdupq_n_f64 (1.23);
+ float64x2_t f64x2_input2 = vdupq_n_f64 (4.56);
+ float64x2_t f64x2_exp_minnm = vdupq_n_f64 (1.23);
+ float64x2_t f64x2_exp_maxnm = vdupq_n_f64 (4.56);
+ float64x2_t f64x2_ret_minnm = vminnmq_f64 (f64x2_input1, f64x2_input2);
+ float64x2_t f64x2_ret_maxnm = vmaxnmq_f64 (f64x2_input1, f64x2_input2);
+-
+ CHECK (uint64_t, 2, f64x2_ret_minnm, f64x2_exp_minnm);
+ CHECK (uint64_t, 2, f64x2_ret_maxnm, f64x2_exp_maxnm);
+
++ /* v{min|max}nm_f64 NaN. */
++ f64x1_input1 = vdup_n_f64 (-__builtin_nanf (""));
++ f64x1_input2 = vdup_n_f64 (1.0);
++ f64x1_exp_minnm = vdup_n_f64 (1.0);
++ f64x1_exp_maxnm = vdup_n_f64 (1.0);
++ f64x1_ret_minnm = vminnm_f64 (f64x1_input1, f64x1_input2);
++ f64x1_ret_maxnm = vmaxnm_f64 (f64x1_input1, f64x1_input2);
++
++ CHECK (uint64_t, 1, f64x1_ret_minnm, f64x1_exp_minnm);
++ CHECK (uint64_t, 1, f64x1_ret_maxnm, f64x1_exp_maxnm);
++
++ /* v{min|max}_f64 NaN. */
++ f64x1_input1 = vdup_n_f64 (-__builtin_nanf (""));
++ f64x1_input2 = vdup_n_f64 (1.0);
++ f64x1_exp_minnm = vdup_n_f64 (-__builtin_nanf (""));
++ f64x1_exp_maxnm = vdup_n_f64 (-__builtin_nanf (""));
++ f64x1_ret_minnm = vmin_f64 (f64x1_input1, f64x1_input2);
++ f64x1_ret_maxnm = vmax_f64 (f64x1_input1, f64x1_input2);
++
++ CHECK (uint64_t, 1, f64x1_ret_minnm, f64x1_exp_minnm);
++ CHECK (uint64_t, 1, f64x1_ret_maxnm, f64x1_exp_maxnm);
++
++ /* v{min|max}nmq_f64 NaN. */
+ f64x2_input1 = vdupq_n_f64 (-__builtin_nan (""));
+ f64x2_input2 = vdupq_n_f64 (1.0);
+ f64x2_exp_minnm = vdupq_n_f64 (1.0);
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/simd/vmul_elem_1.c
+@@ -0,0 +1,541 @@
++/* Test the vmul_n_f64 AArch64 SIMD intrinsic. */
++
++/* { dg-do run } */
++/* { dg-options "-O2 --save-temps" } */
++
++#include "arm_neon.h"
++
++extern void abort (void);
++
++#define A (132.4f)
++#define B (-0.0f)
++#define C (-34.8f)
++#define D (289.34f)
++float32_t expected2_1[2] = {A * A, B * A};
++float32_t expected2_2[2] = {A * B, B * B};
++float32_t expected4_1[4] = {A * A, B * A, C * A, D * A};
++float32_t expected4_2[4] = {A * B, B * B, C * B, D * B};
++float32_t expected4_3[4] = {A * C, B * C, C * C, D * C};
++float32_t expected4_4[4] = {A * D, B * D, C * D, D * D};
++float32_t _elemA = A;
++float32_t _elemB = B;
++float32_t _elemC = C;
++float32_t _elemD = D;
++
++#define AD (1234.5)
++#define BD (-0.0)
++#define CD (71.3)
++#define DD (-1024.4)
++float64_t expectedd2_1[2] = {AD * CD, BD * CD};
++float64_t expectedd2_2[2] = {AD * DD, BD * DD};
++float64_t _elemdC = CD;
++float64_t _elemdD = DD;
++
++
++#define AS (1024)
++#define BS (-31)
++#define CS (0)
++#define DS (655)
++int32_t expecteds2_1[2] = {AS * AS, BS * AS};
++int32_t expecteds2_2[2] = {AS * BS, BS * BS};
++int32_t expecteds4_1[4] = {AS * AS, BS * AS, CS * AS, DS * AS};
++int32_t expecteds4_2[4] = {AS * BS, BS * BS, CS * BS, DS * BS};
++int32_t expecteds4_3[4] = {AS * CS, BS * CS, CS * CS, DS * CS};
++int32_t expecteds4_4[4] = {AS * DS, BS * DS, CS * DS, DS * DS};
++int32_t _elemsA = AS;
++int32_t _elemsB = BS;
++int32_t _elemsC = CS;
++int32_t _elemsD = DS;
++
++#define AH ((int16_t) 0)
++#define BH ((int16_t) -32)
++#define CH ((int16_t) 102)
++#define DH ((int16_t) -51)
++#define EH ((int16_t) 71)
++#define FH ((int16_t) -91)
++#define GH ((int16_t) 48)
++#define HH ((int16_t) 255)
++int16_t expectedh4_1[4] = {AH * AH, BH * AH, CH * AH, DH * AH};
++int16_t expectedh4_2[4] = {AH * BH, BH * BH, CH * BH, DH * BH};
++int16_t expectedh4_3[4] = {AH * CH, BH * CH, CH * CH, DH * CH};
++int16_t expectedh4_4[4] = {AH * DH, BH * DH, CH * DH, DH * DH};
++int16_t expectedh8_1[8] = {AH * AH, BH * AH, CH * AH, DH * AH,
++ EH * AH, FH * AH, GH * AH, HH * AH};
++int16_t expectedh8_2[8] = {AH * BH, BH * BH, CH * BH, DH * BH,
++ EH * BH, FH * BH, GH * BH, HH * BH};
++int16_t expectedh8_3[8] = {AH * CH, BH * CH, CH * CH, DH * CH,
++ EH * CH, FH * CH, GH * CH, HH * CH};
++int16_t expectedh8_4[8] = {AH * DH, BH * DH, CH * DH, DH * DH,
++ EH * DH, FH * DH, GH * DH, HH * DH};
++int16_t expectedh8_5[8] = {AH * EH, BH * EH, CH * EH, DH * EH,
++ EH * EH, FH * EH, GH * EH, HH * EH};
++int16_t expectedh8_6[8] = {AH * FH, BH * FH, CH * FH, DH * FH,
++ EH * FH, FH * FH, GH * FH, HH * FH};
++int16_t expectedh8_7[8] = {AH * GH, BH * GH, CH * GH, DH * GH,
++ EH * GH, FH * GH, GH * GH, HH * GH};
++int16_t expectedh8_8[8] = {AH * HH, BH * HH, CH * HH, DH * HH,
++ EH * HH, FH * HH, GH * HH, HH * HH};
++int16_t _elemhA = AH;
++int16_t _elemhB = BH;
++int16_t _elemhC = CH;
++int16_t _elemhD = DH;
++int16_t _elemhE = EH;
++int16_t _elemhF = FH;
++int16_t _elemhG = GH;
++int16_t _elemhH = HH;
++
++#define AUS (1024)
++#define BUS (31)
++#define CUS (0)
++#define DUS (655)
++uint32_t expectedus2_1[2] = {AUS * AUS, BUS * AUS};
++uint32_t expectedus2_2[2] = {AUS * BUS, BUS * BUS};
++uint32_t expectedus4_1[4] = {AUS * AUS, BUS * AUS, CUS * AUS, DUS * AUS};
++uint32_t expectedus4_2[4] = {AUS * BUS, BUS * BUS, CUS * BUS, DUS * BUS};
++uint32_t expectedus4_3[4] = {AUS * CUS, BUS * CUS, CUS * CUS, DUS * CUS};
++uint32_t expectedus4_4[4] = {AUS * DUS, BUS * DUS, CUS * DUS, DUS * DUS};
++uint32_t _elemusA = AUS;
++uint32_t _elemusB = BUS;
++uint32_t _elemusC = CUS;
++uint32_t _elemusD = DUS;
++
++#define AUH ((uint16_t) 0)
++#define BUH ((uint16_t) 32)
++#define CUH ((uint16_t) 102)
++#define DUH ((uint16_t) 51)
++#define EUH ((uint16_t) 71)
++#define FUH ((uint16_t) 91)
++#define GUH ((uint16_t) 48)
++#define HUH ((uint16_t) 255)
++uint16_t expecteduh4_1[4] = {AUH * AUH, BUH * AUH, CUH * AUH, DUH * AUH};
++uint16_t expecteduh4_2[4] = {AUH * BUH, BUH * BUH, CUH * BUH, DUH * BUH};
++uint16_t expecteduh4_3[4] = {AUH * CUH, BUH * CUH, CUH * CUH, DUH * CUH};
++uint16_t expecteduh4_4[4] = {AUH * DUH, BUH * DUH, CUH * DUH, DUH * DUH};
++uint16_t expecteduh8_1[8] = {AUH * AUH, BUH * AUH, CUH * AUH, DUH * AUH,
++ EUH * AUH, FUH * AUH, GUH * AUH, HUH * AUH};
++uint16_t expecteduh8_2[8] = {AUH * BUH, BUH * BUH, CUH * BUH, DUH * BUH,
++ EUH * BUH, FUH * BUH, GUH * BUH, HUH * BUH};
++uint16_t expecteduh8_3[8] = {AUH * CUH, BUH * CUH, CUH * CUH, DUH * CUH,
++ EUH * CUH, FUH * CUH, GUH * CUH, HUH * CUH};
++uint16_t expecteduh8_4[8] = {AUH * DUH, BUH * DUH, CUH * DUH, DUH * DUH,
++ EUH * DUH, FUH * DUH, GUH * DUH, HUH * DUH};
++uint16_t expecteduh8_5[8] = {AUH * EUH, BUH * EUH, CUH * EUH, DUH * EUH,
++ EUH * EUH, FUH * EUH, GUH * EUH, HUH * EUH};
++uint16_t expecteduh8_6[8] = {AUH * FUH, BUH * FUH, CUH * FUH, DUH * FUH,
++ EUH * FUH, FUH * FUH, GUH * FUH, HUH * FUH};
++uint16_t expecteduh8_7[8] = {AUH * GUH, BUH * GUH, CUH * GUH, DUH * GUH,
++ EUH * GUH, FUH * GUH, GUH * GUH, HUH * GUH};
++uint16_t expecteduh8_8[8] = {AUH * HUH, BUH * HUH, CUH * HUH, DUH * HUH,
++ EUH * HUH, FUH * HUH, GUH * HUH, HUH * HUH};
++uint16_t _elemuhA = AUH;
++uint16_t _elemuhB = BUH;
++uint16_t _elemuhC = CUH;
++uint16_t _elemuhD = DUH;
++uint16_t _elemuhE = EUH;
++uint16_t _elemuhF = FUH;
++uint16_t _elemuhG = GUH;
++uint16_t _elemuhH = HUH;
++
++void
++check_v2sf (float32_t elemA, float32_t elemB)
++{
++ int32_t indx;
++ const float32_t vec32x2_buf[2] = {A, B};
++ float32x2_t vec32x2_src = vld1_f32 (vec32x2_buf);
++ float32_t vec32x2_res[2];
++
++ vst1_f32 (vec32x2_res, vmul_n_f32 (vec32x2_src, elemA));
++
++ for (indx = 0; indx < 2; indx++)
++ if (* (uint32_t *) &vec32x2_res[indx] != * (uint32_t *) &expected2_1[indx])
++ abort ();
++
++ vst1_f32 (vec32x2_res, vmul_n_f32 (vec32x2_src, elemB));
++
++ for (indx = 0; indx < 2; indx++)
++ if (* (uint32_t *) &vec32x2_res[indx] != * (uint32_t *) &expected2_2[indx])
++ abort ();
++
++/* { dg-final { scan-assembler-times "fmul\tv\[0-9\]+\.2s, v\[0-9\]+\.2s, v\[0-9\]+\.s\\\[0\\\]" 2 } } */
++}
++
++void
++check_v4sf (float32_t elemA, float32_t elemB, float32_t elemC, float32_t elemD)
++{
++ int32_t indx;
++ const float32_t vec32x4_buf[4] = {A, B, C, D};
++ float32x4_t vec32x4_src = vld1q_f32 (vec32x4_buf);
++ float32_t vec32x4_res[4];
++
++ vst1q_f32 (vec32x4_res, vmulq_n_f32 (vec32x4_src, elemA));
++
++ for (indx = 0; indx < 4; indx++)
++ if (* (uint32_t *) &vec32x4_res[indx] != * (uint32_t *) &expected4_1[indx])
++ abort ();
++
++ vst1q_f32 (vec32x4_res, vmulq_n_f32 (vec32x4_src, elemB));
++
++ for (indx = 0; indx < 4; indx++)
++ if (* (uint32_t *) &vec32x4_res[indx] != * (uint32_t *) &expected4_2[indx])
++ abort ();
++
++ vst1q_f32 (vec32x4_res, vmulq_n_f32 (vec32x4_src, elemC));
++
++ for (indx = 0; indx < 4; indx++)
++ if (* (uint32_t *) &vec32x4_res[indx] != * (uint32_t *) &expected4_3[indx])
++ abort ();
++
++ vst1q_f32 (vec32x4_res, vmulq_n_f32 (vec32x4_src, elemD));
++
++ for (indx = 0; indx < 4; indx++)
++ if (* (uint32_t *) &vec32x4_res[indx] != * (uint32_t *) &expected4_4[indx])
++ abort ();
++
++/* { dg-final { scan-assembler-times "fmul\tv\[0-9\]+\.4s, v\[0-9\]+\.4s, v\[0-9\]+\.s\\\[0\\\]" 4 } } */
++}
++
++void
++check_v2df (float64_t elemdC, float64_t elemdD)
++{
++ int32_t indx;
++ const float64_t vec64x2_buf[2] = {AD, BD};
++ float64x2_t vec64x2_src = vld1q_f64 (vec64x2_buf);
++ float64_t vec64x2_res[2];
++
++ vst1q_f64 (vec64x2_res, vmulq_n_f64 (vec64x2_src, elemdC));
++
++ for (indx = 0; indx < 2; indx++)
++ if (* (uint64_t *) &vec64x2_res[indx] != * (uint64_t *) &expectedd2_1[indx])
++ abort ();
++
++ vst1q_f64 (vec64x2_res, vmulq_n_f64 (vec64x2_src, elemdD));
++
++ for (indx = 0; indx < 2; indx++)
++ if (* (uint64_t *) &vec64x2_res[indx] != * (uint64_t *) &expectedd2_2[indx])
++ abort ();
++
++/* { dg-final { scan-assembler-times "fmul\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, v\[0-9\]+\.d\\\[0\\\]" 2 } } */
++}
++
++void
++check_v2si (int32_t elemsA, int32_t elemsB)
++{
++ int32_t indx;
++ const int32_t vecs32x2_buf[2] = {AS, BS};
++ int32x2_t vecs32x2_src = vld1_s32 (vecs32x2_buf);
++ int32_t vecs32x2_res[2];
++
++ vst1_s32 (vecs32x2_res, vmul_n_s32 (vecs32x2_src, elemsA));
++
++ for (indx = 0; indx < 2; indx++)
++ if (vecs32x2_res[indx] != expecteds2_1[indx])
++ abort ();
++
++ vst1_s32 (vecs32x2_res, vmul_n_s32 (vecs32x2_src, elemsB));
++
++ for (indx = 0; indx < 2; indx++)
++ if (vecs32x2_res[indx] != expecteds2_2[indx])
++ abort ();
++}
++
++void
++check_v2si_unsigned (uint32_t elemusA, uint32_t elemusB)
++{
++ int indx;
++ const uint32_t vecus32x2_buf[2] = {AUS, BUS};
++ uint32x2_t vecus32x2_src = vld1_u32 (vecus32x2_buf);
++ uint32_t vecus32x2_res[2];
++
++ vst1_u32 (vecus32x2_res, vmul_n_u32 (vecus32x2_src, elemusA));
++
++ for (indx = 0; indx < 2; indx++)
++ if (vecus32x2_res[indx] != expectedus2_1[indx])
++ abort ();
++
++ vst1_u32 (vecus32x2_res, vmul_n_u32 (vecus32x2_src, elemusB));
++
++ for (indx = 0; indx < 2; indx++)
++ if (vecus32x2_res[indx] != expectedus2_2[indx])
++ abort ();
++
++/* { dg-final { scan-assembler-times "\tmul\tv\[0-9\]+\.2s, v\[0-9\]+\.2s, v\[0-9\]+\.s\\\[0\\\]" 4 } } */
++}
++
++void
++check_v4si (int32_t elemsA, int32_t elemsB, int32_t elemsC, int32_t elemsD)
++{
++ int32_t indx;
++ const int32_t vecs32x4_buf[4] = {AS, BS, CS, DS};
++ int32x4_t vecs32x4_src = vld1q_s32 (vecs32x4_buf);
++ int32_t vecs32x4_res[4];
++
++ vst1q_s32 (vecs32x4_res, vmulq_n_s32 (vecs32x4_src, elemsA));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecs32x4_res[indx] != expecteds4_1[indx])
++ abort ();
++
++ vst1q_s32 (vecs32x4_res, vmulq_n_s32 (vecs32x4_src, elemsB));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecs32x4_res[indx] != expecteds4_2[indx])
++ abort ();
++
++ vst1q_s32 (vecs32x4_res, vmulq_n_s32 (vecs32x4_src, elemsC));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecs32x4_res[indx] != expecteds4_3[indx])
++ abort ();
++
++ vst1q_s32 (vecs32x4_res, vmulq_n_s32 (vecs32x4_src, elemsD));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecs32x4_res[indx] != expecteds4_4[indx])
++ abort ();
++}
++
++void
++check_v4si_unsigned (uint32_t elemusA, uint32_t elemusB, uint32_t elemusC,
++ uint32_t elemusD)
++{
++ int indx;
++ const uint32_t vecus32x4_buf[4] = {AUS, BUS, CUS, DUS};
++ uint32x4_t vecus32x4_src = vld1q_u32 (vecus32x4_buf);
++ uint32_t vecus32x4_res[4];
++
++ vst1q_u32 (vecus32x4_res, vmulq_n_u32 (vecus32x4_src, elemusA));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecus32x4_res[indx] != expectedus4_1[indx])
++ abort ();
++
++ vst1q_u32 (vecus32x4_res, vmulq_n_u32 (vecus32x4_src, elemusB));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecus32x4_res[indx] != expectedus4_2[indx])
++ abort ();
++
++ vst1q_u32 (vecus32x4_res, vmulq_n_u32 (vecus32x4_src, elemusC));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecus32x4_res[indx] != expectedus4_3[indx])
++ abort ();
++
++ vst1q_u32 (vecus32x4_res, vmulq_n_u32 (vecus32x4_src, elemusD));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecus32x4_res[indx] != expectedus4_4[indx])
++ abort ();
++
++/* { dg-final { scan-assembler-times "\tmul\tv\[0-9\]+\.4s, v\[0-9\]+\.4s, v\[0-9\]+\.s\\\[0\\\]" 8 } } */
++}
++
++
++void
++check_v4hi (int16_t elemhA, int16_t elemhB, int16_t elemhC, int16_t elemhD)
++{
++ int32_t indx;
++ const int16_t vech16x4_buf[4] = {AH, BH, CH, DH};
++ int16x4_t vech16x4_src = vld1_s16 (vech16x4_buf);
++ int16_t vech16x4_res[4];
++
++ vst1_s16 (vech16x4_res, vmul_n_s16 (vech16x4_src, elemhA));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vech16x4_res[indx] != expectedh4_1[indx])
++ abort ();
++
++ vst1_s16 (vech16x4_res, vmul_n_s16 (vech16x4_src, elemhB));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vech16x4_res[indx] != expectedh4_2[indx])
++ abort ();
++
++ vst1_s16 (vech16x4_res, vmul_n_s16 (vech16x4_src, elemhC));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vech16x4_res[indx] != expectedh4_3[indx])
++ abort ();
++
++ vst1_s16 (vech16x4_res, vmul_n_s16 (vech16x4_src, elemhD));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vech16x4_res[indx] != expectedh4_4[indx])
++ abort ();
++}
++
++void
++check_v4hi_unsigned (uint16_t elemuhA, uint16_t elemuhB, uint16_t elemuhC,
++ uint16_t elemuhD)
++{
++ int indx;
++ const uint16_t vecuh16x4_buf[4] = {AUH, BUH, CUH, DUH};
++ uint16x4_t vecuh16x4_src = vld1_u16 (vecuh16x4_buf);
++ uint16_t vecuh16x4_res[4];
++
++ vst1_u16 (vecuh16x4_res, vmul_n_u16 (vecuh16x4_src, elemuhA));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecuh16x4_res[indx] != expecteduh4_1[indx])
++ abort ();
++
++ vst1_u16 (vecuh16x4_res, vmul_n_u16 (vecuh16x4_src, elemuhB));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecuh16x4_res[indx] != expecteduh4_2[indx])
++ abort ();
++
++ vst1_u16 (vecuh16x4_res, vmul_n_u16 (vecuh16x4_src, elemuhC));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecuh16x4_res[indx] != expecteduh4_3[indx])
++ abort ();
++
++ vst1_u16 (vecuh16x4_res, vmul_n_u16 (vecuh16x4_src, elemuhD));
++
++ for (indx = 0; indx < 4; indx++)
++ if (vecuh16x4_res[indx] != expecteduh4_4[indx])
++ abort ();
++
++/* { dg-final { scan-assembler-times "mul\tv\[0-9\]+\.4h, v\[0-9\]+\.4h, v\[0-9\]+\.h\\\[0\\\]" 8 } } */
++}
++
++void
++check_v8hi (int16_t elemhA, int16_t elemhB, int16_t elemhC, int16_t elemhD,
++ int16_t elemhE, int16_t elemhF, int16_t elemhG, int16_t elemhH)
++{
++ int32_t indx;
++ const int16_t vech16x8_buf[8] = {AH, BH, CH, DH, EH, FH, GH, HH};
++ int16x8_t vech16x8_src = vld1q_s16 (vech16x8_buf);
++ int16_t vech16x8_res[8];
++
++ vst1q_s16 (vech16x8_res, vmulq_n_s16 (vech16x8_src, elemhA));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vech16x8_res[indx] != expectedh8_1[indx])
++ abort ();
++
++ vst1q_s16 (vech16x8_res, vmulq_n_s16 (vech16x8_src, elemhB));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vech16x8_res[indx] != expectedh8_2[indx])
++ abort ();
++
++ vst1q_s16 (vech16x8_res, vmulq_n_s16 (vech16x8_src, elemhC));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vech16x8_res[indx] != expectedh8_3[indx])
++ abort ();
++
++ vst1q_s16 (vech16x8_res, vmulq_n_s16 (vech16x8_src, elemhD));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vech16x8_res[indx] != expectedh8_4[indx])
++ abort ();
++
++ vst1q_s16 (vech16x8_res, vmulq_n_s16 (vech16x8_src, elemhE));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vech16x8_res[indx] != expectedh8_5[indx])
++ abort ();
++
++ vst1q_s16 (vech16x8_res, vmulq_n_s16 (vech16x8_src, elemhF));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vech16x8_res[indx] != expectedh8_6[indx])
++ abort ();
++
++ vst1q_s16 (vech16x8_res, vmulq_n_s16 (vech16x8_src, elemhG));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vech16x8_res[indx] != expectedh8_7[indx])
++ abort ();
++
++ vst1q_s16 (vech16x8_res, vmulq_n_s16 (vech16x8_src, elemhH));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vech16x8_res[indx] != expectedh8_8[indx])
++ abort ();
++}
++
++void
++check_v8hi_unsigned (uint16_t elemuhA, uint16_t elemuhB, uint16_t elemuhC,
++ uint16_t elemuhD, uint16_t elemuhE, uint16_t elemuhF,
++ uint16_t elemuhG, uint16_t elemuhH)
++{
++ int indx;
++ const uint16_t vecuh16x8_buf[8] = {AUH, BUH, CUH, DUH, EUH, FUH, GUH, HUH};
++ uint16x8_t vecuh16x8_src = vld1q_u16 (vecuh16x8_buf);
++ uint16_t vecuh16x8_res[8];
++
++ vst1q_u16 (vecuh16x8_res, vmulq_n_u16 (vecuh16x8_src, elemuhA));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vecuh16x8_res[indx] != expecteduh8_1[indx])
++ abort ();
++
++ vst1q_u16 (vecuh16x8_res, vmulq_n_u16 (vecuh16x8_src, elemuhB));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vecuh16x8_res[indx] != expecteduh8_2[indx])
++ abort ();
++
++ vst1q_u16 (vecuh16x8_res, vmulq_n_u16 (vecuh16x8_src, elemuhC));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vecuh16x8_res[indx] != expecteduh8_3[indx])
++ abort ();
++
++ vst1q_u16 (vecuh16x8_res, vmulq_n_u16 (vecuh16x8_src, elemuhD));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vecuh16x8_res[indx] != expecteduh8_4[indx])
++ abort ();
++
++ vst1q_u16 (vecuh16x8_res, vmulq_n_u16 (vecuh16x8_src, elemuhE));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vecuh16x8_res[indx] != expecteduh8_5[indx])
++ abort ();
++
++ vst1q_u16 (vecuh16x8_res, vmulq_n_u16 (vecuh16x8_src, elemuhF));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vecuh16x8_res[indx] != expecteduh8_6[indx])
++ abort ();
++
++ vst1q_u16 (vecuh16x8_res, vmulq_n_u16 (vecuh16x8_src, elemuhG));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vecuh16x8_res[indx] != expecteduh8_7[indx])
++ abort ();
++
++ vst1q_u16 (vecuh16x8_res, vmulq_n_u16 (vecuh16x8_src, elemuhH));
++
++ for (indx = 0; indx < 8; indx++)
++ if (vecuh16x8_res[indx] != expecteduh8_8[indx])
++ abort ();
++
++/* { dg-final { scan-assembler-times "mul\tv\[0-9\]+\.8h, v\[0-9\]+\.8h, v\[0-9\]+\.h\\\[0\\\]" 16 } } */
++}
++
++int
++main (void)
++{
++ check_v2sf (_elemA, _elemB);
++ check_v4sf (_elemA, _elemB, _elemC, _elemD);
++ check_v2df (_elemdC, _elemdD);
++ check_v2si (_elemsA, _elemsB);
++ check_v4si (_elemsA, _elemsB, _elemsC, _elemsD);
++ check_v4hi (_elemhA, _elemhB, _elemhC, _elemhD);
++ check_v8hi (_elemhA, _elemhB, _elemhC, _elemhD,
++ _elemhE, _elemhF, _elemhG, _elemhH);
++ check_v2si_unsigned (_elemusA, _elemusB);
++ check_v4si_unsigned (_elemusA, _elemusB, _elemusC, _elemusD);
++ check_v4hi_unsigned (_elemuhA, _elemuhB, _elemuhC, _elemuhD);
++ check_v8hi_unsigned (_elemuhA, _elemuhB, _elemuhC, _elemuhD,
++ _elemuhE, _elemuhF, _elemuhG, _elemuhH);
++
++ return 0;
++}
++
+--- a/src/gcc/testsuite/gcc.target/aarch64/store-pair-1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/store-pair-1.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2" } */
++/* { dg-options "-O2 -mcpu=generic" } */
+
+ int f(int *a, int b)
+ {
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/store_repeating_constant_1.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -mtune=generic" } */
++
++void
++foo (unsigned long long *a)
++{
++ a[0] = 0x0140c0da0140c0daULL;
++}
++
++/* { dg-final { scan-assembler-times "movk\\tw.*" 1 } } */
++/* { dg-final { scan-assembler-times "stp\tw\[0-9\]+, w\[0-9\]+.*" 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/store_repeating_constant_2.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-options "-Os" } */
++
++/* Check that for -Os we synthesize only the bottom half and then
++ store it twice with an STP rather than synthesizing it twice in each
++ half of an X-reg. */
++
++void
++foo (unsigned long long *a)
++{
++ a[0] = 0xc0da0000c0daULL;
++}
++
++/* { dg-final { scan-assembler-times "mov\\tw.*" 1 } } */
++/* { dg-final { scan-assembler-times "stp\tw\[0-9\]+, w\[0-9\]+.*" 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/struct_return.c
+@@ -0,0 +1,31 @@
++/* Test the absence of a spurious move from x8 to x0 for functions
++ return structures. */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++struct s
++{
++ long x;
++ long y;
++ long z;
++};
++
++struct s __attribute__((noinline))
++foo (long a, long d, long c)
++{
++ struct s b;
++ b.x = a;
++ b.y = d;
++ b.z = c;
++ return b;
++}
++
++int
++main (void)
++{
++ struct s x;
++ x = foo ( 10, 20, 30);
++ return x.x + x.y + x.z;
++}
++
++/* { dg-final { scan-assembler-not "mov\tx0, x8" } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/test_frame_10.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/test_frame_10.c
+@@ -4,8 +4,7 @@
+ * total frame size > 512.
+ area except outgoing <= 512
+ * number of callee-saved reg >= 2.
+- * Split stack adjustment into two subtractions.
+- the first subtractions could be optimized into "stp !". */
++ * Use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
+@@ -15,6 +14,6 @@
+ t_frame_pattern_outgoing (test10, 480, "x19", 24, a[8], a[9], a[10])
+ t_frame_run (test10)
+
+-/* { dg-final { scan-assembler-times "stp\tx19, x30, \\\[sp, -\[0-9\]+\\\]!" 1 } } */
+-/* { dg-final { scan-assembler-times "ldp\tx19, x30, \\\[sp\\\], \[0-9\]+" 1 } } */
++/* { dg-final { scan-assembler-times "stp\tx19, x30, \\\[sp, \[0-9\]+\\\]" 1 } } */
++/* { dg-final { scan-assembler-times "ldp\tx19, x30, \\\[sp, \[0-9\]+\\\]" 1 } } */
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/test_frame_12.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/test_frame_12.c
+@@ -13,6 +13,6 @@ t_frame_run (test12)
+
+ /* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 1 } } */
+
+-/* Check epilogue using write-back. */
+-/* { dg-final { scan-assembler-times "ldp\tx29, x30, \\\[sp\\\], \[0-9\]+" 3 } } */
++/* Check epilogue using no write-back. */
++/* { dg-final { scan-assembler-times "ldp\tx29, x30, \\\[sp, \[0-9\]+\\\]" 1 } } */
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/test_frame_13.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/test_frame_13.c
+@@ -2,8 +2,7 @@
+ * without outgoing.
+ * total frame size > 512.
+ * number of callee-save reg >= 2.
+- * split the stack adjustment into two substractions,
+- the second could be optimized into "stp !". */
++ * Use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+ /* { dg-options "-O2 --save-temps" } */
+@@ -14,4 +13,4 @@ t_frame_pattern (test13, 700, )
+ t_frame_run (test13)
+
+ /* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 1 } } */
+-/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" 2 } } */
++/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp\\\]" 1 } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/test_frame_15.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/test_frame_15.c
+@@ -3,8 +3,7 @@
+ * total frame size > 512.
+ area except outgoing <= 512
+ * number of callee-save reg >= 2.
+- * split the stack adjustment into two substractions,
+- the first could be optimized into "stp !". */
++ * Use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+ /* { dg-options "-O2 --save-temps" } */
+@@ -15,4 +14,4 @@ t_frame_pattern_outgoing (test15, 480, , 8, a[8])
+ t_frame_run (test15)
+
+ /* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 1 } } */
+-/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" 3 } } */
++/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, \[0-9\]+\\\]" 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/test_frame_16.c
+@@ -0,0 +1,25 @@
++/* Verify:
++ * with outgoing.
++ * single int register push.
++ * varargs and callee-save size >= 256
++ * Use 2 stack adjustments. */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
++
++#define REP8(X) X,X,X,X,X,X,X,X
++#define REP64(X) REP8(REP8(X))
++
++void outgoing (__builtin_va_list, ...);
++
++double vararg_outgoing (int x1, ...)
++{
++ double a1 = x1, a2 = x1 * 2, a3 = x1 * 3, a4 = x1 * 4, a5 = x1 * 5, a6 = x1 * 6;
++ __builtin_va_list vl;
++ __builtin_va_start (vl, x1);
++ outgoing (vl, a1, a2, a3, a4, a5, a6, REP64 (1));
++ __builtin_va_end (vl);
++ return a1 + a2 + a3 + a4 + a5 + a6;
++}
++
++/* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 2 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/test_frame_17.c
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 --save-temps" } */
++
++/* Test reuse of stack adjustment temporaries. */
++
++void foo ();
++
++int reuse_mov (int i)
++{
++ int arr[1025];
++ return arr[i];
++}
++
++int no_reuse_mov (int i)
++{
++ int arr[1025];
++ foo ();
++ return arr[i];
++}
++
++/* { dg-final { scan-assembler-times "mov\tx16, \[0-9\]+" 3 } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/test_frame_6.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/test_frame_6.c
+@@ -3,8 +3,7 @@
+ * without outgoing.
+ * total frame size > 512.
+ * number of callee-saved reg == 1.
+- * split stack adjustment into two subtractions.
+- the second subtraction should use "str !". */
++ * use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
+@@ -14,6 +13,7 @@
+ t_frame_pattern (test6, 700, )
+ t_frame_run (test6)
+
+-/* { dg-final { scan-assembler-times "str\tx30, \\\[sp, -\[0-9\]+\\\]!" 2 } } */
+-/* { dg-final { scan-assembler-times "ldr\tx30, \\\[sp\\\], \[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler-times "str\tx30, \\\[sp\\\]" 1 } } */
++/* { dg-final { scan-assembler-times "ldr\tx30, \\\[sp\\\]" 2 } } */
++/* { dg-final { scan-assembler-times "ldr\tx30, \\\[sp\\\]," 1 } } */
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/test_frame_7.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/test_frame_7.c
+@@ -3,8 +3,7 @@
+ * without outgoing.
+ * total frame size > 512.
+ * number of callee-saved reg == 2.
+- * split stack adjustment into two subtractions.
+- the second subtraction should use "stp !". */
++ * use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
+@@ -14,6 +13,6 @@
+ t_frame_pattern (test7, 700, "x19")
+ t_frame_run (test7)
+
+-/* { dg-final { scan-assembler-times "stp\tx19, x30, \\\[sp, -\[0-9\]+\\\]!" 1 } } */
+-/* { dg-final { scan-assembler-times "ldp\tx19, x30, \\\[sp\\\], \[0-9\]+" 1 } } */
++/* { dg-final { scan-assembler-times "stp\tx19, x30, \\\[sp]" 1 } } */
++/* { dg-final { scan-assembler-times "ldp\tx19, x30, \\\[sp\\\]" 1 } } */
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/test_frame_8.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/test_frame_8.c
+@@ -12,6 +12,6 @@
+ t_frame_pattern_outgoing (test8, 700, , 8, a[8])
+ t_frame_run (test8)
+
+-/* { dg-final { scan-assembler-times "str\tx30, \\\[sp, -\[0-9\]+\\\]!" 3 } } */
+-/* { dg-final { scan-assembler-times "ldr\tx30, \\\[sp\\\], \[0-9\]+" 3 } } */
++/* { dg-final { scan-assembler-times "str\tx30, \\\[sp, \[0-9\]+\\\]" 1 } } */
++/* { dg-final { scan-assembler-times "ldr\tx30, \\\[sp, \[0-9\]+\\\]" 1 } } */
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/thunderxloadpair.c
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -mcpu=thunderx" } */
++
++struct ldp
++{
++ long long c;
++ int a, b;
++};
++
++
++int f(struct ldp *a)
++{
++ return a->a + a->b;
++}
++
++
++/* We know the alignement of a->a to be 8 byte aligned so it is profitable
++ to do ldp. */
++/* { dg-final { scan-assembler-times "ldp\tw\[0-9\]+, w\[0-9\]" 1 } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/thunderxnoloadpair.c
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -mcpu=thunderx" } */
++
++struct noldp
++{
++ int a, b;
++};
++
++
++int f(struct noldp *a)
++{
++ return a->a + a->b;
++}
++
++/* We know the alignement of a->a to be 4 byte aligned so it is not profitable
++ to do ldp. */
++/* { dg-final { scan-assembler-not "ldp\tw\[0-9\]+, w\[0-9\]" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/ubfiz_lsl_1.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++/* Check that an X-reg UBFIZ can be simplified into a W-reg LSL. */
++
++long long
++f2 (long long x)
++{
++ return (x << 5) & 0xffffffff;
++}
++
++/* { dg-final { scan-assembler "lsl\tw" } } */
++/* { dg-final { scan-assembler-not "ubfiz\tx" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/ubfx_lsr_1.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++/* Check that an X-reg UBFX can be simplified into a W-reg LSR. */
++
++int
++f (unsigned long long x)
++{
++ x = (x >> 24) & 255;
++ return x + 1;
++}
++
++/* { dg-final { scan-assembler "lsr\tw" } } */
++/* { dg-final { scan-assembler-not "ubfx\tx" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/va_arg_1.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 --save-temps" } */
++
++int
++f (int a, ...)
++{
++ /* { dg-final { scan-assembler-not "str" } } */
++ return a;
++}
++
++/* { dg-final { cleanup-saved-temps } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/va_arg_2.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 --save-temps" } */
++
++int
++foo (char *fmt, ...)
++{
++ int d;
++ __builtin_va_list ap;
++
++ __builtin_va_start (ap, fmt);
++ d = __builtin_va_arg (ap, int);
++ __builtin_va_end (ap);
++
++ /* { dg-final { scan-assembler-not "x7" } } */
++ return d;
++}
++
++/* { dg-final { cleanup-saved-temps } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/va_arg_3.c
+@@ -0,0 +1,26 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 --save-temps" } */
++
++int d2i (double a);
++
++int
++foo (char *fmt, ...)
++{
++ int d, e;
++ double f, g;
++ __builtin_va_list ap;
++
++ __builtin_va_start (ap, fmt);
++ d = __builtin_va_arg (ap, int);
++ f = __builtin_va_arg (ap, double);
++ g = __builtin_va_arg (ap, double);
++ d += d2i (f);
++ d += d2i (g);
++ __builtin_va_end (ap);
++
++ /* { dg-final { scan-assembler-not "x7" } } */
++ /* { dg-final { scan-assembler-not "q7" } } */
++ return d;
++}
++
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-abs-compile.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-abs-compile.c
+@@ -1,6 +1,6 @@
+
+ /* { dg-do compile } */
+-/* { dg-options "-O3" } */
++/* { dg-options "-O3 -fno-vect-cost-model" } */
+
+ #define N 16
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-clz.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-clz.c
+@@ -1,5 +1,5 @@
+ /* { dg-do run } */
+-/* { dg-options "-O3 -save-temps -fno-inline" } */
++/* { dg-options "-O3 -save-temps -fno-inline -fno-vect-cost-model" } */
+
+ extern void abort ();
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-d.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-d.c
+@@ -1,5 +1,5 @@
+ /* { dg-do run } */
+-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-unroll-loops --save-temps -fno-inline" } */
++/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-unroll-loops --save-temps -fno-inline -fno-vect-cost-model" } */
+
+ #define FTYPE double
+ #define ITYPE long
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-d.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-d.c
+@@ -1,5 +1,5 @@
+ /* { dg-do run } */
+-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-unroll-loops --save-temps -fno-inline" } */
++/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-unroll-loops --save-temps -fno-inline -fno-vect-cost-model" } */
+
+ #define FTYPE double
+ #define ITYPE long
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-d.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-d.c
+@@ -1,5 +1,5 @@
+ /* { dg-do run } */
+-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-unroll-loops --save-temps -fno-inline" } */
++/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-unroll-loops --save-temps -fno-inline -fno-vect-cost-model" } */
+
+ #define FTYPE double
+ #define ITYPE long
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all" } */
++/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-vect-cost-model" } */
+
+ #define N 32
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all" } */
++/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-vect-cost-model" } */
+
+ #define N 32
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all" } */
++/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-vect-cost-model" } */
+
+ #define N 32
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all" } */
++/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-vect-cost-model" } */
+
+ #define N 32
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect_copy_lane_1.c
+@@ -0,0 +1,86 @@
++/* { dg-do compile } */
++/* { dg-options "-O3" } */
++
++#include "arm_neon.h"
++
++#define BUILD_TEST(TYPE1, TYPE2, Q1, Q2, SUFFIX, INDEX1, INDEX2) \
++TYPE1 __attribute__((noinline,noclone)) \
++test_copy##Q1##_lane##Q2##_##SUFFIX (TYPE1 a, TYPE2 b) \
++{ \
++ return vcopy##Q1##_lane##Q2##_##SUFFIX (a, INDEX1, b, INDEX2); \
++}
++
++/* vcopy_lane. */
++BUILD_TEST (poly8x8_t, poly8x8_t, , , p8, 7, 6)
++BUILD_TEST (int8x8_t, int8x8_t, , , s8, 7, 6)
++BUILD_TEST (uint8x8_t, uint8x8_t, , , u8, 7, 6)
++/* { dg-final { scan-assembler-times "ins\\tv0.b\\\[7\\\], v1.b\\\[6\\\]" 3 } } */
++BUILD_TEST (poly16x4_t, poly16x4_t, , , p16, 3, 2)
++BUILD_TEST (int16x4_t, int16x4_t, , , s16, 3, 2)
++BUILD_TEST (uint16x4_t, uint16x4_t, , , u16, 3, 2)
++/* { dg-final { scan-assembler-times "ins\\tv0.h\\\[3\\\], v1.h\\\[2\\\]" 3 } } */
++BUILD_TEST (float32x2_t, float32x2_t, , , f32, 1, 0)
++BUILD_TEST (int32x2_t, int32x2_t, , , s32, 1, 0)
++BUILD_TEST (uint32x2_t, uint32x2_t, , , u32, 1, 0)
++/* { dg-final { scan-assembler-times "ins\\tv0.s\\\[1\\\], v1.s\\\[0\\\]" 3 } } */
++BUILD_TEST (int64x1_t, int64x1_t, , , s64, 0, 0)
++BUILD_TEST (uint64x1_t, uint64x1_t, , , u64, 0, 0)
++BUILD_TEST (float64x1_t, float64x1_t, , , f64, 0, 0)
++/* { dg-final { scan-assembler-times "fmov\\td0, d1" 3 } } */
++
++/* vcopy_laneq. */
++
++BUILD_TEST (poly8x8_t, poly8x16_t, , q, p8, 7, 15)
++BUILD_TEST (int8x8_t, int8x16_t, , q, s8, 7, 15)
++BUILD_TEST (uint8x8_t, uint8x16_t, , q, u8, 7, 15)
++/* { dg-final { scan-assembler-times "ins\\tv0.b\\\[7\\\], v1.b\\\[15\\\]" 3 } } */
++BUILD_TEST (poly16x4_t, poly16x8_t, , q, p16, 3, 7)
++BUILD_TEST (int16x4_t, int16x8_t, , q, s16, 3, 7)
++BUILD_TEST (uint16x4_t, uint16x8_t, , q, u16, 3, 7)
++/* { dg-final { scan-assembler-times "ins\\tv0.h\\\[3\\\], v1.h\\\[7\\\]" 3 } } */
++BUILD_TEST (float32x2_t, float32x4_t, , q, f32, 1, 3)
++BUILD_TEST (int32x2_t, int32x4_t, , q, s32, 1, 3)
++BUILD_TEST (uint32x2_t, uint32x4_t, , q, u32, 1, 3)
++/* { dg-final { scan-assembler-times "ins\\tv0.s\\\[1\\\], v1.s\\\[3\\\]" 3 } } */
++BUILD_TEST (float64x1_t, float64x2_t, , q, f64, 0, 1)
++BUILD_TEST (int64x1_t, int64x2_t, , q, s64, 0, 1)
++BUILD_TEST (uint64x1_t, uint64x2_t, , q, u64, 0, 1)
++/* XFAIL due to PR 71307. */
++/* { dg-final { scan-assembler-times "dup\\td0, v1.d\\\[1\\\]" 3 { xfail *-*-* } } } */
++
++/* vcopyq_lane. */
++BUILD_TEST (poly8x16_t, poly8x8_t, q, , p8, 15, 7)
++BUILD_TEST (int8x16_t, int8x8_t, q, , s8, 15, 7)
++BUILD_TEST (uint8x16_t, uint8x8_t, q, , u8, 15, 7)
++/* { dg-final { scan-assembler-times "ins\\tv0.b\\\[15\\\], v1.b\\\[7\\\]" 3 } } */
++BUILD_TEST (poly16x8_t, poly16x4_t, q, , p16, 7, 3)
++BUILD_TEST (int16x8_t, int16x4_t, q, , s16, 7, 3)
++BUILD_TEST (uint16x8_t, uint16x4_t, q, , u16, 7, 3)
++/* { dg-final { scan-assembler-times "ins\\tv0.h\\\[7\\\], v1.h\\\[3\\\]" 3 } } */
++BUILD_TEST (float32x4_t, float32x2_t, q, , f32, 3, 1)
++BUILD_TEST (int32x4_t, int32x2_t, q, , s32, 3, 1)
++BUILD_TEST (uint32x4_t, uint32x2_t, q, , u32, 3, 1)
++/* { dg-final { scan-assembler-times "ins\\tv0.s\\\[3\\\], v1.s\\\[1\\\]" 3 } } */
++BUILD_TEST (float64x2_t, float64x1_t, q, , f64, 1, 0)
++BUILD_TEST (int64x2_t, int64x1_t, q, , s64, 1, 0)
++BUILD_TEST (uint64x2_t, uint64x1_t, q, , u64, 1, 0)
++/* { dg-final { scan-assembler-times "ins\\tv0.d\\\[1\\\], v1.d\\\[0\\\]" 3 } } */
++
++/* vcopyq_laneq. */
++
++BUILD_TEST (poly8x16_t, poly8x16_t, q, q, p8, 14, 15)
++BUILD_TEST (int8x16_t, int8x16_t, q, q, s8, 14, 15)
++BUILD_TEST (uint8x16_t, uint8x16_t, q, q, u8, 14, 15)
++/* { dg-final { scan-assembler-times "ins\\tv0.b\\\[14\\\], v1.b\\\[15\\\]" 3 } } */
++BUILD_TEST (poly16x8_t, poly16x8_t, q, q, p16, 6, 7)
++BUILD_TEST (int16x8_t, int16x8_t, q, q, s16, 6, 7)
++BUILD_TEST (uint16x8_t, uint16x8_t, q, q, u16, 6, 7)
++/* { dg-final { scan-assembler-times "ins\\tv0.h\\\[6\\\], v1.h\\\[7\\\]" 3 } } */
++BUILD_TEST (float32x4_t, float32x4_t, q, q, f32, 2, 3)
++BUILD_TEST (int32x4_t, int32x4_t, q, q, s32, 2, 3)
++BUILD_TEST (uint32x4_t, uint32x4_t, q, q, u32, 2, 3)
++/* { dg-final { scan-assembler-times "ins\\tv0.s\\\[2\\\], v1.s\\\[3\\\]" 3 } } */
++BUILD_TEST (float64x2_t, float64x2_t, q, q, f64, 1, 1)
++BUILD_TEST (int64x2_t, int64x2_t, q, q, s64, 1, 1)
++BUILD_TEST (uint64x2_t, uint64x2_t, q, q, u64, 1, 1)
++/* { dg-final { scan-assembler-times "ins\\tv0.d\\\[1\\\], v1.d\\\[1\\\]" 3 } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect_ctz_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect_ctz_1.c
+@@ -1,5 +1,5 @@
+ /* { dg-do run } */
+-/* { dg-options "-O3 -save-temps -fno-inline" } */
++/* { dg-options "-O3 -save-temps -fno-inline -fno-vect-cost-model" } */
+
+ extern void abort ();
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/vector_initialization_nostack.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vector_initialization_nostack.c
+@@ -38,14 +38,14 @@ f11 (void)
+ return sum;
+ }
+
+-char arr_c[100][100];
++char arr_c[100];
+ char
+ f12 (void)
+ {
+ int i;
+ char sum = 0;
+ for (i = 0; i < 100; i++)
+- sum += arr_c[i][0] * arr_c[0][i];
++ sum += arr_c[i] * arr_c[i];
+ return sum;
+ }
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/vget_set_lane_1.c
+@@ -0,0 +1,72 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++#include "arm_neon.h"
++
++#define BUILD_TEST(TYPE1, TYPE2, Q1, Q2, SUFFIX, INDEX1, INDEX2) \
++TYPE1 __attribute__((noinline,noclone)) \
++test_copy##Q1##_lane##Q2##_##SUFFIX (TYPE1 a, TYPE2 b) \
++{ \
++ return vset##Q1##_lane_##SUFFIX (vget##Q2##_lane_##SUFFIX (b, INDEX2),\
++ a, INDEX1); \
++}
++
++BUILD_TEST (poly8x8_t, poly8x8_t, , , p8, 7, 6)
++BUILD_TEST (int8x8_t, int8x8_t, , , s8, 7, 6)
++BUILD_TEST (uint8x8_t, uint8x8_t, , , u8, 7, 6)
++/* { dg-final { scan-assembler-times "ins\\tv0.b\\\[7\\\], v1.b\\\[6\\\]" 3 } } */
++BUILD_TEST (poly16x4_t, poly16x4_t, , , p16, 3, 2)
++BUILD_TEST (int16x4_t, int16x4_t, , , s16, 3, 2)
++BUILD_TEST (uint16x4_t, uint16x4_t, , , u16, 3, 2)
++/* { dg-final { scan-assembler-times "ins\\tv0.h\\\[3\\\], v1.h\\\[2\\\]" 3 } } */
++BUILD_TEST (float32x2_t, float32x2_t, , , f32, 1, 0)
++BUILD_TEST (int32x2_t, int32x2_t, , , s32, 1, 0)
++BUILD_TEST (uint32x2_t, uint32x2_t, , , u32, 1, 0)
++/* { dg-final { scan-assembler-times "ins\\tv0.s\\\[1\\\], v1.s\\\[0\\\]" 3 } } */
++
++BUILD_TEST (poly8x8_t, poly8x16_t, , q, p8, 7, 15)
++BUILD_TEST (int8x8_t, int8x16_t, , q, s8, 7, 15)
++BUILD_TEST (uint8x8_t, uint8x16_t, , q, u8, 7, 15)
++/* { dg-final { scan-assembler-times "ins\\tv0.b\\\[7\\\], v1.b\\\[15\\\]" 3 } } */
++BUILD_TEST (poly16x4_t, poly16x8_t, , q, p16, 3, 7)
++BUILD_TEST (int16x4_t, int16x8_t, , q, s16, 3, 7)
++BUILD_TEST (uint16x4_t, uint16x8_t, , q, u16, 3, 7)
++/* { dg-final { scan-assembler-times "ins\\tv0.h\\\[3\\\], v1.h\\\[7\\\]" 3 } } */
++BUILD_TEST (float32x2_t, float32x4_t, , q, f32, 1, 3)
++BUILD_TEST (int32x2_t, int32x4_t, , q, s32, 1, 3)
++BUILD_TEST (uint32x2_t, uint32x4_t, , q, u32, 1, 3)
++/* { dg-final { scan-assembler-times "ins\\tv0.s\\\[1\\\], v1.s\\\[3\\\]" 3 } } */
++
++BUILD_TEST (poly8x16_t, poly8x8_t, q, , p8, 15, 7)
++BUILD_TEST (int8x16_t, int8x8_t, q, , s8, 15, 7)
++BUILD_TEST (uint8x16_t, uint8x8_t, q, , u8, 15, 7)
++/* { dg-final { scan-assembler-times "ins\\tv0.b\\\[15\\\], v1.b\\\[7\\\]" 3 } } */
++BUILD_TEST (poly16x8_t, poly16x4_t, q, , p16, 7, 3)
++BUILD_TEST (int16x8_t, int16x4_t, q, , s16, 7, 3)
++BUILD_TEST (uint16x8_t, uint16x4_t, q, , u16, 7, 3)
++/* { dg-final { scan-assembler-times "ins\\tv0.h\\\[7\\\], v1.h\\\[3\\\]" 3 } } */
++BUILD_TEST (float32x4_t, float32x2_t, q, , f32, 3, 1)
++BUILD_TEST (int32x4_t, int32x2_t, q, , s32, 3, 1)
++BUILD_TEST (uint32x4_t, uint32x2_t, q, , u32, 3, 1)
++/* { dg-final { scan-assembler-times "ins\\tv0.s\\\[3\\\], v1.s\\\[1\\\]" 3 } } */
++BUILD_TEST (float64x2_t, float64x1_t, q, , f64, 1, 0)
++BUILD_TEST (int64x2_t, int64x1_t, q, , s64, 1, 0)
++BUILD_TEST (uint64x2_t, uint64x1_t, q, , u64, 1, 0)
++/* { dg-final { scan-assembler-times "ins\\tv0.d\\\[1\\\], v1.d\\\[0\\\]" 3 } } */
++
++BUILD_TEST (poly8x16_t, poly8x16_t, q, q, p8, 14, 15)
++BUILD_TEST (int8x16_t, int8x16_t, q, q, s8, 14, 15)
++BUILD_TEST (uint8x16_t, uint8x16_t, q, q, u8, 14, 15)
++/* { dg-final { scan-assembler-times "ins\\tv0.b\\\[14\\\], v1.b\\\[15\\\]" 3 } } */
++BUILD_TEST (poly16x8_t, poly16x8_t, q, q, p16, 6, 7)
++BUILD_TEST (int16x8_t, int16x8_t, q, q, s16, 6, 7)
++BUILD_TEST (uint16x8_t, uint16x8_t, q, q, u16, 6, 7)
++/* { dg-final { scan-assembler-times "ins\\tv0.h\\\[6\\\], v1.h\\\[7\\\]" 3 } } */
++BUILD_TEST (float32x4_t, float32x4_t, q, q, f32, 2, 3)
++BUILD_TEST (int32x4_t, int32x4_t, q, q, s32, 2, 3)
++BUILD_TEST (uint32x4_t, uint32x4_t, q, q, u32, 2, 3)
++/* { dg-final { scan-assembler-times "ins\\tv0.s\\\[2\\\], v1.s\\\[3\\\]" 3 } } */
++BUILD_TEST (float64x2_t, float64x2_t, q, q, f64, 1, 1)
++BUILD_TEST (int64x2_t, int64x2_t, q, q, s64, 1, 1)
++BUILD_TEST (uint64x2_t, uint64x2_t, q, q, u64, 1, 1)
++/* { dg-final { scan-assembler-times "ins\\tv0.d\\\[1\\\], v1.d\\\[1\\\]" 3 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/aarch64/vminmaxnm.c
+@@ -0,0 +1,37 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++#include "arm_neon.h"
++
++/* For each of these intrinsics, we map directly to an unspec in RTL.
++ We're just using the argument directly and returning the result, so we
++ can precisely specify the exact instruction pattern and register
++ allocations we expect. */
++
++float64x1_t
++test_vmaxnm_f64 (float64x1_t a, float64x1_t b)
++{
++ /* { dg-final { scan-assembler-times "fmaxnm\td0, d0, d1" 1 } } */
++ return vmaxnm_f64 (a, b);
++}
++
++float64x1_t
++test_vminnm_f64 (float64x1_t a, float64x1_t b)
++{
++ /* { dg-final { scan-assembler-times "fminnm\td0, d0, d1" 1 } } */
++ return vminnm_f64 (a, b);
++}
++
++float64x1_t
++test_vmax_f64 (float64x1_t a, float64x1_t b)
++{
++ /* { dg-final { scan-assembler-times "fmax\td0, d0, d1" 1 } } */
++ return vmax_f64 (a, b);
++}
++
++float64x1_t
++test_vmin_f64 (float64x1_t a, float64x1_t b)
++{
++ /* { dg-final { scan-assembler-times "fmin\td0, d0, d1" 1 } } */
++ return vmin_f64 (a, b);
++}
+\ No newline at end of file
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/neon-vect10.c
+@@ -0,0 +1,32 @@
++/* Test AAPCS layout (VFP variant for Neon types) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_neon_fp16_hw } */
++/* { dg-add-options arm_neon_fp16 } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define NEON
++#define TESTFILE "neon-vect10.c"
++#include "neon-constants.h"
++
++#include "abitest.h"
++#else
++
++ARG (int32x4_t, i32x4_constvec2, Q0) /* D0, D1. */
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 3.0f, S4 + 2) /* D2, Q1. */
++#else
++ARG (__fp16, 3.0f, S4) /* D2, Q1. */
++#endif
++ARG (int32x4x2_t, i32x4x2_constvec1, Q2) /* Q2, Q3 - D4-D6 , s5-s12. */
++ARG (double, 12.0, D3) /* Backfill this particular argument. */
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 5.0f, S5 + 2) /* Backfill in S5. */
++#else
++ARG (__fp16, 5.0f, S5) /* Backfill in S5. */
++#endif
++ARG (int32x4x2_t, i32x4x2_constvec2, STACK)
++LAST_ARG (int, 3, R0)
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/neon-vect9.c
+@@ -0,0 +1,24 @@
++/* Test AAPCS layout (VFP variant for Neon types) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_neon_fp16_hw } */
++/* { dg-add-options arm_neon_fp16 } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define NEON
++#define TESTFILE "neon-vect9.c"
++#include "neon-constants.h"
++
++#include "abitest.h"
++#else
++
++ARG (int32x4_t, i32x4_constvec2, Q0) /* D0, D1. */
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 3.0f, S4 + 2) /* D2, Q1 occupied. */
++#else
++ARG (__fp16, 3.0f, S4) /* D2, Q1 occupied. */
++#endif
++LAST_ARG (int, 3, R0)
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp18.c
+@@ -0,0 +1,28 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_hw } */
++/* { dg-add-options arm_fp16_ieee } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp18.c"
++#include "abitest.h"
++
++#else
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 1.0f, S0 + 2)
++#else
++ARG (__fp16, 1.0f, S0)
++#endif
++ARG (float, 2.0f, S1)
++ARG (double, 4.0, D1)
++ARG (float, 2.0f, S4)
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 1.0f, S5 + 2)
++#else
++ARG (__fp16, 1.0f, S5)
++#endif
++LAST_ARG (int, 3, R0)
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp19.c
+@@ -0,0 +1,30 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_hw } */
++/* { dg-add-options arm_fp16_ieee } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp19.c"
++
++__complex__ x = 1.0+2.0i;
++
++#include "abitest.h"
++#else
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 1.0f, S0 + 2)
++#else
++ARG (__fp16, 1.0f, S0)
++#endif
++ARG (float, 2.0f, S1)
++ARG (__complex__ double, x, D1)
++ARG (float, 3.0f, S6)
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 2.0f, S7 + 2)
++#else
++ARG (__fp16, 2.0f, S7)
++#endif
++LAST_ARG (int, 3, R0)
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp20.c
+@@ -0,0 +1,22 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_hw } */
++/* { dg-add-options arm_fp16_ieee } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp20.c"
++
++#define PCSATTR __attribute__((pcs("aapcs")))
++
++#include "abitest.h"
++#else
++ARG (float, 1.0f, R0)
++ARG (double, 2.0, R2)
++ARG (float, 3.0f, STACK)
++ARG (__fp16, 2.0f, STACK+4)
++LAST_ARG (double, 4.0, STACK+8)
++#endif
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp21.c
+@@ -0,0 +1,26 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_hw } */
++/* { dg-add-options arm_fp16_ieee } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp21.c"
++
++#define PCSATTR __attribute__((pcs("aapcs")))
++
++#include "abitest.h"
++#else
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 1.0f, R0 + 2)
++#else
++ARG (__fp16, 1.0f, R0)
++#endif
++ARG (double, 2.0, R2)
++ARG (__fp16, 3.0f, STACK)
++ARG (float, 2.0f, STACK+4)
++LAST_ARG (double, 4.0, STACK+8)
++#endif
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp22.c
+@@ -0,0 +1,28 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_hw } */
++/* { dg-add-options arm_fp16_alternative } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp22.c"
++#include "abitest.h"
++
++#else
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 1.0f, S0 + 2)
++#else
++ARG (__fp16, 1.0f, S0)
++#endif
++ARG (float, 2.0f, S1)
++ARG (double, 4.0, D1)
++ARG (float, 2.0f, S4)
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 1.0f, S5 + 2)
++#else
++ARG (__fp16, 1.0f, S5)
++#endif
++LAST_ARG (int, 3, R0)
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp23.c
+@@ -0,0 +1,30 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_hw } */
++/* { dg-add-options arm_fp16_alternative } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp23.c"
++
++__complex__ x = 1.0+2.0i;
++
++#include "abitest.h"
++#else
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 1.0f, S0 + 2)
++#else
++ARG (__fp16, 1.0f, S0)
++#endif
++ARG (float, 2.0f, S1)
++ARG (__complex__ double, x, D1)
++ARG (float, 3.0f, S6)
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 2.0f, S7 + 2)
++#else
++ARG (__fp16, 2.0f, S7)
++#endif
++LAST_ARG (int, 3, R0)
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp24.c
+@@ -0,0 +1,21 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_hw } */
++/* { dg-add-options arm_fp16_alternative } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp24.c"
++
++#define PCSATTR __attribute__((pcs("aapcs")))
++
++#include "abitest.h"
++#else
++ARG (float, 1.0f, R0)
++ARG (double, 2.0, R2)
++ARG (float, 3.0f, STACK)
++ARG (__fp16, 2.0f, STACK+4)
++LAST_ARG (double, 4.0, STACK+8)
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp25.c
+@@ -0,0 +1,25 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm_eabi } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_hw } */
++/* { dg-add-options arm_fp16_alternative } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp25.c"
++
++#define PCSATTR __attribute__((pcs("aapcs")))
++
++#include "abitest.h"
++#else
++#if defined (__ARM_BIG_ENDIAN)
++ARG (__fp16, 1.0f, R0 + 2)
++#else
++ARG (__fp16, 1.0f, R0)
++#endif
++ARG (double, 2.0, R2)
++ARG (__fp16, 3.0f, STACK)
++ARG (float, 2.0f, STACK+4)
++LAST_ARG (double, 4.0, STACK+8)
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/armv5_thumb_isa.c
+@@ -0,0 +1,8 @@
++/* { dg-require-effective-target arm_arch_v5_ok } */
++/* { dg-add-options arm_arch_v5 } */
++
++#if __ARM_ARCH_ISA_THUMB
++#error "__ARM_ARCH_ISA_THUMB defined for ARMv5"
++#endif
++
++int foo;
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c
+@@ -0,0 +1,105 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */
++/* { dg-options "-O2 -ffast-math" } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++
++/* Test instructions generated for half-precision arithmetic. */
++
++typedef __fp16 float16_t;
++typedef __simd64_float16_t float16x4_t;
++typedef __simd128_float16_t float16x8_t;
++
++typedef short int16x4_t __attribute__ ((vector_size (8)));
++typedef short int int16x8_t __attribute__ ((vector_size (16)));
++
++float16_t
++fp16_abs (float16_t a)
++{
++ return (a < 0) ? -a : a;
++}
++
++#define TEST_UNOP(NAME, OPERATOR, TY) \
++ TY test_##NAME##_##TY (TY a) \
++ { \
++ return OPERATOR (a); \
++ }
++
++#define TEST_BINOP(NAME, OPERATOR, TY) \
++ TY test_##NAME##_##TY (TY a, TY b) \
++ { \
++ return a OPERATOR b; \
++ }
++
++#define TEST_CMP(NAME, OPERATOR, RTY, TY) \
++ RTY test_##NAME##_##TY (TY a, TY b) \
++ { \
++ return a OPERATOR b; \
++ }
++
++/* Scalars. */
++
++TEST_UNOP (neg, -, float16_t)
++TEST_UNOP (abs, fp16_abs, float16_t)
++
++TEST_BINOP (add, +, float16_t)
++TEST_BINOP (sub, -, float16_t)
++TEST_BINOP (mult, *, float16_t)
++TEST_BINOP (div, /, float16_t)
++
++TEST_CMP (equal, ==, int, float16_t)
++TEST_CMP (unequal, !=, int, float16_t)
++TEST_CMP (lessthan, <, int, float16_t)
++TEST_CMP (greaterthan, >, int, float16_t)
++TEST_CMP (lessthanequal, <=, int, float16_t)
++TEST_CMP (greaterthanqual, >=, int, float16_t)
++
++/* Vectors of size 4. */
++
++TEST_UNOP (neg, -, float16x4_t)
++
++TEST_BINOP (add, +, float16x4_t)
++TEST_BINOP (sub, -, float16x4_t)
++TEST_BINOP (mult, *, float16x4_t)
++TEST_BINOP (div, /, float16x4_t)
++
++TEST_CMP (equal, ==, int16x4_t, float16x4_t)
++TEST_CMP (unequal, !=, int16x4_t, float16x4_t)
++TEST_CMP (lessthan, <, int16x4_t, float16x4_t)
++TEST_CMP (greaterthan, >, int16x4_t, float16x4_t)
++TEST_CMP (lessthanequal, <=, int16x4_t, float16x4_t)
++TEST_CMP (greaterthanqual, >=, int16x4_t, float16x4_t)
++
++/* Vectors of size 8. */
++
++TEST_UNOP (neg, -, float16x8_t)
++
++TEST_BINOP (add, +, float16x8_t)
++TEST_BINOP (sub, -, float16x8_t)
++TEST_BINOP (mult, *, float16x8_t)
++TEST_BINOP (div, /, float16x8_t)
++
++TEST_CMP (equal, ==, int16x8_t, float16x8_t)
++TEST_CMP (unequal, !=, int16x8_t, float16x8_t)
++TEST_CMP (lessthan, <, int16x8_t, float16x8_t)
++TEST_CMP (greaterthan, >, int16x8_t, float16x8_t)
++TEST_CMP (lessthanequal, <=, int16x8_t, float16x8_t)
++TEST_CMP (greaterthanqual, >=, int16x8_t, float16x8_t)
++
++/* { dg-final { scan-assembler-times {vneg\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++/* { dg-final { scan-assembler-times {vneg\.f16\td[0-9]+, d[0-9]+} 1 } } */
++/* { dg-final { scan-assembler-times {vneg\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++/* { dg-final { scan-assembler-times {vabs\.f16\ts[0-9]+, s[0-9]+} 2 } } */
++
++/* { dg-final { scan-assembler-times {vadd\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */
++/* { dg-final { scan-assembler-times {vsub\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */
++/* { dg-final { scan-assembler-times {vmul\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */
++/* { dg-final { scan-assembler-times {vdiv\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */
++/* { dg-final { scan-assembler-times {vcmp\.f32\ts[0-9]+, s[0-9]+} 26 } } */
++/* { dg-final { scan-assembler-times {vcmpe\.f32\ts[0-9]+, s[0-9]+} 52 } } */
++
++/* { dg-final { scan-assembler-not {vadd\.f32} } } */
++/* { dg-final { scan-assembler-not {vsub\.f32} } } */
++/* { dg-final { scan-assembler-not {vmul\.f32} } } */
++/* { dg-final { scan-assembler-not {vdiv\.f32} } } */
++/* { dg-final { scan-assembler-not {vcmp\.f16} } } */
++/* { dg-final { scan-assembler-not {vcmpe\.f16} } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
+@@ -0,0 +1,101 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++/* Test ARMv8.2 FP16 conversions. */
++#include <arm_fp16.h>
++
++float
++f16_to_f32 (__fp16 a)
++{
++ return (float)a;
++}
++
++float
++f16_to_pf32 (__fp16* a)
++{
++ return (float)*a;
++}
++
++short
++f16_to_s16 (__fp16 a)
++{
++ return (short)a;
++}
++
++short
++pf16_to_s16 (__fp16* a)
++{
++ return (short)*a;
++}
++
++/* { dg-final { scan-assembler-times {vcvtb\.f32\.f16\ts[0-9]+, s[0-9]+} 4 } } */
++
++__fp16
++f32_to_f16 (float a)
++{
++ return (__fp16)a;
++}
++
++void
++f32_to_pf16 (__fp16* x, float a)
++{
++ *x = (__fp16)a;
++}
++
++__fp16
++s16_to_f16 (short a)
++{
++ return (__fp16)a;
++}
++
++void
++s16_to_pf16 (__fp16* x, short a)
++{
++ *x = (__fp16)a;
++}
++
++/* { dg-final { scan-assembler-times {vcvtb\.f16\.f32\ts[0-9]+, s[0-9]+} 4 } } */
++
++float
++s16_to_f32 (short a)
++{
++ return (float)a;
++}
++
++/* { dg-final { scan-assembler-times {vcvt\.f32\.s32\ts[0-9]+, s[0-9]+} 3 } } */
++
++short
++f32_to_s16 (float a)
++{
++ return (short)a;
++}
++
++/* { dg-final { scan-assembler-times {vcvt\.s32\.f32\ts[0-9]+, s[0-9]+} 3 } } */
++
++unsigned short
++f32_to_u16 (float a)
++{
++ return (unsigned short)a;
++}
++
++/* { dg-final { scan-assembler-times {vcvt\.u32\.f32\ts[0-9]+, s[0-9]+} 1 } } */
++
++short
++f64_to_s16 (double a)
++{
++ return (short)a;
++}
++
++/* { dg-final { scan-assembler-times {vcvt\.s32\.f64\ts[0-9]+, d[0-9]+} 1 } } */
++
++unsigned short
++f64_to_u16 (double a)
++{
++ return (unsigned short)a;
++}
++
++/* { dg-final { scan-assembler-times {vcvt\.s32\.f64\ts[0-9]+, d[0-9]+} 1 } } */
++
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
+@@ -0,0 +1,165 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++__fp16
++test_load_1 (__fp16* a)
++{
++ return *a;
++}
++
++__fp16
++test_load_2 (__fp16* a, int i)
++{
++ return a[i];
++}
++
++/* { dg-final { scan-assembler-times {vld1\.16\t\{d[0-9]+\[[0-9]+\]\}, \[r[0-9]+\]} 2 } } */
++
++void
++test_store_1 (__fp16* a, __fp16 b)
++{
++ *a = b;
++}
++
++void
++test_store_2 (__fp16* a, int i, __fp16 b)
++{
++ a[i] = b;
++}
++
++/* { dg-final { scan-assembler-times {vst1\.16\t\{d[0-9]+\[[0-9]+\]\}, \[r[0-9]+\]} 2 } } */
++
++__fp16
++test_load_store_1 (__fp16* a, int i, __fp16* b)
++{
++ a[i] = b[i];
++}
++
++__fp16
++test_load_store_2 (__fp16* a, int i, __fp16* b)
++{
++ a[i] = b[i + 2];
++ return a[i];
++}
++/* { dg-final { scan-assembler-times {ldrh\tr[0-9]+} 2 } } */
++/* { dg-final { scan-assembler-times {strh\tr[0-9]+} 2 } } */
++
++__fp16
++test_select_1 (int sel, __fp16 a, __fp16 b)
++{
++ if (sel)
++ return a;
++ else
++ return b;
++}
++
++__fp16
++test_select_2 (int sel, __fp16 a, __fp16 b)
++{
++ return sel ? a : b;
++}
++
++__fp16
++test_select_3 (__fp16 a, __fp16 b, __fp16 c)
++{
++ return (a == b) ? b : c;
++}
++
++__fp16
++test_select_4 (__fp16 a, __fp16 b, __fp16 c)
++{
++ return (a != b) ? b : c;
++}
++
++__fp16
++test_select_5 (__fp16 a, __fp16 b, __fp16 c)
++{
++ return (a < b) ? b : c;
++}
++
++__fp16
++test_select_6 (__fp16 a, __fp16 b, __fp16 c)
++{
++ return (a <= b) ? b : c;
++}
++
++__fp16
++test_select_7 (__fp16 a, __fp16 b, __fp16 c)
++{
++ return (a > b) ? b : c;
++}
++
++__fp16
++test_select_8 (__fp16 a, __fp16 b, __fp16 c)
++{
++ return (a >= b) ? b : c;
++}
++
++/* { dg-final { scan-assembler-times {vseleq\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 4 } } */
++/* { dg-final { scan-assembler-times {vselgt\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++/* { dg-final { scan-assembler-times {vselge\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++/* { dg-final { scan-assembler-times {vmov\.f16\ts[0-9]+, r[0-9]+} 4 } } */
++/* { dg-final { scan-assembler-times {vmov\.f16\tr[0-9]+, s[0-9]+} 4 } } */
++
++int
++test_compare_1 (__fp16 a, __fp16 b)
++{
++ if (a == b)
++ return -1;
++ else
++ return 0;
++}
++
++int
++test_compare_ (__fp16 a, __fp16 b)
++{
++ if (a != b)
++ return -1;
++ else
++ return 0;
++}
++
++int
++test_compare_2 (__fp16 a, __fp16 b)
++{
++ if (a > b)
++ return -1;
++ else
++ return 0;
++}
++
++int
++test_compare_3 (__fp16 a, __fp16 b)
++{
++ if (a >= b)
++ return -1;
++ else
++ return 0;
++}
++
++int
++test_compare_4 (__fp16 a, __fp16 b)
++{
++ if (a < b)
++ return -1;
++ else
++ return 0;
++}
++
++int
++test_compare_5 (__fp16 a, __fp16 b)
++{
++ if (a <= b)
++ return -1;
++ else
++ return 0;
++}
++
++/* { dg-final { scan-assembler-not {vcmp\.f16} } } */
++/* { dg-final { scan-assembler-not {vcmpe\.f16} } } */
++
++/* { dg-final { scan-assembler-times {vcmp\.f32} 4 } } */
++/* { dg-final { scan-assembler-times {vcmpe\.f32} 8 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c
+@@ -0,0 +1,490 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_v8_2a_fp16_neon } */
++
++/* Test instructions generated for the FP16 vector intrinsics. */
++
++#include <arm_neon.h>
++
++#define MSTRCAT(L, str) L##str
++
++#define UNOP_TEST(insn) \
++ float16x4_t \
++ MSTRCAT (test_##insn, _16x4) (float16x4_t a) \
++ { \
++ return MSTRCAT (insn, _f16) (a); \
++ } \
++ float16x8_t \
++ MSTRCAT (test_##insn, _16x8) (float16x8_t a) \
++ { \
++ return MSTRCAT (insn, q_f16) (a); \
++ }
++
++#define BINOP_TEST(insn) \
++ float16x4_t \
++ MSTRCAT (test_##insn, _16x4) (float16x4_t a, float16x4_t b) \
++ { \
++ return MSTRCAT (insn, _f16) (a, b); \
++ } \
++ float16x8_t \
++ MSTRCAT (test_##insn, _16x8) (float16x8_t a, float16x8_t b) \
++ { \
++ return MSTRCAT (insn, q_f16) (a, b); \
++ }
++
++#define BINOP_LANE_TEST(insn, I) \
++ float16x4_t \
++ MSTRCAT (test_##insn##_lane, _16x4) (float16x4_t a, float16x4_t b) \
++ { \
++ return MSTRCAT (insn, _lane_f16) (a, b, I); \
++ } \
++ float16x8_t \
++ MSTRCAT (test_##insn##_lane, _16x8) (float16x8_t a, float16x4_t b) \
++ { \
++ return MSTRCAT (insn, q_lane_f16) (a, b, I); \
++ }
++
++#define BINOP_LANEQ_TEST(insn, I) \
++ float16x4_t \
++ MSTRCAT (test_##insn##_laneq, _16x4) (float16x4_t a, float16x8_t b) \
++ { \
++ return MSTRCAT (insn, _laneq_f16) (a, b, I); \
++ } \
++ float16x8_t \
++ MSTRCAT (test_##insn##_laneq, _16x8) (float16x8_t a, float16x8_t b) \
++ { \
++ return MSTRCAT (insn, q_laneq_f16) (a, b, I); \
++ } \
++
++#define BINOP_N_TEST(insn) \
++ float16x4_t \
++ MSTRCAT (test_##insn##_n, _16x4) (float16x4_t a, float16_t b) \
++ { \
++ return MSTRCAT (insn, _n_f16) (a, b); \
++ } \
++ float16x8_t \
++ MSTRCAT (test_##insn##_n, _16x8) (float16x8_t a, float16_t b) \
++ { \
++ return MSTRCAT (insn, q_n_f16) (a, b); \
++ }
++
++#define TERNOP_TEST(insn) \
++ float16_t \
++ MSTRCAT (test_##insn, _16) (float16_t a, float16_t b, float16_t c) \
++ { \
++ return MSTRCAT (insn, h_f16) (a, b, c); \
++ } \
++ float16x4_t \
++ MSTRCAT (test_##insn, _16x4) (float16x4_t a, float16x4_t b, \
++ float16x4_t c) \
++ { \
++ return MSTRCAT (insn, _f16) (a, b, c); \
++ } \
++ float16x8_t \
++ MSTRCAT (test_##insn, _16x8) (float16x8_t a, float16x8_t b, \
++ float16x8_t c) \
++ { \
++ return MSTRCAT (insn, q_f16) (a, b, c); \
++ }
++
++#define VCMP1_TEST(insn) \
++ uint16x4_t \
++ MSTRCAT (test_##insn, _16x4) (float16x4_t a) \
++ { \
++ return MSTRCAT (insn, _f16) (a); \
++ } \
++ uint16x8_t \
++ MSTRCAT (test_##insn, _16x8) (float16x8_t a) \
++ { \
++ return MSTRCAT (insn, q_f16) (a); \
++ }
++
++#define VCMP2_TEST(insn) \
++ uint16x4_t \
++ MSTRCAT (test_##insn, _16x4) (float16x4_t a, float16x4_t b) \
++ { \
++ return MSTRCAT (insn, _f16) (a, b); \
++ } \
++ uint16x8_t \
++ MSTRCAT (test_##insn, _16x8) (float16x8_t a, float16x8_t b) \
++ { \
++ return MSTRCAT (insn, q_f16) (a, b); \
++ }
++
++#define VCVT_TEST(insn, TY, TO, FR) \
++ MSTRCAT (TO, 16x4_t) \
++ MSTRCAT (test_##insn, TY) (MSTRCAT (FR, 16x4_t) a) \
++ { \
++ return MSTRCAT (insn, TY) (a); \
++ } \
++ MSTRCAT (TO, 16x8_t) \
++ MSTRCAT (test_##insn##_q, TY) (MSTRCAT (FR, 16x8_t) a) \
++ { \
++ return MSTRCAT (insn, q##TY) (a); \
++ }
++
++#define VCVT_N_TEST(insn, TY, TO, FR) \
++ MSTRCAT (TO, 16x4_t) \
++ MSTRCAT (test_##insn##_n, TY) (MSTRCAT (FR, 16x4_t) a) \
++ { \
++ return MSTRCAT (insn, _n##TY) (a, 1); \
++ } \
++ MSTRCAT (TO, 16x8_t) \
++ MSTRCAT (test_##insn##_n_q, TY) (MSTRCAT (FR, 16x8_t) a) \
++ { \
++ return MSTRCAT (insn, q_n##TY) (a, 1); \
++ }
++
++VCMP1_TEST (vceqz)
++/* { dg-final { scan-assembler-times {vceq\.f16\td[0-9]+, d[0-0]+, #0} 1 } } */
++/* { dg-final { scan-assembler-times {vceq\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */
++
++VCMP1_TEST (vcgtz)
++/* { dg-final { scan-assembler-times {vcgt\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */
++/* { dg-final { scan-assembler-times {vceq\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */
++
++VCMP1_TEST (vcgez)
++/* { dg-final { scan-assembler-times {vcge\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */
++/* { dg-final { scan-assembler-times {vcge\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */
++
++VCMP1_TEST (vcltz)
++/* { dg-final { scan-assembler-times {vclt.f16\td[0-9]+, d[0-9]+, #0} 1 } } */
++/* { dg-final { scan-assembler-times {vclt.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */
++
++VCMP1_TEST (vclez)
++/* { dg-final { scan-assembler-times {vcle\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */
++/* { dg-final { scan-assembler-times {vcle\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */
++
++VCVT_TEST (vcvt, _f16_s16, float, int)
++VCVT_N_TEST (vcvt, _f16_s16, float, int)
++/* { dg-final { scan-assembler-times {vcvt\.f16\.s16\td[0-9]+, d[0-9]+} 2 } }
++ { dg-final { scan-assembler-times {vcvt\.f16\.s16\tq[0-9]+, q[0-9]+} 2 } }
++ { dg-final { scan-assembler-times {vcvt\.f16\.s16\td[0-9]+, d[0-9]+, #1} 1 } }
++ { dg-final { scan-assembler-times {vcvt\.f16\.s16\tq[0-9]+, q[0-9]+, #1} 1 } } */
++
++VCVT_TEST (vcvt, _f16_u16, float, uint)
++VCVT_N_TEST (vcvt, _f16_u16, float, uint)
++/* { dg-final { scan-assembler-times {vcvt\.f16\.u16\td[0-9]+, d[0-9]+} 2 } }
++ { dg-final { scan-assembler-times {vcvt\.f16\.u16\tq[0-9]+, q[0-9]+} 2 } }
++ { dg-final { scan-assembler-times {vcvt\.f16\.u16\td[0-9]+, d[0-9]+, #1} 1 } }
++ { dg-final { scan-assembler-times {vcvt\.f16\.u16\tq[0-9]+, q[0-9]+, #1} 1 } } */
++
++VCVT_TEST (vcvt, _s16_f16, int, float)
++VCVT_N_TEST (vcvt, _s16_f16, int, float)
++/* { dg-final { scan-assembler-times {vcvt\.s16\.f16\td[0-9]+, d[0-9]+} 2 } }
++ { dg-final { scan-assembler-times {vcvt\.s16\.f16\tq[0-9]+, q[0-9]+} 2 } }
++ { dg-final { scan-assembler-times {vcvt\.s16\.f16\td[0-9]+, d[0-9]+, #1} 1 } }
++ { dg-final { scan-assembler-times {vcvt\.s16\.f16\tq[0-9]+, q[0-9]+, #1} 1 } } */
++
++VCVT_TEST (vcvt, _u16_f16, uint, float)
++VCVT_N_TEST (vcvt, _u16_f16, uint, float)
++/* { dg-final { scan-assembler-times {vcvt\.u16\.f16\td[0-9]+, d[0-9]+} 2 } }
++ { dg-final { scan-assembler-times {vcvt\.u16\.f16\tq[0-9]+, q[0-9]+} 2 } }
++ { dg-final { scan-assembler-times {vcvt\.u16\.f16\td[0-9]+, d[0-9]+, #1} 1 } }
++ { dg-final { scan-assembler-times {vcvt\.u16\.f16\tq[0-9]+, q[0-9]+, #1} 1 } } */
++
++VCVT_TEST (vcvta, _s16_f16, int, float)
++/* { dg-final { scan-assembler-times {vcvta\.s16\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcvta\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } }
++*/
++
++VCVT_TEST (vcvta, _u16_f16, uint, float)
++/* { dg-final { scan-assembler-times {vcvta\.u16\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcvta\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } }
++*/
++
++VCVT_TEST (vcvtm, _s16_f16, int, float)
++/* { dg-final { scan-assembler-times {vcvtm\.s16\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcvtm\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } }
++*/
++
++VCVT_TEST (vcvtm, _u16_f16, uint, float)
++/* { dg-final { scan-assembler-times {vcvtm\.u16\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcvtm\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } }
++*/
++
++VCVT_TEST (vcvtn, _s16_f16, int, float)
++/* { dg-final { scan-assembler-times {vcvtn\.s16\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcvtn\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } }
++*/
++
++VCVT_TEST (vcvtn, _u16_f16, uint, float)
++/* { dg-final { scan-assembler-times {vcvtn\.u16\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcvtn\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } }
++*/
++
++VCVT_TEST (vcvtp, _s16_f16, int, float)
++/* { dg-final { scan-assembler-times {vcvtp\.s16\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcvtp\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } }
++*/
++
++VCVT_TEST (vcvtp, _u16_f16, uint, float)
++/* { dg-final { scan-assembler-times {vcvtp\.u16\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcvtp\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } }
++*/
++
++UNOP_TEST (vabs)
++/* { dg-final { scan-assembler-times {vabs\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vabs\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++UNOP_TEST (vneg)
++/* { dg-final { scan-assembler-times {vneg\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vneg\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++UNOP_TEST (vrecpe)
++/* { dg-final { scan-assembler-times {vrecpe\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrecpe\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++UNOP_TEST (vrnd)
++/* { dg-final { scan-assembler-times {vrintz\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrintz\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++UNOP_TEST (vrnda)
++/* { dg-final { scan-assembler-times {vrinta\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrinta\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++UNOP_TEST (vrndm)
++/* { dg-final { scan-assembler-times {vrintm\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrintm\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++UNOP_TEST (vrndn)
++/* { dg-final { scan-assembler-times {vrintn\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrintn\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++UNOP_TEST (vrndp)
++/* { dg-final { scan-assembler-times {vrintp\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrintp\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++UNOP_TEST (vrndx)
++/* { dg-final { scan-assembler-times {vrintx\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrintx\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++UNOP_TEST (vrsqrte)
++/* { dg-final { scan-assembler-times {vrsqrte\.f16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrsqrte\.f16\tq[0-9]+, q[0-9]+} 1 } } */
++
++BINOP_TEST (vadd)
++/* { dg-final { scan-assembler-times {vadd\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vadd\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++BINOP_TEST (vabd)
++/* { dg-final { scan-assembler-times {vabd\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vabd\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++VCMP2_TEST (vcage)
++/* { dg-final { scan-assembler-times {vacge\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vacge\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++VCMP2_TEST (vcagt)
++/* { dg-final { scan-assembler-times {vacgt\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vacgt\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++VCMP2_TEST (vcale)
++/* { dg-final { scan-assembler-times {vacle\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vacle\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++VCMP2_TEST (vcalt)
++/* { dg-final { scan-assembler-times {vaclt\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vaclt\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++VCMP2_TEST (vceq)
++/* { dg-final { scan-assembler-times {vceq\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vceq\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++VCMP2_TEST (vcge)
++/* { dg-final { scan-assembler-times {vcge\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcge\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++VCMP2_TEST (vcgt)
++/* { dg-final { scan-assembler-times {vcgt\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcgt\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++VCMP2_TEST (vcle)
++/* { dg-final { scan-assembler-times {vcle\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vcle\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++VCMP2_TEST (vclt)
++/* { dg-final { scan-assembler-times {vclt\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vclt\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++BINOP_TEST (vmax)
++/* { dg-final { scan-assembler-times {vmax\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vmax\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++BINOP_TEST (vmin)
++/* { dg-final { scan-assembler-times {vmin\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vmin\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++BINOP_TEST (vmaxnm)
++/* { dg-final { scan-assembler-times {vmaxnm\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vmaxnm\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++BINOP_TEST (vminnm)
++/* { dg-final { scan-assembler-times {vminnm\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vminnm\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++BINOP_TEST (vmul)
++/* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 3 } }
++ { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++BINOP_LANE_TEST (vmul, 2)
++/* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+\[2\]} 1 } }
++ { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, d[0-9]+\[2\]} 1 } } */
++BINOP_N_TEST (vmul)
++/* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+\[0\]} 1 } }
++ { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, d[0-9]+\[0\]} 1 } }*/
++
++float16x4_t
++test_vpadd_16x4 (float16x4_t a, float16x4_t b)
++{
++ return vpadd_f16 (a, b);
++}
++/* { dg-final { scan-assembler-times {vpadd\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */
++
++float16x4_t
++test_vpmax_16x4 (float16x4_t a, float16x4_t b)
++{
++ return vpmax_f16 (a, b);
++}
++/* { dg-final { scan-assembler-times {vpmax\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */
++
++float16x4_t
++test_vpmin_16x4 (float16x4_t a, float16x4_t b)
++{
++ return vpmin_f16 (a, b);
++}
++/* { dg-final { scan-assembler-times {vpmin\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */
++
++BINOP_TEST (vsub)
++/* { dg-final { scan-assembler-times {vsub\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vsub\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++BINOP_TEST (vrecps)
++/* { dg-final { scan-assembler-times {vrecps\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrecps\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++BINOP_TEST (vrsqrts)
++/* { dg-final { scan-assembler-times {vrsqrts\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrsqrts\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++TERNOP_TEST (vfma)
++/* { dg-final { scan-assembler-times {vfma\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vfma\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++TERNOP_TEST (vfms)
++/* { dg-final { scan-assembler-times {vfms\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vfms\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++float16x4_t
++test_vmov_n_f16 (float16_t a)
++{
++ return vmov_n_f16 (a);
++}
++
++float16x4_t
++test_vdup_n_f16 (float16_t a)
++{
++ return vdup_n_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vdup\.16\td[0-9]+, r[0-9]+} 2 } } */
++
++float16x8_t
++test_vmovq_n_f16 (float16_t a)
++{
++ return vmovq_n_f16 (a);
++}
++
++float16x8_t
++test_vdupq_n_f16 (float16_t a)
++{
++ return vdupq_n_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vdup\.16\tq[0-9]+, r[0-9]+} 2 } } */
++
++float16x4_t
++test_vdup_lane_f16 (float16x4_t a)
++{
++ return vdup_lane_f16 (a, 1);
++}
++/* { dg-final { scan-assembler-times {vdup\.16\td[0-9]+, d[0-9]+\[1\]} 1 } } */
++
++float16x8_t
++test_vdupq_lane_f16 (float16x4_t a)
++{
++ return vdupq_lane_f16 (a, 1);
++}
++/* { dg-final { scan-assembler-times {vdup\.16\tq[0-9]+, d[0-9]+\[1\]} 1 } } */
++
++float16x4_t
++test_vext_f16 (float16x4_t a, float16x4_t b)
++{
++ return vext_f16 (a, b, 1);
++}
++/* { dg-final { scan-assembler-times {vext\.16\td[0-9]+, d[0-9]+, d[0-9]+, #1} 1 } } */
++
++float16x8_t
++test_vextq_f16 (float16x8_t a, float16x8_t b)
++{
++ return vextq_f16 (a, b, 1);
++}
++/* { dg-final { scan-assembler-times {vext\.16\tq[0-9]+, q[0-9]+, q[0-9]+, #1} 1 } } */
++
++UNOP_TEST (vrev64)
++/* { dg-final { scan-assembler-times {vrev64\.16\td[0-9]+, d[0-9]+} 1 } }
++ { dg-final { scan-assembler-times {vrev64\.16\tq[0-9]+, q[0-9]+} 1 } } */
++
++float16x4_t
++test_vbsl16x4 (uint16x4_t a, float16x4_t b, float16x4_t c)
++{
++ return vbsl_f16 (a, b, c);
++}
++/* { dg-final { scan-assembler-times {vbsl\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */
++
++float16x8_t
++test_vbslq16x8 (uint16x8_t a, float16x8_t b, float16x8_t c)
++{
++ return vbslq_f16 (a, b, c);
++}
++/*{ dg-final { scan-assembler-times {vbsl\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */
++
++float16x4x2_t
++test_vzip16x4 (float16x4_t a, float16x4_t b)
++{
++ return vzip_f16 (a, b);
++}
++/* { dg-final { scan-assembler-times {vzip\.16\td[0-9]+, d[0-9]+} 1 } } */
++
++float16x8x2_t
++test_vzipq16x8 (float16x8_t a, float16x8_t b)
++{
++ return vzipq_f16 (a, b);
++}
++/*{ dg-final { scan-assembler-times {vzip\.16\tq[0-9]+, q[0-9]+} 1 } } */
++
++float16x4x2_t
++test_vuzp16x4 (float16x4_t a, float16x4_t b)
++{
++ return vuzp_f16 (a, b);
++}
++/* { dg-final { scan-assembler-times {vuzp\.16\td[0-9]+, d[0-9]+} 1 } } */
++
++float16x8x2_t
++test_vuzpq16x8 (float16x8_t a, float16x8_t b)
++{
++ return vuzpq_f16 (a, b);
++}
++/*{ dg-final { scan-assembler-times {vuzp\.16\tq[0-9]+, q[0-9]+} 1 } } */
++
++float16x4x2_t
++test_vtrn16x4 (float16x4_t a, float16x4_t b)
++{
++ return vtrn_f16 (a, b);
++}
++/* { dg-final { scan-assembler-times {vtrn\.16\td[0-9]+, d[0-9]+} 1 } } */
++
++float16x8x2_t
++test_vtrnq16x8 (float16x8_t a, float16x8_t b)
++{
++ return vtrnq_f16 (a, b);
++}
++/*{ dg-final { scan-assembler-times {vtrn\.16\tq[0-9]+, q[0-9]+} 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-1.c
+@@ -0,0 +1,203 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++/* Test instructions generated for the FP16 scalar intrinsics. */
++#include <arm_fp16.h>
++
++#define MSTRCAT(L, str) L##str
++
++#define UNOP_TEST(insn) \
++ float16_t \
++ MSTRCAT (test_##insn, 16) (float16_t a) \
++ { \
++ return MSTRCAT (insn, h_f16) (a); \
++ }
++
++#define BINOP_TEST(insn) \
++ float16_t \
++ MSTRCAT (test_##insn, 16) (float16_t a, float16_t b) \
++ { \
++ return MSTRCAT (insn, h_f16) (a, b); \
++ }
++
++#define TERNOP_TEST(insn) \
++ float16_t \
++ MSTRCAT (test_##insn, 16) (float16_t a, float16_t b, float16_t c) \
++ { \
++ return MSTRCAT (insn, h_f16) (a, b, c); \
++ }
++
++float16_t
++test_vcvth_f16_s32 (int32_t a)
++{
++ return vcvth_f16_s32 (a);
++}
++
++float16_t
++test_vcvth_n_f16_s32 (int32_t a)
++{
++ return vcvth_n_f16_s32 (a, 1);
++}
++/* { dg-final { scan-assembler-times {vcvt\.f16\.s32\ts[0-9]+, s[0-9]+} 2 } } */
++/* { dg-final { scan-assembler-times {vcvt\.f16\.s32\ts[0-9]+, s[0-9]+, #1} 1 } } */
++
++float16_t
++test_vcvth_f16_u32 (uint32_t a)
++{
++ return vcvth_f16_u32 (a);
++}
++
++float16_t
++test_vcvth_n_f16_u32 (uint32_t a)
++{
++ return vcvth_n_f16_u32 (a, 1);
++}
++
++/* { dg-final { scan-assembler-times {vcvt\.f16\.u32\ts[0-9]+, s[0-9]+} 2 } } */
++/* { dg-final { scan-assembler-times {vcvt\.f16\.u32\ts[0-9]+, s[0-9]+, #1} 1 } } */
++
++uint32_t
++test_vcvth_u32_f16 (float16_t a)
++{
++ return vcvth_u32_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vcvt\.u32\.f16\ts[0-9]+, s[0-9]+} 2 } } */
++
++uint32_t
++test_vcvth_n_u32_f16 (float16_t a)
++{
++ return vcvth_n_u32_f16 (a, 1);
++}
++/* { dg-final { scan-assembler-times {vcvt\.u32\.f16\ts[0-9]+, s[0-9]+, #1} 1 } } */
++
++int32_t
++test_vcvth_s32_f16 (float16_t a)
++{
++ return vcvth_s32_f16 (a);
++}
++
++int32_t
++test_vcvth_n_s32_f16 (float16_t a)
++{
++ return vcvth_n_s32_f16 (a, 1);
++}
++
++/* { dg-final { scan-assembler-times {vcvt\.s32\.f16\ts[0-9]+, s[0-9]+} 2 } } */
++/* { dg-final { scan-assembler-times {vcvt\.s32\.f16\ts[0-9]+, s[0-9]+, #1} 1 } } */
++
++int32_t
++test_vcvtah_s32_f16 (float16_t a)
++{
++ return vcvtah_s32_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vcvta\.s32\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++uint32_t
++test_vcvtah_u32_f16 (float16_t a)
++{
++ return vcvtah_u32_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vcvta\.u32\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++int32_t
++test_vcvtmh_s32_f16 (float16_t a)
++{
++ return vcvtmh_s32_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vcvtm\.s32\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++uint32_t
++test_vcvtmh_u32_f16 (float16_t a)
++{
++ return vcvtmh_u32_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vcvtm\.u32\.f16\ts[0-9]+, s[0-9]+} 1 } }
++ */
++
++int32_t
++test_vcvtnh_s32_f16 (float16_t a)
++{
++ return vcvtnh_s32_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vcvtn\.s32\.f16\ts[0-9]+, s[0-9]+} 1 } }
++ */
++
++uint32_t
++test_vcvtnh_u32_f16 (float16_t a)
++{
++ return vcvtnh_u32_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vcvtn\.u32\.f16\ts[0-9]+, s[0-9]+} 1 } }
++ */
++
++int32_t
++test_vcvtph_s32_f16 (float16_t a)
++{
++ return vcvtph_s32_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vcvtp\.s32\.f16\ts[0-9]+, s[0-9]+} 1 } }
++ */
++
++uint32_t
++test_vcvtph_u32_f16 (float16_t a)
++{
++ return vcvtph_u32_f16 (a);
++}
++/* { dg-final { scan-assembler-times {vcvtp\.u32\.f16\ts[0-9]+, s[0-9]+} 1 } }
++ */
++
++UNOP_TEST (vabs)
++/* { dg-final { scan-assembler-times {vabs\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++UNOP_TEST (vneg)
++/* { dg-final { scan-assembler-times {vneg\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++UNOP_TEST (vrnd)
++/* { dg-final { scan-assembler-times {vrintz\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++UNOP_TEST (vrndi)
++/* { dg-final { scan-assembler-times {vrintr\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++UNOP_TEST (vrnda)
++/* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++UNOP_TEST (vrndm)
++/* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++UNOP_TEST (vrndn)
++/* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++UNOP_TEST (vrndp)
++/* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++UNOP_TEST (vrndx)
++/* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++UNOP_TEST (vsqrt)
++/* { dg-final { scan-assembler-times {vsqrt\.f16\ts[0-9]+, s[0-9]+} 1 } } */
++
++BINOP_TEST (vadd)
++/* { dg-final { scan-assembler-times {vadd\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++BINOP_TEST (vdiv)
++/* { dg-final { scan-assembler-times {vdiv\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++BINOP_TEST (vmaxnm)
++/* { dg-final { scan-assembler-times {vmaxnm\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++BINOP_TEST (vminnm)
++/* { dg-final { scan-assembler-times {vminnm\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++BINOP_TEST (vmul)
++/* { dg-final { scan-assembler-times {vmul\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++BINOP_TEST (vsub)
++/* { dg-final { scan-assembler-times {vsub\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++TERNOP_TEST (vfma)
++/* { dg-final { scan-assembler-times {vfma\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++TERNOP_TEST (vfms)
++/* { dg-final { scan-assembler-times {vfms\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-2.c
+@@ -0,0 +1,71 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */
++/* { dg-options "-O2 -std=c11" } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++/* Test compiler use of FP16 instructions. */
++#include <arm_fp16.h>
++
++float16_t
++test_mov_imm_1 (float16_t a)
++{
++ return 1.0;
++}
++
++float16_t
++test_mov_imm_2 (float16_t a)
++{
++ float16_t b = 1.0;
++ return b;
++}
++
++float16_t
++test_vmov_imm_3 (float16_t a)
++{
++ float16_t b = 1.0;
++ return vaddh_f16 (a, b);
++}
++
++float16_t
++test_vmov_imm_4 (float16_t a)
++{
++ return vaddh_f16 (a, 1.0);
++}
++
++/* { dg-final { scan-assembler-times {vmov.f16\ts[0-9]+, #1\.0e\+0} 4 } }
++ { dg-final { scan-assembler-times {vadd.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 2 } } */
++
++float16_t
++test_vmla_1 (float16_t a, float16_t b, float16_t c)
++{
++ return vaddh_f16 (vmulh_f16 (a, b), c);
++}
++/* { dg-final { scan-assembler-times {vmla\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++float16_t
++test_vmla_2 (float16_t a, float16_t b, float16_t c)
++{
++ return vsubh_f16 (vmulh_f16 (vnegh_f16 (a), b), c);
++}
++/* { dg-final { scan-assembler-times {vnmla\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
++float16_t
++test_vmls_1 (float16_t a, float16_t b, float16_t c)
++{
++ return vsubh_f16 (c, vmulh_f16 (a, b));
++}
++
++float16_t
++test_vmls_2 (float16_t a, float16_t b, float16_t c)
++{
++ return vsubh_f16 (a, vmulh_f16 (b, c));
++}
++/* { dg-final { scan-assembler-times {vmls\.f16} 2 } } */
++
++float16_t
++test_vnmls_1 (float16_t a, float16_t b, float16_t c)
++{
++ return vsubh_f16 (vmulh_f16 (a, b), c);
++}
++/* { dg-final { scan-assembler-times {vnmls\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-comp-swap-release-acquire-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2 -fno-ipa-icf" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-comp-swap-release-acquire.x"
++
++/* { dg-final { scan-assembler-times "ldaex" 4 } } */
++/* { dg-final { scan-assembler-times "stlex" 4 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-comp-swap-release-acquire-2.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2 -fno-ipa-icf" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-comp-swap-release-acquire.x"
++
++/* { dg-final { scan-assembler-times "ldaex" 4 } } */
++/* { dg-final { scan-assembler-times "stlex" 4 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-comp-swap-release-acquire-3.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2 -fno-ipa-icf" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-comp-swap-release-acquire.x"
++
++/* { dg-final { scan-assembler-times "ldaex" 4 } } */
++/* { dg-final { scan-assembler-times "stlex" 4 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-comp-swap-release-acquire.c
++++ b/src//dev/null
+@@ -1,10 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2 -fno-ipa-icf" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-comp-swap-release-acquire.x"
+-
+-/* { dg-final { scan-assembler-times "ldaex" 4 } } */
+-/* { dg-final { scan-assembler-times "stlex" 4 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-acq_rel-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-op-acq_rel.x"
++
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-acq_rel-2.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-op-acq_rel.x"
++
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-acq_rel-3.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-op-acq_rel.x"
++
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-op-acq_rel.c
++++ b/src//dev/null
+@@ -1,10 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-op-acq_rel.x"
+-
+-/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-acquire-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-op-acquire.x"
++
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-acquire-2.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-op-acquire.x"
++
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-acquire-3.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-op-acquire.x"
++
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-op-acquire.c
++++ b/src//dev/null
+@@ -1,10 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-op-acquire.x"
+-
+-/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-char-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-op-char.x"
++
++/* { dg-final { scan-assembler-times "ldrexb\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strexb\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-char-2.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-op-char.x"
++
++/* { dg-final { scan-assembler-times "ldrexb\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strexb\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-char-3.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-op-char.x"
++
++/* { dg-final { scan-assembler-times "ldrexb\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strexb\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-op-char.c
++++ b/src//dev/null
+@@ -1,10 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-op-char.x"
+-
+-/* { dg-final { scan-assembler-times "ldrexb\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-times "strexb\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-consume-1.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-op-consume.x"
++
++/* Scan for ldaex is a PR59448 consume workaround. */
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-consume-2.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-op-consume.x"
++
++/* Scan for ldaex is a PR59448 consume workaround. */
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-consume-3.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-op-consume.x"
++
++/* Scan for ldaex is a PR59448 consume workaround. */
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-op-consume.c
++++ b/src//dev/null
+@@ -1,11 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-op-consume.x"
+-
+-/* Scan for ldaex is a PR59448 consume workaround. */
+-/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-int-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-op-int.x"
++
++/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-int-2.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-op-int.x"
++
++/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-int-3.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-op-int.x"
++
++/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-op-int.c
++++ b/src//dev/null
+@@ -1,10 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-op-int.x"
+-
+-/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-relaxed-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-op-relaxed.x"
++
++/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-relaxed-2.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-op-relaxed.x"
++
++/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-relaxed-3.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-op-relaxed.x"
++
++/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-op-relaxed.c
++++ b/src//dev/null
+@@ -1,10 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-op-relaxed.x"
+-
+-/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-times "strex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-release-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-op-release.x"
++
++/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-release-2.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-op-release.x"
++
++/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-release-3.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-op-release.x"
++
++/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-op-release.c
++++ b/src//dev/null
+@@ -1,10 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-op-release.x"
+-
+-/* { dg-final { scan-assembler-times "ldrex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-op-seq_cst.x"
++
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst-2.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-op-seq_cst.x"
++
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst-3.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-op-seq_cst.x"
++
++/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst.c
++++ b/src//dev/null
+@@ -1,10 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-op-seq_cst.x"
+-
+-/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-times "stlex\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-short-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8a_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8a } */
++
++#include "../aarch64/atomic-op-short.x"
++
++/* { dg-final { scan-assembler-times "ldrexh\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strexh\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-short-2.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_main } */
++
++#include "../aarch64/atomic-op-short.x"
++
++/* { dg-final { scan-assembler-times "ldrexh\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strexh\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-short-3.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v8m_base } */
++
++#include "../aarch64/atomic-op-short.x"
++
++/* { dg-final { scan-assembler-times "ldrexh\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-times "strexh\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
++/* { dg-final { scan-assembler-not "dmb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/atomic-op-short.c
++++ b/src//dev/null
+@@ -1,10 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_arch_v8a_ok } */
+-/* { dg-options "-O2" } */
+-/* { dg-add-options arm_arch_v8a } */
+-
+-#include "../aarch64/atomic-op-short.x"
+-
+-/* { dg-final { scan-assembler-times "ldrexh\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-times "strexh\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */
+-/* { dg-final { scan-assembler-not "dmb" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/attr-fp16-arith-1.c
+@@ -0,0 +1,58 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_v8_2a_fp16_scalar } */
++
++/* Reset fpu to a value compatible with the next pragmas. */
++#pragma GCC target ("fpu=vfp")
++
++#pragma GCC push_options
++#pragma GCC target ("fpu=fp-armv8")
++
++#ifndef __ARM_FEATURE_FP16_SCALAR_ARITHMETIC
++#error __ARM_FEATURE_FP16_SCALAR_ARITHMETIC not defined.
++#endif
++
++#pragma GCC push_options
++#pragma GCC target ("fpu=neon-fp-armv8")
++
++#ifndef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
++#error __ARM_FEATURE_FP16_VECTOR_ARITHMETIC not defined.
++#endif
++
++#ifndef __ARM_NEON
++#error __ARM_NEON not defined.
++#endif
++
++#if !defined (__ARM_FP) || !(__ARM_FP & 0x2)
++#error Invalid value for __ARM_FP
++#endif
++
++#include "arm_neon.h"
++
++float16_t
++foo (float16x4_t b)
++{
++ float16x4_t a = {2.0, 3.0, 4.0, 5.0};
++ float16x4_t res = vadd_f16 (a, b);
++
++ return res[0];
++}
++
++/* { dg-final { scan-assembler "vadd\\.f16\td\[0-9\]+, d\[0-9\]+" } } */
++
++#pragma GCC pop_options
++
++/* Check that the FP version is correctly reset to mfpu=fp-armv8. */
++
++#if !defined (__ARM_FP) || !(__ARM_FP & 0x2)
++#error __ARM_FP should record FP16 support.
++#endif
++
++#pragma GCC pop_options
++
++/* Check that the FP version is correctly reset to mfpu=vfp. */
++
++#if !defined (__ARM_FP) || (__ARM_FP & 0x2)
++#error Unexpected value for __ARM_FP.
++#endif
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/builtin_saddl.c
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++extern void overflow_handler ();
++
++long overflow_add (long x, long y)
++{
++ long r;
++
++ int ovr = __builtin_saddl_overflow (x, y, &r);
++ if (ovr)
++ overflow_handler ();
++
++ return r;
++}
++
++/* { dg-final { scan-assembler "adds" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/builtin_saddll.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++extern void overflow_handler ();
++
++long long overflow_add (long long x, long long y)
++{
++ long long r;
++
++ int ovr = __builtin_saddll_overflow (x, y, &r);
++ if (ovr)
++ overflow_handler ();
++
++ return r;
++}
++
++/* { dg-final { scan-assembler "adds" } } */
++/* { dg-final { scan-assembler "adcs" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/builtin_ssubl.c
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++extern void overflow_handler ();
++
++long overflow_sub (long x, long y)
++{
++ long r;
++
++ int ovr = __builtin_ssubl_overflow (x, y, &r);
++ if (ovr)
++ overflow_handler ();
++
++ return r;
++}
++
++/* { dg-final { scan-assembler "subs" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/builtin_ssubll.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++extern void overflow_handler ();
++
++long long overflow_sub (long long x, long long y)
++{
++ long long r;
++
++ int ovr = __builtin_ssubll_overflow (x, y, &r);
++ if (ovr)
++ overflow_handler ();
++
++ return r;
++}
++
++/* { dg-final { scan-assembler "subs" } } */
++/* { dg-final { scan-assembler "sbcs" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/builtin_uaddl.c
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++extern void overflow_handler ();
++
++unsigned long overflow_add (unsigned long x, unsigned long y)
++{
++ unsigned long r;
++
++ int ovr = __builtin_uaddl_overflow (x, y, &r);
++ if (ovr)
++ overflow_handler ();
++
++ return r;
++}
++
++/* { dg-final { scan-assembler "adds" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/builtin_uaddll.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++extern void overflow_handler ();
++
++unsigned long long overflow_add (unsigned long long x, unsigned long long y)
++{
++ unsigned long long r;
++
++ int ovr = __builtin_uaddll_overflow (x, y, &r);
++ if (ovr)
++ overflow_handler ();
++
++ return r;
++}
++
++/* { dg-final { scan-assembler "adds" } } */
++/* { dg-final { scan-assembler "adcs" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/builtin_usubl.c
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++extern void overflow_handler ();
++
++unsigned long overflow_sub (unsigned long x, unsigned long y)
++{
++ unsigned long r;
++
++ int ovr = __builtin_usubl_overflow (x, y, &r);
++ if (ovr)
++ overflow_handler ();
++
++ return r;
++}
++
++/* { dg-final { scan-assembler "subs" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/builtin_usubll.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++extern void overflow_handler ();
++
++unsigned long long overflow_sub (unsigned long long x, unsigned long long y)
++{
++ unsigned long long r;
++
++ int ovr = __builtin_usubll_overflow (x, y, &r);
++ if (ovr)
++ overflow_handler ();
++
++ return r;
++}
++
++/* { dg-final { scan-assembler "subs" } } */
++/* { dg-final { scan-assembler "sbcs" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cbz.c
+@@ -0,0 +1,12 @@
++/* { dg-do compile {target { arm_thumb2 || arm_thumb1_cbz_ok } } } */
++/* { dg-options "-O2" } */
++
++int
++foo (int a, int *b)
++{
++ if (a)
++ *b = 1;
++ return 0;
++}
++
++/* { dg-final { scan-assembler-times "cbz\\tr\\d" 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/bitfield-4.c
+@@ -0,0 +1,57 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int b:5;
++ unsigned int c:11, :0, d:8;
++ struct { unsigned int ee:2; } e;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++extern void foo (test_st st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++ r.values.v4 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "mov\tip, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65535" } } */
++/* { dg-final { scan-assembler "movt\tr4, 255" } } */
++/* { dg-final { scan-assembler "ands\tr0, r4" } } */
++/* { dg-final { scan-assembler "movs\tr4, #255" } } */
++/* { dg-final { scan-assembler "ands\tr1, r4" } } */
++/* { dg-final { scan-assembler "movs\tr4, #3" } } */
++/* { dg-final { scan-assembler "ands\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr4, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/bitfield-5.c
+@@ -0,0 +1,53 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned short b :5;
++ unsigned char c;
++ unsigned short d :11;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "mov\tip, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #8191" } } */
++/* { dg-final { scan-assembler "movt\tr4, 255" } } */
++/* { dg-final { scan-assembler "ands\tr0, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #2047" } } */
++/* { dg-final { scan-assembler "ands\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr4, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr2, r4" } } */
++/* { dg-final { scan-assembler "movs\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/bitfield-6.c
+@@ -0,0 +1,63 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int b : 3;
++ unsigned int c : 14;
++ unsigned int d : 1;
++ struct {
++ unsigned int ee : 2;
++ unsigned short ff : 15;
++ } e;
++ unsigned char g : 1;
++ unsigned char : 4;
++ unsigned char h : 3;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++ r.values.v4 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "mov\tip, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65535" } } */
++/* { dg-final { scan-assembler "movt\tr4, 1023" } } */
++/* { dg-final { scan-assembler "ands\tr0, r4" } } */
++/* { dg-final { scan-assembler "movs\tr4, #3" } } */
++/* { dg-final { scan-assembler "movt\tr4, 32767" } } */
++/* { dg-final { scan-assembler "ands\tr1, r4" } } */
++/* { dg-final { scan-assembler "movs\tr4, #255" } } */
++/* { dg-final { scan-assembler "ands\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr4, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/bitfield-7.c
+@@ -0,0 +1,54 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned short b :5;
++ unsigned char c;
++ unsigned short d :11;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++
++/* { dg-final { scan-assembler "mov\tip, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #8191" } } */
++/* { dg-final { scan-assembler "movt\tr4, 255" } } */
++/* { dg-final { scan-assembler "ands\tr0, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #2047" } } */
++/* { dg-final { scan-assembler "ands\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr4, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr2, r4" } } */
++/* { dg-final { scan-assembler "movs\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/bitfield-8.c
+@@ -0,0 +1,57 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int :0;
++ unsigned int b :1;
++ unsigned short :0;
++ unsigned short c;
++ unsigned int :0;
++ unsigned int d :21;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "mov\tip, r4" } } */
++/* { dg-final { scan-assembler "movs\tr4, #255" } } */
++/* { dg-final { scan-assembler "ands\tr0, r4" } } */
++/* { dg-final { scan-assembler "movs\tr4, #1" } } */
++/* { dg-final { scan-assembler "movt\tr4, 65535" } } */
++/* { dg-final { scan-assembler "ands\tr1, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65535" } } */
++/* { dg-final { scan-assembler "movt\tr4, 31" } } */
++/* { dg-final { scan-assembler "ands\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr4, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/bitfield-9.c
+@@ -0,0 +1,56 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ char a:3;
++} test_st3;
++
++typedef struct
++{
++ char a:3;
++} test_st2;
++
++typedef struct
++{
++ test_st2 st2;
++ test_st3 st3;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "mov\tip, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #1799" } } */
++/* { dg-final { scan-assembler "ands\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr4, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr1, r4" } } */
++/* { dg-final { scan-assembler "movs\tr2, r4" } } */
++/* { dg-final { scan-assembler "movs\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/bitfield-and-union-1.c
+@@ -0,0 +1,96 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned short a :11;
++} test_st_4;
++
++typedef union
++{
++ char a;
++ test_st_4 st4;
++}test_un_2;
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int :0;
++ unsigned int b :1;
++ unsigned short :0;
++ unsigned short c;
++ unsigned int :0;
++ unsigned int d :21;
++} test_st_3;
++
++typedef struct
++{
++ unsigned char a :3;
++ unsigned int b :13;
++ test_un_2 un2;
++} test_st_2;
++
++typedef union
++{
++ test_st_2 st2;
++ test_st_3 st3;
++}test_un_1;
++
++typedef struct
++{
++ unsigned char a :2;
++ unsigned char :0;
++ unsigned short b :5;
++ unsigned char :0;
++ unsigned char c :4;
++ test_un_1 un1;
++} test_st_1;
++
++typedef union
++{
++ test_st_1 st1;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st_1;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st_1);
++
++int
++main (void)
++{
++ read_st_1 r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++ r.values.v4 = 0xFFFFFFFF;
++
++ f (r.st1);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "mov\tip, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #7939" } } */
++/* { dg-final { scan-assembler "movt\tr4, 15" } } */
++/* { dg-final { scan-assembler "ands\tr0, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65535" } } */
++/* { dg-final { scan-assembler "movt\tr4, 2047" } } */
++/* { dg-final { scan-assembler "ands\tr1, r4" } } */
++/* { dg-final { scan-assembler "movs\tr4, #1" } } */
++/* { dg-final { scan-assembler "movt\tr4, 65535" } } */
++/* { dg-final { scan-assembler "ands\tr2, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65535" } } */
++/* { dg-final { scan-assembler "movt\tr4, 31" } } */
++/* { dg-final { scan-assembler "ands\tr3, r4" } } */
++/* { dg-final { scan-assembler "mov\tr4, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/cmse-11.c
+@@ -0,0 +1,22 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-add-options arm_arch_v8m_base } */
++/* { dg-options "-mcmse" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (int);
++
++int
++foo (int a)
++{
++ return bar (bar (a + 1));
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr1, r4" } } */
++/* { dg-final { scan-assembler "movs\tr2, r4" } } */
++/* { dg-final { scan-assembler "movs\tr3, r4" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/cmse-13.c
+@@ -0,0 +1,25 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-add-options arm_arch_v8m_base } */
++/* { dg-options "-mcmse" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (float, double);
++
++int
++foo (int a)
++{
++ return bar (1.0f, 2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler-not "movs\tr0, r4" } } */
++/* { dg-final { scan-assembler "\n\tmovs\tr1, r4" } } */
++/* { dg-final { scan-assembler-not "\n\tmovs\tr2, r4\n\tmovs\tr3, r4" } } */
++/* { dg-final { scan-assembler-not "vmov" } } */
++/* { dg-final { scan-assembler-not "vmsr" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/cmse-2.c
+@@ -0,0 +1,19 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-add-options arm_arch_v8m_base } */
++/* { dg-options "-mcmse" } */
++
++extern float bar (void);
++
++float __attribute__ ((cmse_nonsecure_entry))
++foo (void)
++{
++ return bar ();
++}
++/* { dg-final { scan-assembler "movs\tr1, r0" } } */
++/* { dg-final { scan-assembler "movs\tr2, r0" } } */
++/* { dg-final { scan-assembler "movs\tr3, r0" } } */
++/* { dg-final { scan-assembler "mov\tip, r0" } } */
++/* { dg-final { scan-assembler "mov\tlr, r0" } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvq," } } */
++/* { dg-final { scan-assembler "bxns" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/cmse-6.c
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-add-options arm_arch_v8m_base } */
++/* { dg-options "-mcmse" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (double);
++
++int
++foo (int a)
++{
++ return bar (2.0) + a + 1;
++}
++
++/* Remember dont clear r0 and r1, because we are passing the double parameter
++ * for bar in them. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr2, r4" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/softfp.c
+@@ -0,0 +1,29 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_base_ok } */
++/* { dg-add-options arm_arch_v8m_base } */
++/* { dg-options "-mcmse -mfloat-abi=softfp" } */
++
++double __attribute__ ((cmse_nonsecure_call)) (*bar) (float, double);
++
++double
++foo (double a)
++{
++ return bar (1.0f, 2.0) + a;
++}
++
++float __attribute__ ((cmse_nonsecure_entry))
++baz (float a, double b)
++{
++ return (float) bar (a, b);
++}
++
++/* Make sure we are not using FP instructions, since ARMv8-M Baseline does not
++ support such instructions. */
++/* { dg-final { scan-assembler-not "vmov" } } */
++/* { dg-final { scan-assembler-not "vmsr" } } */
++/* { dg-final { scan-assembler-not "vmrs" } } */
++
++/* Just double checking that we are still doing cmse though. */
++/* { dg-final { scan-assembler-not "vmrs" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/union-1.c
+@@ -0,0 +1,71 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a :2;
++ unsigned char :0;
++ unsigned short b :5;
++ unsigned char :0;
++ unsigned short c :3;
++ unsigned char :0;
++ unsigned int d :9;
++} test_st_1;
++
++typedef struct
++{
++ unsigned short a :7;
++ unsigned char :0;
++ unsigned char b :1;
++ unsigned char :0;
++ unsigned short c :6;
++} test_st_2;
++
++typedef union
++{
++ test_st_1 st_1;
++ test_st_2 st_2;
++}test_un;
++
++typedef union
++{
++ test_un un;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_un;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_un);
++
++int
++main (void)
++{
++ read_un r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++
++ f (r.un);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "mov\tip, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #8063" } } */
++/* { dg-final { scan-assembler "movt\tr4, 63" } } */
++/* { dg-final { scan-assembler "ands\tr0, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #511" } } */
++/* { dg-final { scan-assembler "ands\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr4, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr2, r4" } } */
++/* { dg-final { scan-assembler "movs\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/baseline/union-2.c
+@@ -0,0 +1,86 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a :2;
++ unsigned char :0;
++ unsigned short b :5;
++ unsigned char :0;
++ unsigned short c :3;
++ unsigned char :0;
++ unsigned int d :9;
++} test_st_1;
++
++typedef struct
++{
++ unsigned short a :7;
++ unsigned char :0;
++ unsigned char b :1;
++ unsigned char :0;
++ unsigned short c :6;
++} test_st_2;
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int :0;
++ unsigned int b :1;
++ unsigned short :0;
++ unsigned short c;
++ unsigned int :0;
++ unsigned int d :21;
++} test_st_3;
++
++typedef union
++{
++ test_st_1 st_1;
++ test_st_2 st_2;
++ test_st_3 st_3;
++}test_un;
++
++typedef union
++{
++ test_un un;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_un;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_un);
++
++int
++main (void)
++{
++ read_un r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++
++ f (r.un);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "mov\tip, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #8191" } } */
++/* { dg-final { scan-assembler "movt\tr4, 63" } } */
++/* { dg-final { scan-assembler "ands\tr0, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #511" } } */
++/* { dg-final { scan-assembler "movt\tr4, 65535" } } */
++/* { dg-final { scan-assembler "ands\tr1, r4" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65535" } } */
++/* { dg-final { scan-assembler "movt\tr4, 31" } } */
++/* { dg-final { scan-assembler "ands\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr4, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "movs\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/bitfield-1.c
+@@ -0,0 +1,39 @@
++/* { dg-do run } */
++/* { dg-options "--save-temps -mcmse -Wl,--section-start,.gnu.sgstubs=0x20400000" } */
++
++typedef struct
++{
++ unsigned short a : 6;
++ unsigned char b : 3;
++ unsigned char c;
++ unsigned short d : 8;
++} test_st;
++
++test_st __attribute__ ((cmse_nonsecure_entry)) foo (void)
++{
++ test_st t;
++ t.a = 63u;
++ t.b = 7u;
++ t.c = 255u;
++ t.d = 255u;
++ return t;
++}
++
++int
++main (void)
++{
++ test_st t;
++ t = foo ();
++ if (t.a != 63u
++ || t.b != 7u
++ || t.c != 255u
++ || t.d != 255u)
++ __builtin_abort ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tr1, #1855" } } */
++/* { dg-final { scan-assembler "movt\tr1, 65535" } } */
++/* { dg-final { scan-assembler "ands\tr0(, r0)?, r1" } } */
++/* { dg-final { scan-assembler "bxns" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/bitfield-2.c
+@@ -0,0 +1,36 @@
++/* { dg-do run } */
++/* { dg-options "--save-temps -mcmse -Wl,--section-start,.gnu.sgstubs=0x20400000" } */
++
++typedef struct
++{
++ short a : 7;
++ signed char b : 3;
++ short c : 11;
++} test_st;
++
++test_st __attribute__ ((cmse_nonsecure_entry)) foo (void)
++{
++ test_st t;
++ t.a = -64;
++ t.b = -4 ;
++ t.c = -1024;
++ return t;
++}
++
++int
++main (void)
++{
++ test_st t;
++ t = foo ();
++ if (t.a != -64
++ || t.b != -4
++ || t.c != -1024)
++ __builtin_abort ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tr1, #1919" } } */
++/* { dg-final { scan-assembler "movt\tr1, 2047" } } */
++/* { dg-final { scan-assembler "ands\tr0(, r0)?, r1" } } */
++/* { dg-final { scan-assembler "bxns" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/bitfield-3.c
+@@ -0,0 +1,37 @@
++/* { dg-do run } */
++/* { dg-options "--save-temps -mcmse -Wl,--section-start,.gnu.sgstubs=0x20400000" } */
++
++typedef struct
++{
++ short a;
++ signed char b : 2;
++ short : 1;
++ signed char c : 3;
++} test_st;
++
++test_st __attribute__ ((cmse_nonsecure_entry)) foo (void)
++{
++ test_st t;
++ t.a = -32768;
++ t.b = -2;
++ t.c = -4;
++ return t;
++}
++
++int
++main (void)
++{
++ test_st t;
++ t = foo ();
++ if (t.a != -32768
++ || t.b != -2
++ || t.c != -4)
++ __builtin_abort ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tr1, #65535" } } */
++/* { dg-final { scan-assembler "movt\tr1, 63" } } */
++/* { dg-final { scan-assembler "ands\tr0(, r0)?, r1" } } */
++/* { dg-final { scan-assembler "bxns" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/cmse-1.c
+@@ -0,0 +1,106 @@
++/* { dg-do compile } */
++/* { dg-options "-Os -mcmse -fdump-rtl-expand" } */
++
++#include <arm_cmse.h>
++
++extern int a;
++extern int bar (void);
++
++int foo (char * p)
++{
++ cmse_address_info_t cait;
++
++ cait = cmse_TT (&a);
++ if (cait.flags.mpu_region)
++ a++;
++
++ cait = cmse_TT_fptr (&bar);
++ if (cait.flags.mpu_region)
++ a+= bar ();
++
++ cait = cmse_TTA (&a);
++ if (cait.flags.mpu_region)
++ a++;
++
++ cait = cmse_TTA_fptr (&bar);
++ if (cait.flags.mpu_region)
++ a+= bar ();
++
++ cait = cmse_TTT (&a);
++ if (cait.flags.mpu_region)
++ a++;
++
++ cait = cmse_TTT_fptr (&bar);
++ if (cait.flags.mpu_region)
++ a+= bar ();
++
++ cait = cmse_TTAT (&a);
++ if (cait.flags.mpu_region)
++ a++;
++
++ cait = cmse_TTAT_fptr (&bar);
++ if (cait.flags.mpu_region)
++ a+= bar ();
++
++ p = (char *) cmse_check_address_range ((void *) p, sizeof (char), 0);
++ p = (char *) cmse_check_address_range ((void *) p, sizeof (char),
++ CMSE_MPU_UNPRIV);
++ p = (char *) cmse_check_address_range ((void *) p, sizeof (char),
++ CMSE_MPU_READWRITE);
++ p = (char *) cmse_check_address_range ((void *) p, sizeof (char),
++ CMSE_MPU_UNPRIV | CMSE_MPU_READ);
++ p = (char *) cmse_check_address_range ((void *) p, sizeof (char),
++ CMSE_AU_NONSECURE
++ | CMSE_MPU_NONSECURE);
++ p = (char *) cmse_check_address_range ((void *) p, sizeof (char),
++ CMSE_NONSECURE | CMSE_MPU_UNPRIV);
++
++ p = (char *) cmse_check_pointed_object (p, CMSE_NONSECURE | CMSE_MPU_UNPRIV);
++
++ return a;
++}
++/* { dg-final { scan-assembler-times "\ttt " 2 } } */
++/* { dg-final { scan-assembler-times "ttt " 2 } } */
++/* { dg-final { scan-assembler-times "tta " 2 } } */
++/* { dg-final { scan-assembler-times "ttat " 2 } } */
++/* { dg-final { scan-assembler-times "bl.cmse_check_address_range" 7 } } */
++/* { dg-final { scan-assembler-not "cmse_check_pointed_object" } } */
++
++int __attribute__ ((cmse_nonsecure_entry))
++baz (void)
++{
++ return cmse_nonsecure_caller ();
++}
++
++typedef int __attribute__ ((cmse_nonsecure_call)) (int_nsfunc_t) (void);
++
++int default_callback (void)
++{
++ return 0;
++}
++
++int_nsfunc_t * fp = (int_nsfunc_t *) default_callback;
++
++void __attribute__ ((cmse_nonsecure_entry))
++qux (int_nsfunc_t * callback)
++{
++ fp = cmse_nsfptr_create (callback);
++}
++
++int call_callback (void)
++{
++ if (cmse_is_nsfptr (fp))
++ return fp ();
++ else
++ return default_callback ();
++}
++/* { dg-final { scan-assembler "baz:" } } */
++/* { dg-final { scan-assembler "__acle_se_baz:" } } */
++/* { dg-final { scan-assembler "qux:" } } */
++/* { dg-final { scan-assembler "__acle_se_qux:" } } */
++/* { dg-final { scan-assembler-not "\tcmse_nonsecure_caller" } } */
++/* { dg-final { scan-rtl-dump "and.*reg.*const_int 1" expand } } */
++/* { dg-final { scan-assembler "bic" } } */
++/* { dg-final { scan-assembler "push\t\{r4, r5, r6" } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvq" } } */
++/* { dg-final { scan-assembler-times "bl\\s+__gnu_cmse_nonsecure_call" 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/cmse-10.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++void
++foo (void) {}
++
++/* { dg-final { scan-assembler-not "bxns" } } */
++/* { dg-final { scan-assembler "foo:" } } */
++/* { dg-final { scan-assembler-not "__acle_se_foo:" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/cmse-12.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++#include <arm_cmse.h>
++
++char *
++foo (char * p)
++{
++ if (!cmse_is_nsfptr (p))
++ return cmse_nsfptr_create (p);
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler-not "cmse_is_nsfptr" } } */
++/* { dg-final { scan-assembler-not "cmse_nsfptr_create" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/cmse-14.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (void);
++
++int foo (void)
++{
++ return bar ();
++}
++
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++/* { dg-final { scan-assembler-not "b\[^ y\n\]*\\s+bar" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/cmse-15.c
+@@ -0,0 +1,72 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*ns_foo) (void);
++int (*s_bar) (void);
++int __attribute__ ((cmse_nonsecure_call)) (**ns_foo2) (void);
++int (**s_bar2) (void);
++
++typedef int __attribute__ ((cmse_nonsecure_call)) ns_foo_t (void);
++typedef int s_bar_t (void);
++typedef int __attribute__ ((cmse_nonsecure_call)) (* ns_foo_ptr) (void);
++typedef int (*s_bar_ptr) (void);
++
++int nonsecure0 (ns_foo_t * ns_foo_p)
++{
++ return ns_foo_p ();
++}
++
++int nonsecure1 (ns_foo_t ** ns_foo_p)
++{
++ return (*ns_foo_p) ();
++}
++
++int nonsecure2 (ns_foo_ptr ns_foo_p)
++{
++ return ns_foo_p ();
++}
++int nonsecure3 (ns_foo_ptr * ns_foo_p)
++{
++ return (*ns_foo_p) ();
++}
++
++int secure0 (s_bar_t * s_bar_p)
++{
++ return s_bar_p ();
++}
++
++int secure1 (s_bar_t ** s_bar_p)
++{
++ return (*s_bar_p) ();
++}
++
++int secure2 (s_bar_ptr s_bar_p)
++{
++ return s_bar_p ();
++}
++
++int secure3 (s_bar_ptr * s_bar_p)
++{
++ return (*s_bar_p) ();
++}
++
++int nonsecure4 (void)
++{
++ return ns_foo ();
++}
++
++int nonsecure5 (void)
++{
++ return (*ns_foo2) ();
++}
++
++int secure4 (void)
++{
++ return s_bar ();
++}
++
++int secure5 (void)
++{
++ return (*s_bar2) ();
++}
++/* { dg-final { scan-assembler-times "bl\\s+__gnu_cmse_nonsecure_call" 6 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/cmse-3.c
+@@ -0,0 +1,45 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++struct span {
++ int a, b;
++};
++struct span2 {
++ float a, b, c, d;
++};
++
++union test_union
++{
++ long long a;
++ int b;
++ struct span2 c;
++} test_union;
++
++void __attribute__ ((cmse_nonsecure_entry))
++foo (long long a, int b, long long c) {} /* { dg-error "not available to functions with arguments passed on the stack" } */
++
++void __attribute__ ((cmse_nonsecure_entry))
++bar (long long a, int b, struct span c) {} /* { dg-error "not available to functions with arguments passed on the stack" } */
++
++void __attribute__ ((cmse_nonsecure_entry))
++baz (int a, ...) {} /* { dg-error "not available to functions with variable number of arguments" } */
++
++struct span __attribute__ ((cmse_nonsecure_entry))
++qux (void) { /* { dg-error "not available to functions that return value on the stack" } */
++ struct span ret = {0, 0};
++ return ret;
++}
++
++void __attribute__ ((cmse_nonsecure_entry))
++norf (struct span2 a) {}
++
++void __attribute__ ((cmse_nonsecure_entry))
++foo2 (long long a, int b, union test_union c) {} /* { dg-error "not available to functions with arguments passed on the stack" } */
++
++typedef void __attribute__ ((cmse_nonsecure_call)) bar2 (long long a, int b, long long c); /* { dg-error "not available to functions with arguments passed on the stack" } */
++
++typedef void __attribute__ ((cmse_nonsecure_call)) baz2 (long long a, int b, struct span c); /* { dg-error "not available to functions with arguments passed on the stack" } */
++
++typedef struct span __attribute__ ((cmse_nonsecure_call)) qux2 (void); /* { dg-error "not available to functions that return value on the stack" } */
++
++typedef void __attribute__ ((cmse_nonsecure_call)) norf2 (int a, ...); /* { dg-error "not available to functions with variable number of arguments" } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/cmse-4.c
+@@ -0,0 +1,34 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++struct span {
++ int a, b;
++};
++
++extern int qux (void);
++
++void __attribute__ ((cmse_nonsecure_entry))
++foo (void) {}
++
++static void __attribute__ ((cmse_nonsecure_entry))
++bar (void) {} /* { dg-warning "has no effect on functions with static linkage" } */
++
++int __attribute__ ((cmse_nonsecure_entry))
++baz (void)
++{
++ return qux ();
++}
++
++void __attribute__ ((cmse_nonsecure_call))
++quux (void) {} /* { dg-warning "attribute only applies to base type of a function pointer" } */
++
++int __attribute__ ((cmse_nonsecure_call)) norf; /* { dg-warning "attribute only applies to base type of a function pointer" } */
++
++/* { dg-final { scan-assembler-times "bxns" 2 } } */
++/* { dg-final { scan-assembler "foo:" } } */
++/* { dg-final { scan-assembler "__acle_se_foo:" } } */
++/* { dg-final { scan-assembler-not "__acle_se_bar:" } } */
++/* { dg-final { scan-assembler "baz:" } } */
++/* { dg-final { scan-assembler "__acle_se_baz:" } } */
++/* { dg-final { scan-assembler-not "__acle_se_quux:" } } */
++/* { dg-final { scan-assembler-not "__acle_se_norf:" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/cmse-9.c
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-skip-if "Testing exclusion of -mcmse" { arm-*-* } { "-mcmse" } { "" } } */
++
++
++void __attribute__ ((cmse_nonsecure_call)) (*bar) (int); /* { dg-warning "attribute ignored without -mcmse option" } */
++typedef void __attribute__ ((cmse_nonsecure_call)) baz (int); /* { dg-warning "attribute ignored without -mcmse option" } */
++
++int __attribute__ ((cmse_nonsecure_entry))
++foo (int a, baz b)
++{ /* { dg-warning "attribute ignored without -mcmse option" } */
++ bar (a);
++ b (a);
++ return a + 1;
++}
++
++/* { dg-final { scan-assembler-not "bxns" } } */
++/* { dg-final { scan-assembler-not "blxns" } } */
++/* { dg-final { scan-assembler-not "bl\t__gnu_cmse_nonsecure_call" } } */
++/* { dg-final { scan-assembler "foo:" } } */
++/* { dg-final { scan-assembler-not "__acle_se_foo:" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/cmse.exp
+@@ -0,0 +1,72 @@
++# Copyright (C) 1997-2016 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3. If not see
++# <http://www.gnu.org/licenses/>.
++
++# GCC testsuite for ARMv8-M Security Extensions using the `dg.exp' driver.
++
++# Load support procs.
++load_lib gcc-dg.exp
++
++# Exit immediately if the target does not support -mcmse.
++if ![check_effective_target_arm_cmse_ok] then {
++ return
++}
++
++# If a testcase doesn't have special options, use these.
++global DEFAULT_CFLAGS
++if ![info exists DEFAULT_CFLAGS] then {
++ set DEFAULT_CFLAGS " -ansi -pedantic-errors"
++}
++
++# Initialize `dg'.
++dg-init
++
++set saved-dg-do-what-default ${dg-do-what-default}
++set dg-do-what-default "assemble"
++
++set saved-lto_torture_options ${LTO_TORTURE_OPTIONS}
++set LTO_TORTURE_OPTIONS ""
++
++# These are for both baseline and mainline.
++gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] \
++ "" $DEFAULT_CFLAGS
++
++if {[check_effective_target_arm_arch_v8m_base_ok]} then {
++ # Baseline only
++ gcc-dg-runtest [lsort [glob $srcdir/$subdir/baseline/*.c]] \
++ "" $DEFAULT_CFLAGS
++}
++
++if {[check_effective_target_arm_arch_v8m_main_ok]} then {
++ gcc-dg-runtest [lsort [glob $srcdir/$subdir/mainline/*.c]] \
++ "" $DEFAULT_CFLAGS
++ # Mainline -mfloat-abi=soft
++ gcc-dg-runtest [lsort [glob $srcdir/$subdir/mainline/soft/*.c]] \
++ "-mfloat-abi=soft" $DEFAULT_CFLAGS
++ gcc-dg-runtest [lsort [glob $srcdir/$subdir/mainline/softfp/*.c]] \
++ "" $DEFAULT_CFLAGS
++ gcc-dg-runtest [lsort [glob $srcdir/$subdir/mainline/softfp-sp/*.c]] \
++ "" $DEFAULT_CFLAGS
++ gcc-dg-runtest [lsort [glob $srcdir/$subdir/mainline/hard/*.c]] \
++ "" $DEFAULT_CFLAGS
++ gcc-dg-runtest [lsort [glob $srcdir/$subdir/mainline/hard-sp/*.c]] \
++ "" $DEFAULT_CFLAGS
++}
++
++set LTO_TORTURE_OPTIONS ${saved-lto_torture_options}
++set dg-do-what-default ${saved-dg-do-what-default}
++
++# All done.
++dg-finish
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/bitfield-4.c
+@@ -0,0 +1,55 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int b:5;
++ unsigned int c:11, :0, d:8;
++ struct { unsigned int ee:2; } e;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++extern void foo (test_st st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++ r.values.v4 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tip, #65535" } } */
++/* { dg-final { scan-assembler "movt\tip, 255" } } */
++/* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
++/* { dg-final { scan-assembler "mov\tip, #255" } } */
++/* { dg-final { scan-assembler "and\tr1, r1, ip" } } */
++/* { dg-final { scan-assembler "mov\tip, #3" } } */
++/* { dg-final { scan-assembler "and\tr2, r2, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/bitfield-5.c
+@@ -0,0 +1,51 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned short b :5;
++ unsigned char c;
++ unsigned short d :11;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tip, #8191" } } */
++/* { dg-final { scan-assembler "movt\tip, 255" } } */
++/* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
++/* { dg-final { scan-assembler "movw\tip, #2047" } } */
++/* { dg-final { scan-assembler "and\tr1, r1, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/bitfield-6.c
+@@ -0,0 +1,61 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int b : 3;
++ unsigned int c : 14;
++ unsigned int d : 1;
++ struct {
++ unsigned int ee : 2;
++ unsigned short ff : 15;
++ } e;
++ unsigned char g : 1;
++ unsigned char : 4;
++ unsigned char h : 3;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++ r.values.v4 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tip, #65535" } } */
++/* { dg-final { scan-assembler "movt\tip, 1023" } } */
++/* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
++/* { dg-final { scan-assembler "mov\tip, #3" } } */
++/* { dg-final { scan-assembler "movt\tip, 32767" } } */
++/* { dg-final { scan-assembler "and\tr1, r1, ip" } } */
++/* { dg-final { scan-assembler "mov\tip, #255" } } */
++/* { dg-final { scan-assembler "and\tr2, r2, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/bitfield-7.c
+@@ -0,0 +1,52 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned short b :5;
++ unsigned char c;
++ unsigned short d :11;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++
++/* { dg-final { scan-assembler "movw\tip, #8191" } } */
++/* { dg-final { scan-assembler "movt\tip, 255" } } */
++/* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
++/* { dg-final { scan-assembler "movw\tip, #2047" } } */
++/* { dg-final { scan-assembler "and\tr1, r1, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/bitfield-8.c
+@@ -0,0 +1,55 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int :0;
++ unsigned int b :1;
++ unsigned short :0;
++ unsigned short c;
++ unsigned int :0;
++ unsigned int d :21;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "mov\tip, #255" } } */
++/* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
++/* { dg-final { scan-assembler "mov\tip, #1" } } */
++/* { dg-final { scan-assembler "movt\tip, 65535" } } */
++/* { dg-final { scan-assembler "and\tr1, r1, ip" } } */
++/* { dg-final { scan-assembler "movw\tip, #65535" } } */
++/* { dg-final { scan-assembler "movt\tip, 31" } } */
++/* { dg-final { scan-assembler "and\tr2, r2, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/bitfield-9.c
+@@ -0,0 +1,54 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ char a:3;
++} test_st3;
++
++typedef struct
++{
++ char a:3;
++} test_st2;
++
++typedef struct
++{
++ test_st2 st2;
++ test_st3 st3;
++} test_st;
++
++typedef union
++{
++ test_st st;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st;
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
++
++int
++main (void)
++{
++ read_st r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++
++ f (r.st);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tip, #1799" } } */
++/* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/bitfield-and-union-1.c
+@@ -0,0 +1,94 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned short a :11;
++} test_st_4;
++
++typedef union
++{
++ char a;
++ test_st_4 st4;
++}test_un_2;
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int :0;
++ unsigned int b :1;
++ unsigned short :0;
++ unsigned short c;
++ unsigned int :0;
++ unsigned int d :21;
++} test_st_3;
++
++typedef struct
++{
++ unsigned char a :3;
++ unsigned int b :13;
++ test_un_2 un2;
++} test_st_2;
++
++typedef union
++{
++ test_st_2 st2;
++ test_st_3 st3;
++}test_un_1;
++
++typedef struct
++{
++ unsigned char a :2;
++ unsigned char :0;
++ unsigned short b :5;
++ unsigned char :0;
++ unsigned char c :4;
++ test_un_1 un1;
++} test_st_1;
++
++typedef union
++{
++ test_st_1 st1;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_st_1;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st_1);
++
++int
++main (void)
++{
++ read_st_1 r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++ r.values.v4 = 0xFFFFFFFF;
++
++ f (r.st1);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tip, #7939" } } */
++/* { dg-final { scan-assembler "movt\tip, 15" } } */
++/* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
++/* { dg-final { scan-assembler "movw\tip, #65535" } } */
++/* { dg-final { scan-assembler "movt\tip, 2047" } } */
++/* { dg-final { scan-assembler "and\tr1, r1, ip" } } */
++/* { dg-final { scan-assembler "mov\tip, #1" } } */
++/* { dg-final { scan-assembler "movt\tip, 65535" } } */
++/* { dg-final { scan-assembler "and\tr2, r2, ip" } } */
++/* { dg-final { scan-assembler "movw\tip, #65535" } } */
++/* { dg-final { scan-assembler "movt\tip, 31" } } */
++/* { dg-final { scan-assembler "and\tr3, r3, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/hard-sp/cmse-13.c
+@@ -0,0 +1,43 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=softfp } {""} } */
++/* { dg-skip-if "Skip these if testing double precision" {*-*-*} {"-mfpu=fpv[4-5]-d16"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=hard -mfpu=fpv5-sp-d16" } */
++
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (float, double);
++
++int
++foo (int a)
++{
++ return bar (3.0f, 2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler-not "vldr\.32\ts0, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts1, .L" } } */
++/* { dg-final { scan-assembler-not "vldr\.32\ts2, .L" } } */
++/* { dg-final { scan-assembler-not "vldr\.32\ts3, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts4, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts5, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts6, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts7, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts8, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts9, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts10, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts11, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts12, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts13, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts14, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts15, .L" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/hard-sp/cmse-5.c
+@@ -0,0 +1,45 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=softfp } {""} } */
++/* { dg-skip-if "Skip these if testing double precision" {*-*-*} {"-mfpu=fpv[4-5]-d16"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=hard -mfpu=fpv5-sp-d16" } */
++
++extern float bar (void);
++
++float __attribute__ ((cmse_nonsecure_entry))
++foo (void)
++{
++ return bar ();
++}
++/* { dg-final { scan-assembler "mov\tr0, lr" } } */
++/* { dg-final { scan-assembler "mov\tr1, lr" } } */
++/* { dg-final { scan-assembler "mov\tr2, lr" } } */
++/* { dg-final { scan-assembler "mov\tr3, lr" } } */
++/* { dg-final { scan-assembler-not "vmov\.f32\ts0, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts1, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts2, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts3, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts4, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts5, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts6, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts7, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts8, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts9, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts10, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts11, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts12, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts13, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts14, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts15, #1\.0" } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvq, lr" { target { arm_arch_v8m_main_ok && { ! arm_dsp } } } } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvqg, lr" { target { arm_arch_v8m_main_ok && arm_dsp } } } } */
++/* { dg-final { scan-assembler "push\t{r4}" } } */
++/* { dg-final { scan-assembler "vmrs\tip, fpscr" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65376" } } */
++/* { dg-final { scan-assembler "movt\tr4, #4095" } } */
++/* { dg-final { scan-assembler "and\tip, r4" } } */
++/* { dg-final { scan-assembler "vmsr\tfpscr, ip" } } */
++/* { dg-final { scan-assembler "pop\t{r4}" } } */
++/* { dg-final { scan-assembler "mov\tip, lr" } } */
++/* { dg-final { scan-assembler "bxns" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/hard-sp/cmse-7.c
+@@ -0,0 +1,42 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=softfp } {""} } */
++/* { dg-skip-if "Skip these if testing double precision" {*-*-*} {"-mfpu=fpv[4-5]-d16"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=hard -mfpu=fpv5-sp-d16" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (void);
++
++int
++foo (int a)
++{
++ return bar () + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts0, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts1, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts2, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts3, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts4, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts5, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts6, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts7, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts8, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts9, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts10, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts11, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts12, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts13, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts14, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts15, .L" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/hard-sp/cmse-8.c
+@@ -0,0 +1,41 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=softfp } {""} } */
++/* { dg-skip-if "Skip these if testing double precision" {*-*-*} {"-mfpu=fpv[4-5]-d16"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=hard -mfpu=fpv5-sp-d16" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (double);
++
++int
++foo (int a)
++{
++ return bar (2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler-not "vldr\.32\ts0, .L" } } */
++/* { dg-final { scan-assembler-not "vldr\.32\ts1, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts2, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts3, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts4, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts5, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts6, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts7, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts8, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts9, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts10, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts11, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts12, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts13, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts14, .L" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts15, .L" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/hard/cmse-13.c
+@@ -0,0 +1,38 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=softfp } {""} } */
++/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=hard -mfpu=fpv5-d16" } */
++
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (float, double);
++
++int
++foo (int a)
++{
++ return bar (3.0f, 2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "vldr\.32\ts1, .L" } } */
++/* { dg-final { scan-assembler-not "vldr\.64\td0, .L" } } */
++/* { dg-final { scan-assembler-not "vldr\.32\ts0, .L" } } */
++/* { dg-final { scan-assembler-not "vldr\.64\td1, .L" } } */
++/* { dg-final { scan-assembler-not "vldr\.32\ts2, .L" } } */
++/* { dg-final { scan-assembler-not "vldr\.32\ts3, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td2, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td3, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td4, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td5, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td6, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td7, .L" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/hard/cmse-5.c
+@@ -0,0 +1,38 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=softfp } {""} } */
++/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=hard -mfpu=fpv5-d16" } */
++
++extern float bar (void);
++
++float __attribute__ ((cmse_nonsecure_entry))
++foo (void)
++{
++ return bar ();
++}
++/* { dg-final { scan-assembler "mov\tr0, lr" } } */
++/* { dg-final { scan-assembler "mov\tr1, lr" } } */
++/* { dg-final { scan-assembler "mov\tr2, lr" } } */
++/* { dg-final { scan-assembler "mov\tr3, lr" } } */
++/* { dg-final { scan-assembler-not "vmov\.f32\ts0, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts1, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td1, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td2, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td3, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td4, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td5, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td6, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td7, #1\.0" } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvq, lr" { target { arm_arch_v8m_main_ok && { ! arm_dsp } } } } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvqg, lr" { target { arm_arch_v8m_main_ok && arm_dsp } } } } */
++/* { dg-final { scan-assembler "push\t{r4}" } } */
++/* { dg-final { scan-assembler "vmrs\tip, fpscr" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65376" } } */
++/* { dg-final { scan-assembler "movt\tr4, #4095" } } */
++/* { dg-final { scan-assembler "and\tip, r4" } } */
++/* { dg-final { scan-assembler "vmsr\tfpscr, ip" } } */
++/* { dg-final { scan-assembler "pop\t{r4}" } } */
++/* { dg-final { scan-assembler "mov\tip, lr" } } */
++/* { dg-final { scan-assembler "bxns" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/hard/cmse-7.c
+@@ -0,0 +1,34 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=softfp } {""} } */
++/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=hard -mfpu=fpv5-d16" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (void);
++
++int
++foo (int a)
++{
++ return bar () + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "vldr\.64\td0, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td1, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td2, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td3, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td4, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td5, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td6, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td7, .L" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/hard/cmse-8.c
+@@ -0,0 +1,33 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=softfp } {""} } */
++/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=hard -mfpu=fpv5-d16" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (double);
++
++int
++foo (int a)
++{
++ return bar (2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler-not "vldr\.64\td0, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td1, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td2, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td3, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td4, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td5, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td6, .L" } } */
++/* { dg-final { scan-assembler "vldr\.64\td7, .L" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/soft/cmse-13.c
+@@ -0,0 +1,27 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=hard" -mfloat-abi=softfp } {""} } */
++/* { dg-options "-mcmse -mfloat-abi=soft" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (float, double);
++
++int
++foo (int a)
++{
++ return bar (1.0f, 2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler-not "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler-not "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler-not "vmov" } } */
++/* { dg-final { scan-assembler-not "vmsr" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/soft/cmse-5.c
+@@ -0,0 +1,24 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=hard" -mfloat-abi=softfp } {""} } */
++/* { dg-options "-mcmse -mfloat-abi=soft" } */
++
++extern float bar (void);
++
++float __attribute__ ((cmse_nonsecure_entry))
++foo (void)
++{
++ return bar ();
++}
++
++/* { dg-final { scan-assembler "mov\tr1, lr" } } */
++/* { dg-final { scan-assembler "mov\tr2, lr" } } */
++/* { dg-final { scan-assembler "mov\tr3, lr" } } */
++/* { dg-final { scan-assembler "mov\tip, lr" } } */
++/* { dg-final { scan-assembler-not "vmov" } } */
++/* { dg-final { scan-assembler-not "vmsr" } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvq, lr" { target { arm_arch_v8m_main_ok && { ! arm_dsp } } } } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvqg, lr" { target { arm_arch_v8m_main_ok && arm_dsp } } } } */
++/* { dg-final { scan-assembler "bxns" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/soft/cmse-7.c
+@@ -0,0 +1,27 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=hard" -mfloat-abi=softfp } {""} } */
++/* { dg-options "-mcmse -mfloat-abi=soft" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (void);
++
++int
++foo (int a)
++{
++ return bar () + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler-not "vmov" } } */
++/* { dg-final { scan-assembler-not "vmsr" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/soft/cmse-8.c
+@@ -0,0 +1,26 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=hard" -mfloat-abi=softfp } {""} } */
++/* { dg-options "-mcmse -mfloat-abi=soft" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (double);
++
++int
++foo (int a)
++{
++ return bar (2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler-not "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler-not "vmov" } } */
++/* { dg-final { scan-assembler-not "vmsr" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/softfp-sp/cmse-5.c
+@@ -0,0 +1,46 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=hard } {""} } */
++/* { dg-skip-if "Skip these if testing double precision" {*-*-*} {"-mfpu=fpv[4-5]-d16"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-sp-d16" } */
++
++extern float bar (void);
++
++float __attribute__ ((cmse_nonsecure_entry))
++foo (void)
++{
++ return bar ();
++}
++/* { dg-final { scan-assembler "__acle_se_foo:" } } */
++/* { dg-final { scan-assembler-not "mov\tr0, lr" } } */
++/* { dg-final { scan-assembler "mov\tr1, lr" } } */
++/* { dg-final { scan-assembler "mov\tr2, lr" } } */
++/* { dg-final { scan-assembler "mov\tr3, lr" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts0, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts1, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts2, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts3, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts4, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts5, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts6, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts7, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts8, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts9, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts10, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts11, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts12, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts13, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts14, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f32\ts15, #1\.0" } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvq, lr" { target { arm_arch_v8m_main_ok && { ! arm_dsp } } } } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvqg, lr" { target { arm_arch_v8m_main_ok && arm_dsp } } } } */
++/* { dg-final { scan-assembler "push\t{r4}" } } */
++/* { dg-final { scan-assembler "vmrs\tip, fpscr" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65376" } } */
++/* { dg-final { scan-assembler "movt\tr4, #4095" } } */
++/* { dg-final { scan-assembler "and\tip, r4" } } */
++/* { dg-final { scan-assembler "vmsr\tfpscr, ip" } } */
++/* { dg-final { scan-assembler "pop\t{r4}" } } */
++/* { dg-final { scan-assembler "mov\tip, lr" } } */
++/* { dg-final { scan-assembler "bxns" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/softfp-sp/cmse-7.c
+@@ -0,0 +1,26 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=hard } {""} } */
++/* { dg-skip-if "Skip these if testing double precision" {*-*-*} {"-mfpu=fpv[4-5]-d16"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-sp-d16" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (void);
++
++int
++foo (int a)
++{
++ return bar () + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/softfp-sp/cmse-8.c
+@@ -0,0 +1,25 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=hard } {""} } */
++/* { dg-skip-if "Skip these if testing double precision" {*-*-*} {"-mfpu=fpv[4-5]-d16"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-sp-d16" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (double);
++
++int
++foo (int a)
++{
++ return bar (2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler-not "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/softfp/cmse-13.c
+@@ -0,0 +1,25 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=hard } {""} } */
++/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-d16" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (float, double);
++
++int
++foo (int a)
++{
++ return bar (1.0f, 2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "\n\tmov\tr1, r4" } } */
++/* { dg-final { scan-assembler-not "\n\tmov\tr2, r4\n\tmov\tr3, r4" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/softfp/cmse-5.c
+@@ -0,0 +1,38 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=hard } {""} } */
++/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-d16" } */
++
++extern float bar (void);
++
++float __attribute__ ((cmse_nonsecure_entry))
++foo (void)
++{
++ return bar ();
++}
++/* { dg-final { scan-assembler "__acle_se_foo:" } } */
++/* { dg-final { scan-assembler-not "mov\tr0, lr" } } */
++/* { dg-final { scan-assembler "mov\tr1, lr" } } */
++/* { dg-final { scan-assembler "mov\tr2, lr" } } */
++/* { dg-final { scan-assembler "mov\tr3, lr" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td0, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td1, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td2, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td3, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td4, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td5, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td6, #1\.0" } } */
++/* { dg-final { scan-assembler "vmov\.f64\td7, #1\.0" } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvq, lr" { target { arm_arch_v8m_main_ok && { ! arm_dsp } } } } } */
++/* { dg-final { scan-assembler "msr\tAPSR_nzcvqg, lr" { target { arm_arch_v8m_main_ok && arm_dsp } } } } */
++/* { dg-final { scan-assembler "push\t{r4}" } } */
++/* { dg-final { scan-assembler "vmrs\tip, fpscr" } } */
++/* { dg-final { scan-assembler "movw\tr4, #65376" } } */
++/* { dg-final { scan-assembler "movt\tr4, #4095" } } */
++/* { dg-final { scan-assembler "and\tip, r4" } } */
++/* { dg-final { scan-assembler "vmsr\tfpscr, ip" } } */
++/* { dg-final { scan-assembler "pop\t{r4}" } } */
++/* { dg-final { scan-assembler "mov\tip, lr" } } */
++/* { dg-final { scan-assembler "bxns" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/softfp/cmse-7.c
+@@ -0,0 +1,26 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=hard } {""} } */
++/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-d16" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (void);
++
++int
++foo (int a)
++{
++ return bar () + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/softfp/cmse-8.c
+@@ -0,0 +1,25 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v8m_main_ok } */
++/* { dg-add-options arm_arch_v8m_main } */
++/* { dg-skip-if "Do not combine float-abi= hard | soft | softfp" {*-*-*} {"-mfloat-abi=soft" -mfloat-abi=hard } {""} } */
++/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
++/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-d16" } */
++
++int __attribute__ ((cmse_nonsecure_call)) (*bar) (double);
++
++int
++foo (int a)
++{
++ return bar (2.0) + a + 1;
++}
++
++/* Checks for saving and clearing prior to function call. */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
++/* { dg-final { scan-assembler-not "mov\tr1, r4" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++
++/* Now we check that we use the correct intrinsic to call. */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/union-1.c
+@@ -0,0 +1,69 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a :2;
++ unsigned char :0;
++ unsigned short b :5;
++ unsigned char :0;
++ unsigned short c :3;
++ unsigned char :0;
++ unsigned int d :9;
++} test_st_1;
++
++typedef struct
++{
++ unsigned short a :7;
++ unsigned char :0;
++ unsigned char b :1;
++ unsigned char :0;
++ unsigned short c :6;
++} test_st_2;
++
++typedef union
++{
++ test_st_1 st_1;
++ test_st_2 st_2;
++}test_un;
++
++typedef union
++{
++ test_un un;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_un;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_un);
++
++int
++main (void)
++{
++ read_un r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++
++ f (r.un);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tip, #8063" } } */
++/* { dg-final { scan-assembler "movt\tip, 63" } } */
++/* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
++/* { dg-final { scan-assembler "movw\tip, #511" } } */
++/* { dg-final { scan-assembler "and\tr1, r1, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr2, r4" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/mainline/union-2.c
+@@ -0,0 +1,84 @@
++/* { dg-do compile } */
++/* { dg-options "-mcmse" } */
++
++typedef struct
++{
++ unsigned char a :2;
++ unsigned char :0;
++ unsigned short b :5;
++ unsigned char :0;
++ unsigned short c :3;
++ unsigned char :0;
++ unsigned int d :9;
++} test_st_1;
++
++typedef struct
++{
++ unsigned short a :7;
++ unsigned char :0;
++ unsigned char b :1;
++ unsigned char :0;
++ unsigned short c :6;
++} test_st_2;
++
++typedef struct
++{
++ unsigned char a;
++ unsigned int :0;
++ unsigned int b :1;
++ unsigned short :0;
++ unsigned short c;
++ unsigned int :0;
++ unsigned int d :21;
++} test_st_3;
++
++typedef union
++{
++ test_st_1 st_1;
++ test_st_2 st_2;
++ test_st_3 st_3;
++}test_un;
++
++typedef union
++{
++ test_un un;
++ struct
++ {
++ unsigned int v1;
++ unsigned int v2;
++ unsigned int v3;
++ unsigned int v4;
++ }values;
++} read_un;
++
++
++typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_un);
++
++int
++main (void)
++{
++ read_un r;
++ foo_ns f;
++
++ f = (foo_ns) 0x200000;
++ r.values.v1 = 0xFFFFFFFF;
++ r.values.v2 = 0xFFFFFFFF;
++ r.values.v3 = 0xFFFFFFFF;
++
++ f (r.un);
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movw\tip, #8191" } } */
++/* { dg-final { scan-assembler "movt\tip, 63" } } */
++/* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
++/* { dg-final { scan-assembler "movw\tip, #511" } } */
++/* { dg-final { scan-assembler "movt\tip, 65535" } } */
++/* { dg-final { scan-assembler "and\tr1, r1, ip" } } */
++/* { dg-final { scan-assembler "movw\tip, #65535" } } */
++/* { dg-final { scan-assembler "movt\tip, 31" } } */
++/* { dg-final { scan-assembler "and\tr2, r2, ip" } } */
++/* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
++/* { dg-final { scan-assembler "mov\tr3, r4" } } */
++/* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/cmse/struct-1.c
+@@ -0,0 +1,33 @@
++/* { dg-do run } */
++/* { dg-options "--save-temps -mcmse -Wl,--section-start,.gnu.sgstubs=0x20400000" } */
++
++typedef struct
++{
++ unsigned char a;
++ unsigned short b;
++} test_st;
++
++test_st __attribute__ ((cmse_nonsecure_entry)) foo (void)
++{
++ test_st t;
++ t.a = 255u;
++ t.b = 32767u;
++ return t;
++}
++
++int
++main (void)
++{
++ test_st t;
++ t = foo ();
++ if (t.a != 255u || t.b != 32767u)
++ __builtin_abort ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler "movs\tr1, #255" } } */
++/* { dg-final { scan-assembler "movt\tr1, 65535" } } */
++/* { dg-final { scan-assembler "ands\tr0(, r0)?, r1" } } */
++/* { dg-final { scan-assembler "bxns" } } */
++
++
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/data-rel-1.c
+@@ -0,0 +1,12 @@
++/* { dg-options "-fPIC -mno-pic-data-is-text-relative" } */
++/* { dg-final { scan-assembler-not "j-\\(.LPIC" } } */
++/* { dg-final { scan-assembler-not "_GLOBAL_OFFSET_TABLE_-\\(.LPIC" } } */
++/* { dg-final { scan-assembler "j\\(GOT\\)" } } */
++/* { dg-final { scan-assembler "(ldr|mov)\tr\[0-9\]+, \\\[?r9" } } */
++
++static int j;
++
++int *Foo ()
++{
++ return &j;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/data-rel-2.c
+@@ -0,0 +1,11 @@
++/* { dg-options "-fPIC -mno-pic-data-is-text-relative -mno-single-pic-base" } */
++/* { dg-final { scan-assembler-not "j-\\(.LPIC" } } */
++/* { dg-final { scan-assembler "_GLOBAL_OFFSET_TABLE_-\\(.LPIC" } } */
++/* { dg-final { scan-assembler "j\\(GOT\\)" } } */
++
++static int j;
++
++int *Foo ()
++{
++ return &j;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/data-rel-3.c
+@@ -0,0 +1,11 @@
++/* { dg-options "-fPIC -mpic-data-is-text-relative" } */
++/* { dg-final { scan-assembler "j-\\(.LPIC" } } */
++/* { dg-final { scan-assembler-not "_GLOBAL_OFFSET_TABLE_-\\(.LPIC" } } */
++/* { dg-final { scan-assembler-not "j\\(GOT\\)" } } */
++
++static int j;
++
++int *Foo ()
++{
++ return &j;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_fp16_ieee } */
++
++/* Test __fp16 arguments and return value in registers (hard-float). */
++
++void
++swap (__fp16, __fp16);
++
++__fp16
++F (__fp16 a, __fp16 b, __fp16 c)
++{
++ swap (b, a);
++ return c;
++}
++
++/* { dg-final { scan-assembler {vmov(\.f16)?\tr[0-9]+, s[0-9]+} } } */
++/* { dg-final { scan-assembler {vmov(\.f32)?\ts1, s0} } } */
++/* { dg-final { scan-assembler {vmov(\.f16)?\ts0, r[0-9]+} } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_ok } */
++/* { dg-options "-mfloat-abi=softfp -O2" } */
++/* { dg-add-options arm_fp16_ieee } */
++/* { dg-skip-if "incompatible float-abi" { arm*-*-* } { "-mfloat-abi=hard" } } */
++
++/* Test __fp16 arguments and return value in registers (softfp). */
++
++void
++swap (__fp16, __fp16);
++
++__fp16
++F (__fp16 a, __fp16 b, __fp16 c)
++{
++ swap (b, a);
++ return c;
++}
++
++/* { dg-final { scan-assembler-times {mov\tr[0-9]+, r[0-2]} 3 } } */
++/* { dg-final { scan-assembler-times {mov\tr1, r0} 1 } } */
++/* { dg-final { scan-assembler-times {mov\tr0, r[0-9]+} 2 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm_fp16_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_fp16_alternative } */
++
++/* Test __fp16 arguments and return value in registers (hard-float). */
++
++void
++swap (__fp16, __fp16);
++
++__fp16
++F (__fp16 a, __fp16 b, __fp16 c)
++{
++ swap (b, a);
++ return c;
++}
++
++/* { dg-final { scan-assembler-times {vmov\tr[0-9]+, s[0-2]} 2 } } */
++/* { dg-final { scan-assembler-times {vmov.f32\ts1, s0} 1 } } */
++/* { dg-final { scan-assembler-times {vmov\ts0, r[0-9]+} 2 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_ok } */
++/* { dg-options "-mfloat-abi=softfp -O2" } */
++/* { dg-add-options arm_fp16_alternative } */
++/* { dg-skip-if "incompatible float-abi" { arm*-*-* } { "-mfloat-abi=hard" } } */
++
++/* Test __fp16 arguments and return value in registers (softfp). */
++
++void
++swap (__fp16, __fp16);
++
++__fp16
++F (__fp16 a, __fp16 b, __fp16 c)
++{
++ swap (b, a);
++ return c;
++}
++
++/* { dg-final { scan-assembler-times {mov\tr[0-9]+, r[0-2]} 3 } } */
++/* { dg-final { scan-assembler-times {mov\tr1, r0} 1 } } */
++/* { dg-final { scan-assembler-times {mov\tr0, r[0-9]+} 2 } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-1.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ __fp16 xx = 0.0;
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-10.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-10.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative -pedantic -std=gnu99" } */
+
+ #include <math.h>
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-11.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-11.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative -pedantic -std=gnu99" } */
+
+ #include <math.h>
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-12.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-12.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ float xx __attribute__((mode(HF))) = 0.0;
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-2.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ /* Encoding taken from: http://en.wikipedia.org/wiki/Half_precision */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-3.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-3.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ /* Encoding taken from: http://en.wikipedia.org/wiki/Half_precision */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-4.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-4.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ /* Encoding taken from: http://en.wikipedia.org/wiki/Half_precision */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-5.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-5.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ /* Encoding taken from: http://en.wikipedia.org/wiki/Half_precision */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-6.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-6.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ /* This number is the maximum value representable in the alternative
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-7.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-7.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative -pedantic" } */
+
+ /* This number overflows the range of the alternative encoding. Since this
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-8.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-8.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ /* Encoding taken from: http://en.wikipedia.org/wiki/Half_precision */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-9.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-9.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ /* Encoding taken from: http://en.wikipedia.org/wiki/Half_precision */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-none-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-none-1.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_none_ok } */
+ /* { dg-options "-mfp16-format=none" } */
+
+ /* __fp16 type name is not recognized unless you explicitly enable it
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-none-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-none-2.c
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-require-effective-target arm_fp16_none_ok } */
+ /* { dg-options "-mfp16-format=none" } */
+
+ /* mode(HF) attributes are not recognized unless you explicitly enable
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-param-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-param-1.c
+@@ -1,10 +1,14 @@
+ /* { dg-do compile } */
+ /* { dg-options "-mfp16-format=ieee" } */
+
+-/* Functions cannot have parameters of type __fp16. */
+-extern void f (__fp16); /* { dg-error "parameters cannot have __fp16 type" } */
+-extern void (*pf) (__fp16); /* { dg-error "parameters cannot have __fp16 type" } */
++/* Test that the ACLE macro is defined. */
++#if __ARM_FP16_ARGS != 1
++#error Unexpected value for __ARM_FP16_ARGS
++#endif
++
++/* Test that __fp16 is supported as a parameter type. */
++extern void f (__fp16);
++extern void (*pf) (__fp16);
+
+-/* These should be OK. */
+ extern void g (__fp16 *);
+ extern void (*pg) (__fp16 *);
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-return-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-return-1.c
+@@ -1,10 +1,9 @@
+ /* { dg-do compile } */
+ /* { dg-options "-mfp16-format=ieee" } */
+
+-/* Functions cannot return type __fp16. */
+-extern __fp16 f (void); /* { dg-error "cannot return __fp16" } */
+-extern __fp16 (*pf) (void); /* { dg-error "cannot return __fp16" } */
++/* Test that __fp16 is supported as a return type. */
++extern __fp16 f (void);
++extern __fp16 (*pf) (void);
+
+-/* These should be OK. */
+ extern __fp16 *g (void);
+ extern __fp16 *(*pg) (void);
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-rounding-alt-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-rounding-alt-1.c
+@@ -3,6 +3,7 @@
+ from double to __fp16. */
+
+ /* { dg-do run } */
++/* { dg-require-effective-target arm_fp16_alternative_ok } */
+ /* { dg-options "-mfp16-format=alternative" } */
+
+ #include <stdlib.h>
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/movdi_movw.c
+@@ -0,0 +1,12 @@
++/* { dg-do compile { target { arm_thumb2_ok || arm_thumb1_movt_ok } } } */
++/* { dg-options "-O2" } */
++
++long long
++movdi (int a)
++{
++ return 0xF0F0;
++}
++
++/* Accept r1 because big endian targets put the low bits in the highest
++ numbered register of a pair. */
++/* { dg-final { scan-assembler-times "movw\tr\[01\], #61680" 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/movhi_movw.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile { target { arm_thumb2_ok || arm_thumb1_movt_ok } } } */
++/* { dg-options "-O2" } */
++
++short
++movsi (void)
++{
++ return (short) 0x7070;
++}
++
++/* { dg-final { scan-assembler-times "movw\tr0, #28784" 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/movsi_movw.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile { target { arm_thumb2_ok || arm_thumb1_movt_ok } } } */
++/* { dg-options "-O2" } */
++
++int
++movsi (void)
++{
++ return 0xF0F0;
++}
++
++/* { dg-final { scan-assembler-times "movw\tr0, #61680" 1 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vaddws16.c
+@@ -0,0 +1,19 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O3" } */
++/* { dg-add-options arm_neon } */
++
++
++
++int
++t6 (int len, void * dummy, short * __restrict x)
++{
++ len = len & ~31;
++ int result = 0;
++ __asm volatile ("");
++ for (int i = 0; i < len; i++)
++ result += x[i];
++ return result;
++}
++
++/* { dg-final { scan-assembler "vaddw\.s16" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vaddws32.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O3" } */
++/* { dg-add-options arm_neon } */
++
++
++int
++t6 (int len, void * dummy, int * __restrict x)
++{
++ len = len & ~31;
++ long long result = 0;
++ __asm volatile ("");
++ for (int i = 0; i < len; i++)
++ result += x[i];
++ return result;
++}
++
++/* { dg-final { scan-assembler "vaddw\.s32" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vaddwu16.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O3" } */
++/* { dg-add-options arm_neon } */
++
++
++int
++t6 (int len, void * dummy, unsigned short * __restrict x)
++{
++ len = len & ~31;
++ unsigned int result = 0;
++ __asm volatile ("");
++ for (int i = 0; i < len; i++)
++ result += x[i];
++ return result;
++}
++
++/* { dg-final { scan-assembler "vaddw.u16" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vaddwu32.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O3" } */
++/* { dg-add-options arm_neon } */
++
++
++int
++t6 (int len, void * dummy, unsigned int * __restrict x)
++{
++ len = len & ~31;
++ unsigned long long result = 0;
++ __asm volatile ("");
++ for (int i = 0; i < len; i++)
++ result += x[i];
++ return result;
++}
++
++/* { dg-final { scan-assembler "vaddw\.u32" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vaddwu8.c
+@@ -0,0 +1,19 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O3" } */
++/* { dg-add-options arm_neon } */
++
++
++
++int
++t6 (int len, void * dummy, char * __restrict x)
++{
++ len = len & ~31;
++ unsigned short result = 0;
++ __asm volatile ("");
++ for (int i = 0; i < len; i++)
++ result += x[i];
++ return result;
++}
++
++/* { dg-final { scan-assembler "vaddw\.u8" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/neon.exp
++++ b/src//dev/null
+@@ -1,35 +0,0 @@
+-# Copyright (C) 1997-2016 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 3 of the License, or
+-# (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with GCC; see the file COPYING3. If not see
+-# <http://www.gnu.org/licenses/>.
+-
+-# GCC testsuite that uses the `dg.exp' driver.
+-
+-# Exit immediately if this isn't an ARM target.
+-if ![istarget arm*-*-*] then {
+- return
+-}
+-
+-# Load support procs.
+-load_lib gcc-dg.exp
+-
+-# Initialize `dg'.
+-dg-init
+-
+-# Main loop.
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
+- "" ""
+-
+-# All done.
+-dg-finish
+--- a/src/gcc/testsuite/gcc.target/arm/neon/polytypes.c
++++ b/src//dev/null
+@@ -1,48 +0,0 @@
+-/* Check that NEON polynomial vector types are suitably incompatible with
+- integer vector types of the same layout. */
+-
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-add-options arm_neon } */
+-
+-#include <arm_neon.h>
+-
+-void s64_8 (int8x8_t a) {}
+-void u64_8 (uint8x8_t a) {}
+-void p64_8 (poly8x8_t a) {}
+-void s64_16 (int16x4_t a) {}
+-void u64_16 (uint16x4_t a) {}
+-void p64_16 (poly16x4_t a) {}
+-
+-void s128_8 (int8x16_t a) {}
+-void u128_8 (uint8x16_t a) {}
+-void p128_8 (poly8x16_t a) {}
+-void s128_16 (int16x8_t a) {}
+-void u128_16 (uint16x8_t a) {}
+-void p128_16 (poly16x8_t a) {}
+-
+-void foo ()
+-{
+- poly8x8_t v64_8;
+- poly16x4_t v64_16;
+- poly8x16_t v128_8;
+- poly16x8_t v128_16;
+-
+- s64_8 (v64_8); /* { dg-message "use -flax-vector-conversions" } */
+- /* { dg-error "incompatible type for argument 1 of 's64_8'" "" { target *-*-* } 31 } */
+- u64_8 (v64_8); /* { dg-error "incompatible type for argument 1 of 'u64_8'" } */
+- p64_8 (v64_8);
+-
+- s64_16 (v64_16); /* { dg-error "incompatible type for argument 1 of 's64_16'" } */
+- u64_16 (v64_16); /* { dg-error "incompatible type for argument 1 of 'u64_16'" } */
+- p64_16 (v64_16);
+-
+- s128_8 (v128_8); /* { dg-error "incompatible type for argument 1 of 's128_8'" } */
+- u128_8 (v128_8); /* { dg-error "incompatible type for argument 1 of 'u128_8'" } */
+- p128_8 (v128_8);
+-
+- s128_16 (v128_16); /* { dg-error "incompatible type for argument 1 of 's128_16'" } */
+- u128_16 (v128_16); /* { dg-error "incompatible type for argument 1 of 'u128_16'" } */
+- p128_16 (v128_16);
+-}
+-/* { dg-message "note: expected '\[^'\n\]*' but argument is of type '\[^'\n\]*'" "note: expected" { target *-*-* } 0 } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/pr51534.c
++++ b/src//dev/null
+@@ -1,83 +0,0 @@
+-/* Test the vector comparison intrinsics when comparing to immediate zero.
+- */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -mfloat-abi=hard -O3" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include <arm_neon.h>
+-
+-#define GEN_TEST(T, D, C, R) \
+- R test_##C##_##T (T a) { return C (a, D (0)); }
+-
+-#define GEN_DOUBLE_TESTS(S, T, C) \
+- GEN_TEST (T, vdup_n_s##S, C##_s##S, u##T) \
+- GEN_TEST (u##T, vdup_n_u##S, C##_u##S, u##T)
+-
+-#define GEN_QUAD_TESTS(S, T, C) \
+- GEN_TEST (T, vdupq_n_s##S, C##q_s##S, u##T) \
+- GEN_TEST (u##T, vdupq_n_u##S, C##q_u##S, u##T)
+-
+-#define GEN_COND_TESTS(C) \
+- GEN_DOUBLE_TESTS (8, int8x8_t, C) \
+- GEN_DOUBLE_TESTS (16, int16x4_t, C) \
+- GEN_DOUBLE_TESTS (32, int32x2_t, C) \
+- GEN_QUAD_TESTS (8, int8x16_t, C) \
+- GEN_QUAD_TESTS (16, int16x8_t, C) \
+- GEN_QUAD_TESTS (32, int32x4_t, C)
+-
+-GEN_COND_TESTS(vcgt)
+-GEN_COND_TESTS(vcge)
+-GEN_COND_TESTS(vclt)
+-GEN_COND_TESTS(vcle)
+-GEN_COND_TESTS(vceq)
+-
+-/* Scan for expected outputs. */
+-/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcgt\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcgt\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcgt\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcgt\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcgt\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcgt\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcge\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcge\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcge\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcge\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcge\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vcge\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
+-/* { dg-final { scan-assembler "vclt\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vclt\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vclt\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vclt\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vclt\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vclt\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vcle\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vcle\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vcle\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vcle\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vcle\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler "vcle\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
+-/* { dg-final { scan-assembler-times "vceq\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" 2 } } */
+-/* { dg-final { scan-assembler-times "vceq\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" 2 } } */
+-/* { dg-final { scan-assembler-times "vceq\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" 2 } } */
+-/* { dg-final { scan-assembler-times "vceq\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" 2 } } */
+-/* { dg-final { scan-assembler-times "vceq\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" 2 } } */
+-/* { dg-final { scan-assembler-times "vceq\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" 2 } } */
+-
+-/* And ensure we don't have unexpected output too. */
+-/* { dg-final { scan-assembler-not "vc\[gl\]\[te\]\.u\[0-9\]+\[ \]+\[qQdD\]\[0-9\]+, \[qQdD\]\[0-9\]+, #0" } } */
+-
+-/* Tidy up. */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRaddhns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRaddhns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int8x8_t = vraddhn_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vraddhn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRaddhns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRaddhns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int16x4_t = vraddhn_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vraddhn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRaddhns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRaddhns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int32x2_t = vraddhn_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vraddhn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhnu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRaddhnu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRaddhnu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint8x8_t = vraddhn_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vraddhn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhnu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRaddhnu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRaddhnu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint16x4_t = vraddhn_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vraddhn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhnu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRaddhnu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRaddhnu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint32x2_t = vraddhn_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vraddhn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhaddQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhaddQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vrhaddq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhaddQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhaddQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vrhaddq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhaddQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhaddQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vrhaddq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhaddQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhaddQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vrhaddq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhaddQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhaddQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vrhaddq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhaddQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhaddQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vrhaddq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhadds16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhadds16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhadds16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vrhadd_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhadds32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhadds32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhadds32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vrhadd_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhadds8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhadds8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhadds8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vrhadd_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhaddu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhaddu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vrhadd_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhaddu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhaddu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vrhadd_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRhaddu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRhaddu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vrhadd_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrhadd\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vrshlq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vrshlq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vrshlq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vrshlq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vrshlq_u16 (arg0_uint16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vrshlq_u32 (arg0_uint32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_uint64x2_t = vrshlq_u64 (arg0_uint64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vrshlq_u8 (arg0_uint8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshls16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vrshl_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshls32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vrshl_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshls64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshls64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshls64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vrshl_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshls8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshls8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vrshl_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vrshl_u16 (arg0_uint16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vrshl_u32 (arg0_uint32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_uint64x1_t = vrshl_u64 (arg0_uint64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRshlu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshlu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vrshl_u8 (arg0_uint8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrshl\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vrshrq_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vrshrq_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int64x2_t = vrshrq_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vrshrq_n_s8 (arg0_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x8_t = vrshrq_n_u16 (arg0_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x4_t = vrshrq_n_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint64x2_t = vrshrq_n_u64 (arg0_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vrshrq_n_u8 (arg0_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshr_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshr_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vrshr_n_s16 (arg0_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshr_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshr_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vrshr_n_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshr_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshr_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int64x1_t = vrshr_n_s64 (arg0_int64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshr_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshr_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vrshr_n_s8 (arg0_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshr_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshr_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x4_t = vrshr_n_u16 (arg0_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshr_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshr_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vrshr_n_u32 (arg0_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshr_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshr_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint64x1_t = vrshr_n_u64 (arg0_uint64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshr_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshr_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vrshr_n_u8 (arg0_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshr\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrn_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrn_ns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int8x8_t = vrshrn_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshrn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrn_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrn_ns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int16x4_t = vrshrn_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshrn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrn_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrn_ns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int32x2_t = vrshrn_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshrn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrn_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrn_nu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint8x8_t = vrshrn_n_u16 (arg0_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshrn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrn_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrn_nu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint16x4_t = vrshrn_n_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshrn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vRshrn_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRshrn_nu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint32x2_t = vrshrn_n_u64 (arg0_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrshrn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsraQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsraQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vrsraq_n_s16 (arg0_int16x8_t, arg1_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsraQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsraQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vrsraq_n_s32 (arg0_int32x4_t, arg1_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsraQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsraQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vrsraq_n_s64 (arg0_int64x2_t, arg1_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsraQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsraQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vrsraq_n_s8 (arg0_int8x16_t, arg1_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsraQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsraQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vrsraq_n_u16 (arg0_uint16x8_t, arg1_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsraQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsraQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vrsraq_n_u32 (arg0_uint32x4_t, arg1_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsraQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsraQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vrsraq_n_u64 (arg0_uint64x2_t, arg1_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsraQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsraQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vrsraq_n_u8 (arg0_uint8x16_t, arg1_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsra_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsra_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vrsra_n_s16 (arg0_int16x4_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsra_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsra_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vrsra_n_s32 (arg0_int32x2_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsra_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsra_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vrsra_n_s64 (arg0_int64x1_t, arg1_int64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsra_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsra_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vrsra_n_s8 (arg0_int8x8_t, arg1_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsra_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsra_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vrsra_n_u16 (arg0_uint16x4_t, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsra_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsra_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vrsra_n_u32 (arg0_uint32x2_t, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsra_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsra_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vrsra_n_u64 (arg0_uint64x1_t, arg1_uint64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsra_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsra_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vrsra_n_u8 (arg0_uint8x8_t, arg1_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vrsra\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsubhns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsubhns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int8x8_t = vrsubhn_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsubhn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsubhns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsubhns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int16x4_t = vrsubhn_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsubhn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsubhns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsubhns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int32x2_t = vrsubhn_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsubhn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhnu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsubhnu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsubhnu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint8x8_t = vrsubhn_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsubhn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhnu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsubhnu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsubhnu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint16x4_t = vrsubhn_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsubhn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhnu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vRsubhnu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vRsubhnu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint32x2_t = vrsubhn_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsubhn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQs16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabaQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabaQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+- int16x8_t arg2_int16x8_t;
+-
+- out_int16x8_t = vabaq_s16 (arg0_int16x8_t, arg1_int16x8_t, arg2_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQs32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabaQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabaQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+- int32x4_t arg2_int32x4_t;
+-
+- out_int32x4_t = vabaq_s32 (arg0_int32x4_t, arg1_int32x4_t, arg2_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQs8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabaQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabaQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+- int8x16_t arg2_int8x16_t;
+-
+- out_int8x16_t = vabaq_s8 (arg0_int8x16_t, arg1_int8x16_t, arg2_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabaQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabaQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+- uint16x8_t arg2_uint16x8_t;
+-
+- out_uint16x8_t = vabaq_u16 (arg0_uint16x8_t, arg1_uint16x8_t, arg2_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabaQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabaQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+- uint32x4_t arg2_uint32x4_t;
+-
+- out_uint32x4_t = vabaq_u32 (arg0_uint32x4_t, arg1_uint32x4_t, arg2_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQu8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabaQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabaQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+- uint8x16_t arg2_uint8x16_t;
+-
+- out_uint8x16_t = vabaq_u8 (arg0_uint8x16_t, arg1_uint8x16_t, arg2_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabals16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabals16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabals16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int32x4_t = vabal_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabal\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabals32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabals32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabals32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int64x2_t = vabal_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabal\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabals8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabals8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabals8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int8x8_t arg1_int8x8_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int16x8_t = vabal_s8 (arg0_int16x8_t, arg1_int8x8_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabal\.s8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabalu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabalu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabalu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint32x4_t = vabal_u16 (arg0_uint32x4_t, arg1_uint16x4_t, arg2_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabal\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabalu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabalu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabalu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint64x2_t = vabal_u32 (arg0_uint64x2_t, arg1_uint32x2_t, arg2_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabal\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabalu8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabalu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabalu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint8x8_t arg1_uint8x8_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint16x8_t = vabal_u8 (arg0_uint16x8_t, arg1_uint8x8_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabal\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabas16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabas16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabas16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int16x4_t = vaba_s16 (arg0_int16x4_t, arg1_int16x4_t, arg2_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabas32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabas32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabas32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int32x2_t = vaba_s32 (arg0_int32x2_t, arg1_int32x2_t, arg2_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabas8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabas8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabas8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int8x8_t = vaba_s8 (arg0_int8x8_t, arg1_int8x8_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabau16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabau16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabau16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint16x4_t = vaba_u16 (arg0_uint16x4_t, arg1_uint16x4_t, arg2_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabau32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabau32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabau32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint32x2_t = vaba_u32 (arg0_uint32x2_t, arg1_uint32x2_t, arg2_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabau8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vabau8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabau8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint8x8_t = vaba_u8 (arg0_uint8x8_t, arg1_uint8x8_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaba\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vabdq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vabdq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vabdq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vabdq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vabdq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vabdq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vabdq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vabd_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdls16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x4_t = vabdl_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabdl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdls32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x2_t = vabdl_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabdl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdls8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdls8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int16x8_t = vabdl_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabdl\.s8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdlu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdlu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdlu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint32x4_t = vabdl_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabdl\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdlu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdlu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdlu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint64x2_t = vabdl_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabdl\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdlu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdlu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdlu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint16x8_t = vabdl_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabdl\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabds16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabds16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabds16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vabd_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabds32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabds32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabds32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vabd_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabds8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabds8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabds8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vabd_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vabd_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vabd_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vabdu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabdu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vabd_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabd\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsQf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vabsQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabsQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vabsq_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabs\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsQs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vabsQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabsQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vabsq_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabs\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsQs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vabsQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabsQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vabsq_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabs\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsQs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vabsQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabsQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vabsq_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabs\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vabsf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabsf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vabs_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabs\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabss16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vabss16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabss16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vabs_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabs\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabss32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vabss32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabss32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vabs_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabs\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabss8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vabss8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vabss8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vabs_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vabs\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vaddq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vaddq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vaddq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vaddq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vaddq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vaddq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vaddq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vaddq_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vaddq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vadd_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddhns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddhns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int8x8_t = vaddhn_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddhn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddhns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddhns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int16x4_t = vaddhn_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddhn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddhns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddhns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int32x2_t = vaddhn_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddhn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhnu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddhnu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddhnu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint8x8_t = vaddhn_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddhn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhnu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddhnu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddhnu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint16x4_t = vaddhn_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddhn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhnu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddhnu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddhnu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint32x2_t = vaddhn_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddhn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddls16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x4_t = vaddl_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddls32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x2_t = vaddl_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddls8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddls8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int16x8_t = vaddl_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddl\.s8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddlu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddlu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddlu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint32x4_t = vaddl_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddl\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddlu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddlu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddlu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint64x2_t = vaddl_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddl\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddlu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddlu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddlu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint16x8_t = vaddl_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddl\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vadds16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vadds16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vadds16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vadd_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vadds32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vadds32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vadds32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vadd_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vadds64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vadds64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vadds64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vadd_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vadds8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vadds8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vadds8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vadd_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vadd_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vadd_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vaddu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vadd_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vadd_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vadd\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddws16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddws16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddws16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x4_t = vaddw_s16 (arg0_int32x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddw\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddws32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddws32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddws32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x2_t = vaddw_s32 (arg0_int64x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddw\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddws8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddws8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddws8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int16x8_t = vaddw_s8 (arg0_int16x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddw\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddwu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddwu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddwu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint32x4_t = vaddw_u16 (arg0_uint32x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddw\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddwu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddwu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddwu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint64x2_t = vaddw_u32 (arg0_uint64x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddw\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddwu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vaddwu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vaddwu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint16x8_t = vaddw_u8 (arg0_uint16x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vaddw\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vandq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vandq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vandq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vandq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vandq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vandq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vandq_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vandq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vands16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vands16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vands16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vand_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vands32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vands32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vands32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vand_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vands64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vands64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vands64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vand_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vands8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vands8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vands8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vand_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vand_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vand_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vandu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vand_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vandu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vandu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vand_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vand\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int16x8_t out_int16x8_t;
+-int16x8_t arg0_int16x8_t;
+-int16x8_t arg1_int16x8_t;
+-void test_vbicQs16 (void)
+-{
+-
+- out_int16x8_t = vbicq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int32x4_t out_int32x4_t;
+-int32x4_t arg0_int32x4_t;
+-int32x4_t arg1_int32x4_t;
+-void test_vbicQs32 (void)
+-{
+-
+- out_int32x4_t = vbicq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int64x2_t out_int64x2_t;
+-int64x2_t arg0_int64x2_t;
+-int64x2_t arg1_int64x2_t;
+-void test_vbicQs64 (void)
+-{
+-
+- out_int64x2_t = vbicq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int8x16_t out_int8x16_t;
+-int8x16_t arg0_int8x16_t;
+-int8x16_t arg1_int8x16_t;
+-void test_vbicQs8 (void)
+-{
+-
+- out_int8x16_t = vbicq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint16x8_t out_uint16x8_t;
+-uint16x8_t arg0_uint16x8_t;
+-uint16x8_t arg1_uint16x8_t;
+-void test_vbicQu16 (void)
+-{
+-
+- out_uint16x8_t = vbicq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint32x4_t out_uint32x4_t;
+-uint32x4_t arg0_uint32x4_t;
+-uint32x4_t arg1_uint32x4_t;
+-void test_vbicQu32 (void)
+-{
+-
+- out_uint32x4_t = vbicq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint64x2_t out_uint64x2_t;
+-uint64x2_t arg0_uint64x2_t;
+-uint64x2_t arg1_uint64x2_t;
+-void test_vbicQu64 (void)
+-{
+-
+- out_uint64x2_t = vbicq_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint8x16_t out_uint8x16_t;
+-uint8x16_t arg0_uint8x16_t;
+-uint8x16_t arg1_uint8x16_t;
+-void test_vbicQu8 (void)
+-{
+-
+- out_uint8x16_t = vbicq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbics16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbics16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int16x4_t out_int16x4_t;
+-int16x4_t arg0_int16x4_t;
+-int16x4_t arg1_int16x4_t;
+-void test_vbics16 (void)
+-{
+-
+- out_int16x4_t = vbic_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbics32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbics32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int32x2_t out_int32x2_t;
+-int32x2_t arg0_int32x2_t;
+-int32x2_t arg1_int32x2_t;
+-void test_vbics32 (void)
+-{
+-
+- out_int32x2_t = vbic_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbics64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vbics64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int64x1_t out_int64x1_t;
+-int64x1_t arg0_int64x1_t;
+-int64x1_t arg1_int64x1_t;
+-void test_vbics64 (void)
+-{
+-
+- out_int64x1_t = vbic_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbics8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbics8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int8x8_t out_int8x8_t;
+-int8x8_t arg0_int8x8_t;
+-int8x8_t arg1_int8x8_t;
+-void test_vbics8 (void)
+-{
+-
+- out_int8x8_t = vbic_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint16x4_t out_uint16x4_t;
+-uint16x4_t arg0_uint16x4_t;
+-uint16x4_t arg1_uint16x4_t;
+-void test_vbicu16 (void)
+-{
+-
+- out_uint16x4_t = vbic_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint32x2_t out_uint32x2_t;
+-uint32x2_t arg0_uint32x2_t;
+-uint32x2_t arg1_uint32x2_t;
+-void test_vbicu32 (void)
+-{
+-
+- out_uint32x2_t = vbic_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vbicu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint64x1_t out_uint64x1_t;
+-uint64x1_t arg0_uint64x1_t;
+-uint64x1_t arg1_uint64x1_t;
+-void test_vbicu64 (void)
+-{
+-
+- out_uint64x1_t = vbic_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vbicu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint8x8_t out_uint8x8_t;
+-uint8x8_t arg0_uint8x8_t;
+-uint8x8_t arg1_uint8x8_t;
+-void test_vbicu8 (void)
+-{
+-
+- out_uint8x8_t = vbic_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vbic\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- float32x4_t arg1_float32x4_t;
+- float32x4_t arg2_float32x4_t;
+-
+- out_float32x4_t = vbslq_f32 (arg0_uint32x4_t, arg1_float32x4_t, arg2_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQp16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQp16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- poly16x8_t arg1_poly16x8_t;
+- poly16x8_t arg2_poly16x8_t;
+-
+- out_poly16x8_t = vbslq_p16 (arg0_uint16x8_t, arg1_poly16x8_t, arg2_poly16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQp64.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQp64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- poly64x2_t arg1_poly64x2_t;
+- poly64x2_t arg2_poly64x2_t;
+-
+- out_poly64x2_t = vbslq_p64 (arg0_uint64x2_t, arg1_poly64x2_t, arg2_poly64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQp8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+- poly8x16_t arg2_poly8x16_t;
+-
+- out_poly8x16_t = vbslq_p8 (arg0_uint8x16_t, arg1_poly8x16_t, arg2_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQs16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- int16x8_t arg1_int16x8_t;
+- int16x8_t arg2_int16x8_t;
+-
+- out_int16x8_t = vbslq_s16 (arg0_uint16x8_t, arg1_int16x8_t, arg2_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQs32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- int32x4_t arg1_int32x4_t;
+- int32x4_t arg2_int32x4_t;
+-
+- out_int32x4_t = vbslq_s32 (arg0_uint32x4_t, arg1_int32x4_t, arg2_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQs64.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- int64x2_t arg1_int64x2_t;
+- int64x2_t arg2_int64x2_t;
+-
+- out_int64x2_t = vbslq_s64 (arg0_uint64x2_t, arg1_int64x2_t, arg2_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQs8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- int8x16_t arg1_int8x16_t;
+- int8x16_t arg2_int8x16_t;
+-
+- out_int8x16_t = vbslq_s8 (arg0_uint8x16_t, arg1_int8x16_t, arg2_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+- uint16x8_t arg2_uint16x8_t;
+-
+- out_uint16x8_t = vbslq_u16 (arg0_uint16x8_t, arg1_uint16x8_t, arg2_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+- uint32x4_t arg2_uint32x4_t;
+-
+- out_uint32x4_t = vbslq_u32 (arg0_uint32x4_t, arg1_uint32x4_t, arg2_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQu64.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+- uint64x2_t arg2_uint64x2_t;
+-
+- out_uint64x2_t = vbslq_u64 (arg0_uint64x2_t, arg1_uint64x2_t, arg2_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQu8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+- uint8x16_t arg2_uint8x16_t;
+-
+- out_uint8x16_t = vbslq_u8 (arg0_uint8x16_t, arg1_uint8x16_t, arg2_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- float32x2_t arg1_float32x2_t;
+- float32x2_t arg2_float32x2_t;
+-
+- out_float32x2_t = vbsl_f32 (arg0_uint32x2_t, arg1_float32x2_t, arg2_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslp16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslp16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- poly16x4_t arg1_poly16x4_t;
+- poly16x4_t arg2_poly16x4_t;
+-
+- out_poly16x4_t = vbsl_p16 (arg0_uint16x4_t, arg1_poly16x4_t, arg2_poly16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslp64.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslp64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- poly64x1_t arg1_poly64x1_t;
+- poly64x1_t arg2_poly64x1_t;
+-
+- out_poly64x1_t = vbsl_p64 (arg0_uint64x1_t, arg1_poly64x1_t, arg2_poly64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslp8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslp8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+- poly8x8_t arg2_poly8x8_t;
+-
+- out_poly8x8_t = vbsl_p8 (arg0_uint8x8_t, arg1_poly8x8_t, arg2_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbsls16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbsls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbsls16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int16x4_t = vbsl_s16 (arg0_uint16x4_t, arg1_int16x4_t, arg2_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbsls32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbsls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbsls32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int32x2_t = vbsl_s32 (arg0_uint32x2_t, arg1_int32x2_t, arg2_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbsls64.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbsls64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbsls64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- int64x1_t arg1_int64x1_t;
+- int64x1_t arg2_int64x1_t;
+-
+- out_int64x1_t = vbsl_s64 (arg0_uint64x1_t, arg1_int64x1_t, arg2_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbsls8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbsls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbsls8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- int8x8_t arg1_int8x8_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int8x8_t = vbsl_s8 (arg0_uint8x8_t, arg1_int8x8_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint16x4_t = vbsl_u16 (arg0_uint16x4_t, arg1_uint16x4_t, arg2_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint32x2_t = vbsl_u32 (arg0_uint32x2_t, arg1_uint32x2_t, arg2_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslu64.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+- uint64x1_t arg2_uint64x1_t;
+-
+- out_uint64x1_t = vbsl_u64 (arg0_uint64x1_t, arg1_uint64x1_t, arg2_uint64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslu8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vbslu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vbslu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint8x8_t = vbsl_u8 (arg0_uint8x8_t, arg1_uint8x8_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "((vbsl)|(vbit)|(vbif))\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcageQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcageQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcageQf32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_uint32x4_t = vcageq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vacge\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcagef32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcagef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcagef32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_uint32x2_t = vcage_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vacge\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcagtQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcagtQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcagtQf32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_uint32x4_t = vcagtq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vacgt\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcagtf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcagtf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcagtf32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_uint32x2_t = vcagt_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vacgt\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcaleQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcaleQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcaleQf32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_uint32x4_t = vcaleq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vacge\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcalef32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcalef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcalef32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_uint32x2_t = vcale_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vacge\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcaltQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcaltQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcaltQf32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_uint32x4_t = vcaltq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vacgt\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcaltf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcaltf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcaltf32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_uint32x2_t = vcalt_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vacgt\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqQf32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_uint32x4_t = vceqq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqQp8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_uint8x16_t = vceqq_p8 (arg0_poly8x16_t, arg1_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqQs16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vceqq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqQs32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vceqq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqQs8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vceqq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vceqq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vceqq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vceqq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqf32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_uint32x2_t = vceq_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqp8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_uint8x8_t = vceq_p8 (arg0_poly8x8_t, arg1_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqs16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vceq_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqs32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vceq_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vceqs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vceqs8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vceq_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcequ16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcequ16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcequ16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vceq_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcequ32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcequ32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcequ32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vceq_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcequ8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcequ8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcequ8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vceq_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vceq\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeQf32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_uint32x4_t = vcgeq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeQs16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vcgeq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeQs32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vcgeq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeQs8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vcgeq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vcgeq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vcgeq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vcgeq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgef32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgef32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_uint32x2_t = vcge_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcges16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcges16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcges16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vcge_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcges32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcges32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcges32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vcge_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcges8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcges8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcges8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vcge_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vcge_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vcge_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgeu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgeu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vcge_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtQf32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_uint32x4_t = vcgtq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtQs16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vcgtq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtQs32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vcgtq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtQs8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vcgtq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vcgtq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vcgtq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vcgtq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtf32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_uint32x2_t = vcgt_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgts16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgts16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgts16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vcgt_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgts32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgts32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgts32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vcgt_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgts8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgts8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgts8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vcgt_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vcgt_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vcgt_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcgtu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcgtu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vcgt_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleQf32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_uint32x4_t = vcleq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleQs16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vcleq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleQs32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vcleq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleQs8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vcleq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vcleq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vcleq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vcleq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclef32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vclef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclef32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_uint32x2_t = vcle_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcles16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcles16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcles16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vcle_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcles32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcles32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcles32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vcle_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcles8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcles8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcles8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vcle_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vcle_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vcle_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcleu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcleu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vcle_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcge\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclsQs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclsQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclsQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vclsq_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcls\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclsQs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclsQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclsQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vclsq_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcls\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclsQs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclsQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclsQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vclsq_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcls\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclss16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclss16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclss16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vcls_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcls\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclss32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclss32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclss32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vcls_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcls\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclss8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclss8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclss8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vcls_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcls\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltQf32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_uint32x4_t = vcltq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltQs16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vcltq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltQs32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vcltq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltQs8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vcltq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vcltq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vcltq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vcltq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltf32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_uint32x2_t = vclt_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclts16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vclts16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclts16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vclt_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclts32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vclts32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclts32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vclt_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclts8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vclts8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclts8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vclt_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vclt_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vclt_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vcltu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcltu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vclt_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcgt\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vclzq_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vclzq_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vclzq_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x8_t = vclzq_u16 (arg0_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x4_t = vclzq_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vclzq_u8 (arg0_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vclz_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vclz_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vclz_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x4_t = vclz_u16 (arg0_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vclz_u32 (arg0_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vclzu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vclzu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vclz_u8 (arg0_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vclz\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntQp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcntQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcntQp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly8x16_t = vcntq_p8 (arg0_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcnt\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntQs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcntQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcntQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vcntq_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcnt\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntQu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcntQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcntQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vcntq_u8 (arg0_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcnt\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcntp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcntp8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly8x8_t = vcnt_p8 (arg0_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcnt\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcnts8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcnts8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcnts8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vcnt_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcnt\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcntu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcntu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vcnt_u8 (arg0_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcnt\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombinef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombinef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombinef32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x4_t = vcombine_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombinep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombinep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombinep16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16x4_t arg0_poly16x4_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- out_poly16x8_t = vcombine_p16 (arg0_poly16x4_t, arg1_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombinep64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombinep64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombinep64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly64x1_t arg0_poly64x1_t;
+- poly64x1_t arg1_poly64x1_t;
+-
+- out_poly64x2_t = vcombine_p64 (arg0_poly64x1_t, arg1_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombinep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombinep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombinep8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x16_t = vcombine_p8 (arg0_poly8x8_t, arg1_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombines16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombines16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombines16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x8_t = vcombine_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombines32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombines32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombines32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x4_t = vcombine_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombines64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombines64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombines64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x2_t = vcombine_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombines8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombines8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombines8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x16_t = vcombine_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombineu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombineu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombineu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x8_t = vcombine_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombineu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombineu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombineu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x4_t = vcombine_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombineu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombineu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombineu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x2_t = vcombine_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombineu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcombineu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcombineu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x16_t = vcombine_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreatef32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreatef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreatef32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- uint64_t arg0_uint64_t;
+-
+- out_float32x2_t = vcreate_f32 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreatep16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreatep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreatep16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- uint64_t arg0_uint64_t;
+-
+- out_poly16x4_t = vcreate_p16 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreatep64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreatep64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreatep64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- uint64_t arg0_uint64_t;
+-
+- out_poly64x1_t = vcreate_p64 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreatep8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreatep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreatep8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- uint64_t arg0_uint64_t;
+-
+- out_poly8x8_t = vcreate_p8 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreates16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreates16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreates16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- uint64_t arg0_uint64_t;
+-
+- out_int16x4_t = vcreate_s16 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreates32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreates32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreates32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- uint64_t arg0_uint64_t;
+-
+- out_int32x2_t = vcreate_s32 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreates64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreates64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreates64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- uint64_t arg0_uint64_t;
+-
+- out_int64x1_t = vcreate_s64 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreates8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreates8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreates8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- uint64_t arg0_uint64_t;
+-
+- out_int8x8_t = vcreate_s8 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreateu16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreateu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreateu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint64_t arg0_uint64_t;
+-
+- out_uint16x4_t = vcreate_u16 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreateu32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreateu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreateu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64_t arg0_uint64_t;
+-
+- out_uint32x2_t = vcreate_u32 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreateu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreateu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreateu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64_t arg0_uint64_t;
+-
+- out_uint64x1_t = vcreate_u64 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreateu8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vcreateu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcreateu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint64_t arg0_uint64_t;
+-
+- out_uint8x8_t = vcreate_u8 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_nf32_s32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtQ_nf32_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtQ_nf32_s32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_float32x4_t = vcvtq_n_f32_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f32.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_nf32_u32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtQ_nf32_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtQ_nf32_u32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_float32x4_t = vcvtq_n_f32_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f32.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_ns32_f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtQ_ns32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtQ_ns32_f32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_int32x4_t = vcvtq_n_s32_f32 (arg0_float32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.s32.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_nu32_f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtQ_nu32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtQ_nu32_f32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_uint32x4_t = vcvtq_n_u32_f32 (arg0_float32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.u32.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQf32_s32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtQf32_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtQf32_s32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_float32x4_t = vcvtq_f32_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f32.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQf32_u32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtQf32_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtQf32_u32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_float32x4_t = vcvtq_f32_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f32.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQs32_f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtQs32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtQs32_f32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_int32x4_t = vcvtq_s32_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.s32.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQu32_f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtQu32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtQu32_f32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_uint32x4_t = vcvtq_u32_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.u32.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvt_nf32_s32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvt_nf32_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvt_nf32_s32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_float32x2_t = vcvt_n_f32_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f32.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvt_nf32_u32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvt_nf32_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvt_nf32_u32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_float32x2_t = vcvt_n_f32_u32 (arg0_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f32.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvt_ns32_f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvt_ns32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvt_ns32_f32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_int32x2_t = vcvt_n_s32_f32 (arg0_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.s32.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvt_nu32_f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvt_nu32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvt_nu32_f32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_uint32x2_t = vcvt_n_u32_f32 (arg0_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.u32.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtf16_f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtf16_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_fp16_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon_fp16 } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtf16_f32 (void)
+-{
+- float16x4_t out_float16x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float16x4_t = vcvt_f16_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f16.f32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtf32_f16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtf32_f16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_fp16_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon_fp16 } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtf32_f16 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float16x4_t arg0_float16x4_t;
+-
+- out_float32x4_t = vcvt_f32_f16 (arg0_float16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f32.f16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtf32_s32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtf32_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtf32_s32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_float32x2_t = vcvt_f32_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f32.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtf32_u32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtf32_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtf32_u32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_float32x2_t = vcvt_f32_u32 (arg0_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.f32.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvts32_f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvts32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvts32_f32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_int32x2_t = vcvt_s32_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.s32.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtu32_f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vcvtu32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vcvtu32_f32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_uint32x2_t = vcvt_u32_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vcvt\.u32.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_lanef32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x4_t = vdupq_lane_f32 (arg0_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_lanep16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_poly16x8_t = vdupq_lane_p16 (arg0_poly16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanep64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdupQ_lanep64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_lanep64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_poly64x2_t = vdupq_lane_p64 (arg0_poly64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_lanep8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly8x16_t = vdupq_lane_p8 (arg0_poly8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_lanes16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x8_t = vdupq_lane_s16 (arg0_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_lanes32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x4_t = vdupq_lane_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdupQ_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_lanes64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int64x2_t = vdupq_lane_s64 (arg0_int64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_lanes8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x16_t = vdupq_lane_s8 (arg0_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_laneu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x8_t = vdupq_lane_u16 (arg0_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_laneu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x4_t = vdupq_lane_u32 (arg0_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdupQ_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_laneu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint64x2_t = vdupq_lane_u64 (arg0_uint64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_laneu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x16_t = vdupq_lane_u8 (arg0_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_nf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32_t arg0_float32_t;
+-
+- out_float32x4_t = vdupq_n_f32 (arg0_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_np16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_np16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_np16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16_t arg0_poly16_t;
+-
+- out_poly16x8_t = vdupq_n_p16 (arg0_poly16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_np64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdupQ_np64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_np64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly64_t arg0_poly64_t;
+-
+- out_poly64x2_t = vdupq_n_p64 (arg0_poly64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_np8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_np8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_np8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8_t arg0_poly8_t;
+-
+- out_poly8x16_t = vdupq_n_p8 (arg0_poly8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16_t arg0_int16_t;
+-
+- out_int16x8_t = vdupq_n_s16 (arg0_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32_t arg0_int32_t;
+-
+- out_int32x4_t = vdupq_n_s32 (arg0_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdupQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64_t arg0_int64_t;
+-
+- out_int64x2_t = vdupq_n_s64 (arg0_int64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8_t arg0_int8_t;
+-
+- out_int8x16_t = vdupq_n_s8 (arg0_int8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16_t arg0_uint16_t;
+-
+- out_uint16x8_t = vdupq_n_u16 (arg0_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32_t arg0_uint32_t;
+-
+- out_uint32x4_t = vdupq_n_u32 (arg0_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdupQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64_t arg0_uint64_t;
+-
+- out_uint64x2_t = vdupq_n_u64 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdupQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdupQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8_t arg0_uint8_t;
+-
+- out_uint8x16_t = vdupq_n_u8 (arg0_uint8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_lanef32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vdup_lane_f32 (arg0_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_lanep16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_poly16x4_t = vdup_lane_p16 (arg0_poly16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanep64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdup_lanep64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_lanep64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_poly64x1_t = vdup_lane_p64 (arg0_poly64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_lanep8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly8x8_t = vdup_lane_p8 (arg0_poly8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_lanes16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vdup_lane_s16 (arg0_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_lanes32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vdup_lane_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdup_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_lanes64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int64x1_t = vdup_lane_s64 (arg0_int64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_lanes8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vdup_lane_s8 (arg0_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_laneu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x4_t = vdup_lane_u16 (arg0_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_laneu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vdup_lane_u32 (arg0_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdup_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_laneu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint64x1_t = vdup_lane_u64 (arg0_uint64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_laneu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vdup_lane_u8 (arg0_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_nf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32_t arg0_float32_t;
+-
+- out_float32x2_t = vdup_n_f32 (arg0_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_np16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_np16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_np16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16_t arg0_poly16_t;
+-
+- out_poly16x4_t = vdup_n_p16 (arg0_poly16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_np64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdup_np64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_np64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly64_t arg0_poly64_t;
+-
+- out_poly64x1_t = vdup_n_p64 (arg0_poly64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_np8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_np8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_np8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8_t arg0_poly8_t;
+-
+- out_poly8x8_t = vdup_n_p8 (arg0_poly8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16_t arg0_int16_t;
+-
+- out_int16x4_t = vdup_n_s16 (arg0_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32_t arg0_int32_t;
+-
+- out_int32x2_t = vdup_n_s32 (arg0_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdup_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64_t arg0_int64_t;
+-
+- out_int64x1_t = vdup_n_s64 (arg0_int64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8_t arg0_int8_t;
+-
+- out_int8x8_t = vdup_n_s8 (arg0_int8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16_t arg0_uint16_t;
+-
+- out_uint16x4_t = vdup_n_u16 (arg0_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32_t arg0_uint32_t;
+-
+- out_uint32x2_t = vdup_n_u32 (arg0_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vdup_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64_t arg0_uint64_t;
+-
+- out_uint64x1_t = vdup_n_u64 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vdup_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vdup_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8_t arg0_uint8_t;
+-
+- out_uint8x8_t = vdup_n_u8 (arg0_uint8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vect-vcvt.c
++++ b/src//dev/null
+@@ -1,27 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details -mvectorize-with-neon-double" } */
+-/* { dg-add-options arm_neon } */
+-
+-#define N 32
+-
+-int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+-float fa[N];
+-int ia[N];
+-
+-int convert()
+-{
+- int i;
+-
+- /* int -> float */
+- for (i = 0; i < N; i++)
+- fa[i] = (float) ib[i];
+-
+- /* float -> int */
+- for (i = 0; i < N; i++)
+- ia[i] = (int) fa[i];
+-
+- return 0;
+-}
+-
+-/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vect-vcvtq.c
++++ b/src//dev/null
+@@ -1,27 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details" } */
+-/* { dg-add-options arm_neon } */
+-
+-#define N 32
+-
+-int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+-float fa[N];
+-int ia[N];
+-
+-int convert()
+-{
+- int i;
+-
+- /* int -> float */
+- for (i = 0; i < N; i++)
+- fa[i] = (float) ib[i];
+-
+- /* float -> int */
+- for (i = 0; i < N; i++)
+- ia[i] = (int) fa[i];
+-
+- return 0;
+-}
+-
+-/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veorQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veorQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = veorq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veorQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veorQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = veorq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veorQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veorQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = veorq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veorQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veorQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = veorq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veorQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veorQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = veorq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veorQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veorQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = veorq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veorQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veorQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = veorq_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veorQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veorQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = veorq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veors16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veors16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veors16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = veor_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veors32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veors32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veors32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = veor_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veors64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `veors64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veors64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = veor_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veors8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veors8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veors8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = veor_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veoru16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veoru16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veoru16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = veor_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veoru32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veoru32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veoru32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = veor_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veoru64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `veoru64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veoru64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = veor_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veoru8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `veoru8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_veoru8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = veor_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "veor\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vextq_f32 (arg0_float32x4_t, arg1_float32x4_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQp16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16x8_t arg0_poly16x8_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- out_poly16x8_t = vextq_p16 (arg0_poly16x8_t, arg1_poly16x8_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQp64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQp64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly64x2_t arg0_poly64x2_t;
+- poly64x2_t arg1_poly64x2_t;
+-
+- out_poly64x2_t = vextq_p64 (arg0_poly64x2_t, arg1_poly64x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_poly8x16_t = vextq_p8 (arg0_poly8x16_t, arg1_poly8x16_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vextq_s16 (arg0_int16x8_t, arg1_int16x8_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vextq_s32 (arg0_int32x4_t, arg1_int32x4_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vextq_s64 (arg0_int64x2_t, arg1_int64x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vextq_s8 (arg0_int8x16_t, arg1_int8x16_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vextq_u16 (arg0_uint16x8_t, arg1_uint16x8_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vextq_u32 (arg0_uint32x4_t, arg1_uint32x4_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vextq_u64 (arg0_uint64x2_t, arg1_uint64x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vextq_u8 (arg0_uint8x16_t, arg1_uint8x16_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vext_f32 (arg0_float32x2_t, arg1_float32x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextp16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16x4_t arg0_poly16x4_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- out_poly16x4_t = vext_p16 (arg0_poly16x4_t, arg1_poly16x4_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextp64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextp64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly64x1_t arg0_poly64x1_t;
+- poly64x1_t arg1_poly64x1_t;
+-
+- out_poly64x1_t = vext_p64 (arg0_poly64x1_t, arg1_poly64x1_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextp8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x8_t = vext_p8 (arg0_poly8x8_t, arg1_poly8x8_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vexts16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vexts16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vexts16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vext_s16 (arg0_int16x4_t, arg1_int16x4_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vexts32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vexts32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vexts32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vext_s32 (arg0_int32x2_t, arg1_int32x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vexts64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vexts64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vexts64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vext_s64 (arg0_int64x1_t, arg1_int64x1_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vexts8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vexts8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vexts8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vext_s8 (arg0_int8x8_t, arg1_int8x8_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vext_u16 (arg0_uint16x4_t, arg1_uint16x4_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vext_u32 (arg0_uint32x2_t, arg1_uint32x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vext_u64 (arg0_uint64x1_t, arg1_uint64x1_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vextu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vextu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vext_u8 (arg0_uint8x8_t, arg1_uint8x8_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vext\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vfmaQf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vfmaQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neonv2_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neonv2 } */
+-
+-#include "arm_neon.h"
+-
+-void test_vfmaQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+- float32x4_t arg2_float32x4_t;
+-
+- out_float32x4_t = vfmaq_f32 (arg0_float32x4_t, arg1_float32x4_t, arg2_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vfma\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vfmaf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vfmaf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neonv2_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neonv2 } */
+-
+-#include "arm_neon.h"
+-
+-void test_vfmaf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+- float32x2_t arg2_float32x2_t;
+-
+- out_float32x2_t = vfma_f32 (arg0_float32x2_t, arg1_float32x2_t, arg2_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vfma\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vfmsQf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vfmsQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neonv2_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neonv2 } */
+-
+-#include "arm_neon.h"
+-
+-void test_vfmsQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+- float32x4_t arg2_float32x4_t;
+-
+- out_float32x4_t = vfmsq_f32 (arg0_float32x4_t, arg1_float32x4_t, arg2_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vfms\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vfmsf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vfmsf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neonv2_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neonv2 } */
+-
+-#include "arm_neon.h"
+-
+-void test_vfmsf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+- float32x2_t arg2_float32x2_t;
+-
+- out_float32x2_t = vfms_f32 (arg0_float32x2_t, arg1_float32x2_t, arg2_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vfms\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c
++++ b/src//dev/null
+@@ -1,27 +0,0 @@
+-/* Check that NEON vector shifts support immediate values == size. /*
+-
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include <arm_neon.h>
+-
+-uint16x8_t test_vshll_n_u8 (uint8x8_t a)
+-{
+- return vshll_n_u8(a, 8);
+-}
+-
+-uint32x4_t test_vshll_n_u16 (uint16x4_t a)
+-{
+- return vshll_n_u16(a, 16);
+-}
+-
+-uint64x2_t test_vshll_n_u32 (uint32x2_t a)
+-{
+- return vshll_n_u32(a, 32);
+-}
+-
+-/* { dg-final { scan-assembler "vshll\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vshll\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vshll\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_lanef32 (void)
+-{
+- float32_t out_float32_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32_t = vgetq_lane_f32 (arg0_float32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_lanep16 (void)
+-{
+- poly16_t out_poly16_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_poly16_t = vgetq_lane_p16 (arg0_poly16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.u16\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_lanep8 (void)
+-{
+- poly8_t out_poly8_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly8_t = vgetq_lane_p8 (arg0_poly8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.u8\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_lanes16 (void)
+-{
+- int16_t out_int16_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16_t = vgetq_lane_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.s16\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_lanes32 (void)
+-{
+- int32_t out_int32_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32_t = vgetq_lane_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_lanes64 (void)
+-{
+- register int64_t out_int64_t asm ("r0");
+- int64x2_t arg0_int64x2_t;
+-
+- out_int64_t = vgetq_lane_s64 (arg0_int64x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "((vmov)|(fmrrd))\[ \]+\[rR\]\[0-9\]+, \[rR\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_lanes8 (void)
+-{
+- int8_t out_int8_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8_t = vgetq_lane_s8 (arg0_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.s8\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_laneu16 (void)
+-{
+- uint16_t out_uint16_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16_t = vgetq_lane_u16 (arg0_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.u16\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_laneu32 (void)
+-{
+- uint32_t out_uint32_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32_t = vgetq_lane_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_laneu64 (void)
+-{
+- register uint64_t out_uint64_t asm ("r0");
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint64_t = vgetq_lane_u64 (arg0_uint64x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "((vmov)|(fmrrd))\[ \]+\[rR\]\[0-9\]+, \[rR\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vgetQ_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vgetQ_laneu8 (void)
+-{
+- uint8_t out_uint8_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8_t = vgetq_lane_u8 (arg0_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.u8\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highf32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x2_t = vget_high_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highp16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highp16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_poly16x4_t = vget_high_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highp64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highp64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_poly64x1_t = vget_high_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highp8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highp8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly8x8_t = vget_high_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highs16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x4_t = vget_high_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highs32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x2_t = vget_high_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highs64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highs64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int64x1_t = vget_high_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highs8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x8_t = vget_high_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highu16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x4_t = vget_high_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highu32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x2_t = vget_high_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint64x1_t = vget_high_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highu8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_highu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_highu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x8_t = vget_high_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lanef32 (void)
+-{
+- float32_t out_float32_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32_t = vget_lane_f32 (arg0_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lanep16 (void)
+-{
+- poly16_t out_poly16_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_poly16_t = vget_lane_p16 (arg0_poly16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.u16\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lanep8 (void)
+-{
+- poly8_t out_poly8_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly8_t = vget_lane_p8 (arg0_poly8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.u8\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lanes16 (void)
+-{
+- int16_t out_int16_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16_t = vget_lane_s16 (arg0_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.s16\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lanes32 (void)
+-{
+- int32_t out_int32_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32_t = vget_lane_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lanes64 (void)
+-{
+- int64_t out_int64_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int64_t = vget_lane_s64 (arg0_int64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lanes8 (void)
+-{
+- int8_t out_int8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8_t = vget_lane_s8 (arg0_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.s8\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_laneu16 (void)
+-{
+- uint16_t out_uint16_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16_t = vget_lane_u16 (arg0_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.u16\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_laneu32 (void)
+-{
+- uint32_t out_uint32_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32_t = vget_lane_u32 (arg0_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_laneu64 (void)
+-{
+- uint64_t out_uint64_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint64_t = vget_lane_u64 (arg0_uint64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_laneu8 (void)
+-{
+- uint8_t out_uint8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8_t = vget_lane_u8 (arg0_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.u8\[ \]+\[rR\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lowf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lowf32 (void)
+-{
+- register float32x2_t out_float32x2_t asm ("d18");
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x2_t = vget_low_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lowp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lowp16 (void)
+-{
+- register poly16x4_t out_poly16x4_t asm ("d18");
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_poly16x4_t = vget_low_p16 (arg0_poly16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowp64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_lowp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lowp64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_poly64x1_t = vget_low_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lowp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lowp8 (void)
+-{
+- register poly8x8_t out_poly8x8_t asm ("d18");
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly8x8_t = vget_low_p8 (arg0_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lows16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lows16 (void)
+-{
+- register int16x4_t out_int16x4_t asm ("d18");
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x4_t = vget_low_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lows32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lows32 (void)
+-{
+- register int32x2_t out_int32x2_t asm ("d18");
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x2_t = vget_low_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_lows64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lows64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int64x1_t = vget_low_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lows8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lows8 (void)
+-{
+- register int8x8_t out_int8x8_t asm ("d18");
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x8_t = vget_low_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lowu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lowu16 (void)
+-{
+- register uint16x4_t out_uint16x4_t asm ("d18");
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x4_t = vget_low_u16 (arg0_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lowu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lowu32 (void)
+-{
+- register uint32x2_t out_uint32x2_t asm ("d18");
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x2_t = vget_low_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vget_lowu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lowu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint64x1_t = vget_low_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vget_lowu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vget_lowu8 (void)
+-{
+- register uint8x8_t out_uint8x8_t asm ("d18");
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x8_t = vget_low_u8 (arg0_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhaddQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhaddQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vhaddq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhaddQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhaddQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vhaddq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhaddQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhaddQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vhaddq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhaddQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhaddQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vhaddq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhaddQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhaddQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vhaddq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhaddQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhaddQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vhaddq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhadds16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhadds16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhadds16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vhadd_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhadds32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhadds32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhadds32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vhadd_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhadds8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhadds8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhadds8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vhadd_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhaddu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhaddu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vhadd_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhaddu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhaddu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vhadd_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhaddu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhaddu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vhadd_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhadd\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vhsubq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vhsubq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vhsubq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vhsubq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vhsubq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vhsubq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vhsub_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vhsub_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vhsub_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vhsub_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vhsub_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vhsubu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vhsubu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vhsub_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vhsub\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupf32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dupf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dupf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+-
+- out_float32x4_t = vld1q_dup_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dupp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dupp16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+-
+- out_poly16x8_t = vld1q_dup_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dupp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dupp64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+-
+- out_poly64x2_t = vld1q_dup_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dupp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dupp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+-
+- out_poly8x16_t = vld1q_dup_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dups16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dups16 (void)
+-{
+- int16x8_t out_int16x8_t;
+-
+- out_int16x8_t = vld1q_dup_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dups32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dups32 (void)
+-{
+- int32x4_t out_int32x4_t;
+-
+- out_int32x4_t = vld1q_dup_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dups64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dups64 (void)
+-{
+- int64x2_t out_int64x2_t;
+-
+- out_int64x2_t = vld1q_dup_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dups8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dups8 (void)
+-{
+- int8x16_t out_int8x16_t;
+-
+- out_int8x16_t = vld1q_dup_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dupu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dupu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+-
+- out_uint16x8_t = vld1q_dup_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dupu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dupu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+-
+- out_uint32x4_t = vld1q_dup_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dupu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dupu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+-
+- out_uint64x2_t = vld1q_dup_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Q_dupu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_dupu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+-
+- out_uint8x16_t = vld1q_dup_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_lanef32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vld1q_lane_f32 (0, arg1_float32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_lanep16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- out_poly16x8_t = vld1q_lane_p16 (0, arg1_poly16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_lanep64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_lanep64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly64x2_t arg1_poly64x2_t;
+-
+- out_poly64x2_t = vld1q_lane_p64 (0, arg1_poly64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_lanep8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_poly8x16_t = vld1q_lane_p8 (0, arg1_poly8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_lanes16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vld1q_lane_s16 (0, arg1_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_lanes32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vld1q_lane_s32 (0, arg1_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_lanes64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vld1q_lane_s64 (0, arg1_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_lanes8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vld1q_lane_s8 (0, arg1_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_laneu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vld1q_lane_u16 (0, arg1_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_laneu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vld1q_lane_u32 (0, arg1_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_laneu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vld1q_lane_u64 (0, arg1_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1Q_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Q_laneu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vld1q_lane_u8 (0, arg1_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qf32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+-
+- out_float32x4_t = vld1q_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qp16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+-
+- out_poly16x8_t = vld1q_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qp64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+-
+- out_poly64x2_t = vld1q_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+-
+- out_poly8x16_t = vld1q_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+-
+- out_int16x8_t = vld1q_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+-
+- out_int32x4_t = vld1q_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+-
+- out_int64x2_t = vld1q_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+-
+- out_int8x16_t = vld1q_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+-
+- out_uint16x8_t = vld1q_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+-
+- out_uint32x4_t = vld1q_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+-
+- out_uint64x2_t = vld1q_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1Qu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+-
+- out_uint8x16_t = vld1q_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupf32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dupf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dupf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+-
+- out_float32x2_t = vld1_dup_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dupp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dupp16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+-
+- out_poly16x4_t = vld1_dup_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dupp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dupp64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+-
+- out_poly64x1_t = vld1_dup_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dupp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dupp8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+-
+- out_poly8x8_t = vld1_dup_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dups16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dups16 (void)
+-{
+- int16x4_t out_int16x4_t;
+-
+- out_int16x4_t = vld1_dup_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dups32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dups32 (void)
+-{
+- int32x2_t out_int32x2_t;
+-
+- out_int32x2_t = vld1_dup_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dups64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dups64 (void)
+-{
+- int64x1_t out_int64x1_t;
+-
+- out_int64x1_t = vld1_dup_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dups8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dups8 (void)
+-{
+- int8x8_t out_int8x8_t;
+-
+- out_int8x8_t = vld1_dup_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dupu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dupu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+-
+- out_uint16x4_t = vld1_dup_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dupu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dupu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+-
+- out_uint32x2_t = vld1_dup_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dupu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dupu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+-
+- out_uint64x1_t = vld1_dup_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1_dupu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_dupu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+-
+- out_uint8x8_t = vld1_dup_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_lanef32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vld1_lane_f32 (0, arg1_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_lanep16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- out_poly16x4_t = vld1_lane_p16 (0, arg1_poly16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_lanep64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_lanep64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly64x1_t arg1_poly64x1_t;
+-
+- out_poly64x1_t = vld1_lane_p64 (0, arg1_poly64x1_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_lanep8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x8_t = vld1_lane_p8 (0, arg1_poly8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_lanes16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vld1_lane_s16 (0, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_lanes32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vld1_lane_s32 (0, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_lanes64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vld1_lane_s64 (0, arg1_int64x1_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_lanes8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vld1_lane_s8 (0, arg1_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_laneu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vld1_lane_u16 (0, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_laneu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vld1_lane_u32 (0, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_laneu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vld1_lane_u64 (0, arg1_uint64x1_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld1_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1_laneu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vld1_lane_u8 (0, arg1_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1f32 (void)
+-{
+- float32x2_t out_float32x2_t;
+-
+- out_float32x2_t = vld1_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1p16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+-
+- out_poly16x4_t = vld1_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1p64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+-
+- out_poly64x1_t = vld1_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+-
+- out_poly8x8_t = vld1_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1s16 (void)
+-{
+- int16x4_t out_int16x4_t;
+-
+- out_int16x4_t = vld1_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1s32 (void)
+-{
+- int32x2_t out_int32x2_t;
+-
+- out_int32x2_t = vld1_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1s64 (void)
+-{
+- int64x1_t out_int64x1_t;
+-
+- out_int64x1_t = vld1_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+-
+- out_int8x8_t = vld1_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1u16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+-
+- out_uint16x4_t = vld1_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1u32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+-
+- out_uint32x2_t = vld1_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1u64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+-
+- out_uint64x1_t = vld1_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld1u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld1u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+-
+- out_uint8x8_t = vld1_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Q_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Q_lanef32 (void)
+-{
+- float32x4x2_t out_float32x4x2_t;
+- float32x4x2_t arg1_float32x4x2_t;
+-
+- out_float32x4x2_t = vld2q_lane_f32 (0, arg1_float32x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Q_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Q_lanep16 (void)
+-{
+- poly16x8x2_t out_poly16x8x2_t;
+- poly16x8x2_t arg1_poly16x8x2_t;
+-
+- out_poly16x8x2_t = vld2q_lane_p16 (0, arg1_poly16x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Q_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Q_lanes16 (void)
+-{
+- int16x8x2_t out_int16x8x2_t;
+- int16x8x2_t arg1_int16x8x2_t;
+-
+- out_int16x8x2_t = vld2q_lane_s16 (0, arg1_int16x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Q_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Q_lanes32 (void)
+-{
+- int32x4x2_t out_int32x4x2_t;
+- int32x4x2_t arg1_int32x4x2_t;
+-
+- out_int32x4x2_t = vld2q_lane_s32 (0, arg1_int32x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Q_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Q_laneu16 (void)
+-{
+- uint16x8x2_t out_uint16x8x2_t;
+- uint16x8x2_t arg1_uint16x8x2_t;
+-
+- out_uint16x8x2_t = vld2q_lane_u16 (0, arg1_uint16x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Q_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Q_laneu32 (void)
+-{
+- uint32x4x2_t out_uint32x4x2_t;
+- uint32x4x2_t arg1_uint32x4x2_t;
+-
+- out_uint32x4x2_t = vld2q_lane_u32 (0, arg1_uint32x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Qf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Qf32 (void)
+-{
+- float32x4x2_t out_float32x4x2_t;
+-
+- out_float32x4x2_t = vld2q_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Qp16 (void)
+-{
+- poly16x8x2_t out_poly16x8x2_t;
+-
+- out_poly16x8x2_t = vld2q_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Qp8 (void)
+-{
+- poly8x16x2_t out_poly8x16x2_t;
+-
+- out_poly8x16x2_t = vld2q_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Qs16 (void)
+-{
+- int16x8x2_t out_int16x8x2_t;
+-
+- out_int16x8x2_t = vld2q_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Qs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Qs32 (void)
+-{
+- int32x4x2_t out_int32x4x2_t;
+-
+- out_int32x4x2_t = vld2q_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Qs8 (void)
+-{
+- int8x16x2_t out_int8x16x2_t;
+-
+- out_int8x16x2_t = vld2q_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Qu16 (void)
+-{
+- uint16x8x2_t out_uint16x8x2_t;
+-
+- out_uint16x8x2_t = vld2q_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Qu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Qu32 (void)
+-{
+- uint32x4x2_t out_uint32x4x2_t;
+-
+- out_uint32x4x2_t = vld2q_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2Qu8 (void)
+-{
+- uint8x16x2_t out_uint8x16x2_t;
+-
+- out_uint8x16x2_t = vld2q_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupf32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dupf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dupf32 (void)
+-{
+- float32x2x2_t out_float32x2x2_t;
+-
+- out_float32x2x2_t = vld2_dup_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dupp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dupp16 (void)
+-{
+- poly16x4x2_t out_poly16x4x2_t;
+-
+- out_poly16x4x2_t = vld2_dup_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dupp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dupp64 (void)
+-{
+- poly64x1x2_t out_poly64x1x2_t;
+-
+- out_poly64x1x2_t = vld2_dup_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dupp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dupp8 (void)
+-{
+- poly8x8x2_t out_poly8x8x2_t;
+-
+- out_poly8x8x2_t = vld2_dup_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dups16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dups16 (void)
+-{
+- int16x4x2_t out_int16x4x2_t;
+-
+- out_int16x4x2_t = vld2_dup_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dups32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dups32 (void)
+-{
+- int32x2x2_t out_int32x2x2_t;
+-
+- out_int32x2x2_t = vld2_dup_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dups64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dups64 (void)
+-{
+- int64x1x2_t out_int64x1x2_t;
+-
+- out_int64x1x2_t = vld2_dup_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dups8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dups8 (void)
+-{
+- int8x8x2_t out_int8x8x2_t;
+-
+- out_int8x8x2_t = vld2_dup_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dupu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dupu16 (void)
+-{
+- uint16x4x2_t out_uint16x4x2_t;
+-
+- out_uint16x4x2_t = vld2_dup_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dupu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dupu32 (void)
+-{
+- uint32x2x2_t out_uint32x2x2_t;
+-
+- out_uint32x2x2_t = vld2_dup_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dupu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dupu64 (void)
+-{
+- uint64x1x2_t out_uint64x1x2_t;
+-
+- out_uint64x1x2_t = vld2_dup_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2_dupu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_dupu8 (void)
+-{
+- uint8x8x2_t out_uint8x8x2_t;
+-
+- out_uint8x8x2_t = vld2_dup_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_lanef32 (void)
+-{
+- float32x2x2_t out_float32x2x2_t;
+- float32x2x2_t arg1_float32x2x2_t;
+-
+- out_float32x2x2_t = vld2_lane_f32 (0, arg1_float32x2x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_lanep16 (void)
+-{
+- poly16x4x2_t out_poly16x4x2_t;
+- poly16x4x2_t arg1_poly16x4x2_t;
+-
+- out_poly16x4x2_t = vld2_lane_p16 (0, arg1_poly16x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_lanep8 (void)
+-{
+- poly8x8x2_t out_poly8x8x2_t;
+- poly8x8x2_t arg1_poly8x8x2_t;
+-
+- out_poly8x8x2_t = vld2_lane_p8 (0, arg1_poly8x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_lanes16 (void)
+-{
+- int16x4x2_t out_int16x4x2_t;
+- int16x4x2_t arg1_int16x4x2_t;
+-
+- out_int16x4x2_t = vld2_lane_s16 (0, arg1_int16x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_lanes32 (void)
+-{
+- int32x2x2_t out_int32x2x2_t;
+- int32x2x2_t arg1_int32x2x2_t;
+-
+- out_int32x2x2_t = vld2_lane_s32 (0, arg1_int32x2x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_lanes8 (void)
+-{
+- int8x8x2_t out_int8x8x2_t;
+- int8x8x2_t arg1_int8x8x2_t;
+-
+- out_int8x8x2_t = vld2_lane_s8 (0, arg1_int8x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_laneu16 (void)
+-{
+- uint16x4x2_t out_uint16x4x2_t;
+- uint16x4x2_t arg1_uint16x4x2_t;
+-
+- out_uint16x4x2_t = vld2_lane_u16 (0, arg1_uint16x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_laneu32 (void)
+-{
+- uint32x2x2_t out_uint32x2x2_t;
+- uint32x2x2_t arg1_uint32x2x2_t;
+-
+- out_uint32x2x2_t = vld2_lane_u32 (0, arg1_uint32x2x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld2_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2_laneu8 (void)
+-{
+- uint8x8x2_t out_uint8x8x2_t;
+- uint8x8x2_t arg1_uint8x8x2_t;
+-
+- out_uint8x8x2_t = vld2_lane_u8 (0, arg1_uint8x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2f32 (void)
+-{
+- float32x2x2_t out_float32x2x2_t;
+-
+- out_float32x2x2_t = vld2_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2p16 (void)
+-{
+- poly16x4x2_t out_poly16x4x2_t;
+-
+- out_poly16x4x2_t = vld2_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2p64 (void)
+-{
+- poly64x1x2_t out_poly64x1x2_t;
+-
+- out_poly64x1x2_t = vld2_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2p8 (void)
+-{
+- poly8x8x2_t out_poly8x8x2_t;
+-
+- out_poly8x8x2_t = vld2_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2s16 (void)
+-{
+- int16x4x2_t out_int16x4x2_t;
+-
+- out_int16x4x2_t = vld2_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2s32 (void)
+-{
+- int32x2x2_t out_int32x2x2_t;
+-
+- out_int32x2x2_t = vld2_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2s64 (void)
+-{
+- int64x1x2_t out_int64x1x2_t;
+-
+- out_int64x1x2_t = vld2_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2s8 (void)
+-{
+- int8x8x2_t out_int8x8x2_t;
+-
+- out_int8x8x2_t = vld2_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2u16 (void)
+-{
+- uint16x4x2_t out_uint16x4x2_t;
+-
+- out_uint16x4x2_t = vld2_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2u32 (void)
+-{
+- uint32x2x2_t out_uint32x2x2_t;
+-
+- out_uint32x2x2_t = vld2_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2u64 (void)
+-{
+- uint64x1x2_t out_uint64x1x2_t;
+-
+- out_uint64x1x2_t = vld2_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld2u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld2u8 (void)
+-{
+- uint8x8x2_t out_uint8x8x2_t;
+-
+- out_uint8x8x2_t = vld2_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Q_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Q_lanef32 (void)
+-{
+- float32x4x3_t out_float32x4x3_t;
+- float32x4x3_t arg1_float32x4x3_t;
+-
+- out_float32x4x3_t = vld3q_lane_f32 (0, arg1_float32x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Q_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Q_lanep16 (void)
+-{
+- poly16x8x3_t out_poly16x8x3_t;
+- poly16x8x3_t arg1_poly16x8x3_t;
+-
+- out_poly16x8x3_t = vld3q_lane_p16 (0, arg1_poly16x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Q_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Q_lanes16 (void)
+-{
+- int16x8x3_t out_int16x8x3_t;
+- int16x8x3_t arg1_int16x8x3_t;
+-
+- out_int16x8x3_t = vld3q_lane_s16 (0, arg1_int16x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Q_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Q_lanes32 (void)
+-{
+- int32x4x3_t out_int32x4x3_t;
+- int32x4x3_t arg1_int32x4x3_t;
+-
+- out_int32x4x3_t = vld3q_lane_s32 (0, arg1_int32x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Q_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Q_laneu16 (void)
+-{
+- uint16x8x3_t out_uint16x8x3_t;
+- uint16x8x3_t arg1_uint16x8x3_t;
+-
+- out_uint16x8x3_t = vld3q_lane_u16 (0, arg1_uint16x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Q_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Q_laneu32 (void)
+-{
+- uint32x4x3_t out_uint32x4x3_t;
+- uint32x4x3_t arg1_uint32x4x3_t;
+-
+- out_uint32x4x3_t = vld3q_lane_u32 (0, arg1_uint32x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Qf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Qf32 (void)
+-{
+- float32x4x3_t out_float32x4x3_t;
+-
+- out_float32x4x3_t = vld3q_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Qp16 (void)
+-{
+- poly16x8x3_t out_poly16x8x3_t;
+-
+- out_poly16x8x3_t = vld3q_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Qp8 (void)
+-{
+- poly8x16x3_t out_poly8x16x3_t;
+-
+- out_poly8x16x3_t = vld3q_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Qs16 (void)
+-{
+- int16x8x3_t out_int16x8x3_t;
+-
+- out_int16x8x3_t = vld3q_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Qs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Qs32 (void)
+-{
+- int32x4x3_t out_int32x4x3_t;
+-
+- out_int32x4x3_t = vld3q_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Qs8 (void)
+-{
+- int8x16x3_t out_int8x16x3_t;
+-
+- out_int8x16x3_t = vld3q_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Qu16 (void)
+-{
+- uint16x8x3_t out_uint16x8x3_t;
+-
+- out_uint16x8x3_t = vld3q_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Qu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Qu32 (void)
+-{
+- uint32x4x3_t out_uint32x4x3_t;
+-
+- out_uint32x4x3_t = vld3q_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3Qu8 (void)
+-{
+- uint8x16x3_t out_uint8x16x3_t;
+-
+- out_uint8x16x3_t = vld3q_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupf32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dupf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dupf32 (void)
+-{
+- float32x2x3_t out_float32x2x3_t;
+-
+- out_float32x2x3_t = vld3_dup_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dupp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dupp16 (void)
+-{
+- poly16x4x3_t out_poly16x4x3_t;
+-
+- out_poly16x4x3_t = vld3_dup_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dupp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dupp64 (void)
+-{
+- poly64x1x3_t out_poly64x1x3_t;
+-
+- out_poly64x1x3_t = vld3_dup_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dupp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dupp8 (void)
+-{
+- poly8x8x3_t out_poly8x8x3_t;
+-
+- out_poly8x8x3_t = vld3_dup_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dups16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dups16 (void)
+-{
+- int16x4x3_t out_int16x4x3_t;
+-
+- out_int16x4x3_t = vld3_dup_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dups32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dups32 (void)
+-{
+- int32x2x3_t out_int32x2x3_t;
+-
+- out_int32x2x3_t = vld3_dup_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dups64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dups64 (void)
+-{
+- int64x1x3_t out_int64x1x3_t;
+-
+- out_int64x1x3_t = vld3_dup_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dups8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dups8 (void)
+-{
+- int8x8x3_t out_int8x8x3_t;
+-
+- out_int8x8x3_t = vld3_dup_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dupu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dupu16 (void)
+-{
+- uint16x4x3_t out_uint16x4x3_t;
+-
+- out_uint16x4x3_t = vld3_dup_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dupu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dupu32 (void)
+-{
+- uint32x2x3_t out_uint32x2x3_t;
+-
+- out_uint32x2x3_t = vld3_dup_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dupu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dupu64 (void)
+-{
+- uint64x1x3_t out_uint64x1x3_t;
+-
+- out_uint64x1x3_t = vld3_dup_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3_dupu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_dupu8 (void)
+-{
+- uint8x8x3_t out_uint8x8x3_t;
+-
+- out_uint8x8x3_t = vld3_dup_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_lanef32 (void)
+-{
+- float32x2x3_t out_float32x2x3_t;
+- float32x2x3_t arg1_float32x2x3_t;
+-
+- out_float32x2x3_t = vld3_lane_f32 (0, arg1_float32x2x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_lanep16 (void)
+-{
+- poly16x4x3_t out_poly16x4x3_t;
+- poly16x4x3_t arg1_poly16x4x3_t;
+-
+- out_poly16x4x3_t = vld3_lane_p16 (0, arg1_poly16x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_lanep8 (void)
+-{
+- poly8x8x3_t out_poly8x8x3_t;
+- poly8x8x3_t arg1_poly8x8x3_t;
+-
+- out_poly8x8x3_t = vld3_lane_p8 (0, arg1_poly8x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_lanes16 (void)
+-{
+- int16x4x3_t out_int16x4x3_t;
+- int16x4x3_t arg1_int16x4x3_t;
+-
+- out_int16x4x3_t = vld3_lane_s16 (0, arg1_int16x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_lanes32 (void)
+-{
+- int32x2x3_t out_int32x2x3_t;
+- int32x2x3_t arg1_int32x2x3_t;
+-
+- out_int32x2x3_t = vld3_lane_s32 (0, arg1_int32x2x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_lanes8 (void)
+-{
+- int8x8x3_t out_int8x8x3_t;
+- int8x8x3_t arg1_int8x8x3_t;
+-
+- out_int8x8x3_t = vld3_lane_s8 (0, arg1_int8x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_laneu16 (void)
+-{
+- uint16x4x3_t out_uint16x4x3_t;
+- uint16x4x3_t arg1_uint16x4x3_t;
+-
+- out_uint16x4x3_t = vld3_lane_u16 (0, arg1_uint16x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_laneu32 (void)
+-{
+- uint32x2x3_t out_uint32x2x3_t;
+- uint32x2x3_t arg1_uint32x2x3_t;
+-
+- out_uint32x2x3_t = vld3_lane_u32 (0, arg1_uint32x2x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld3_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3_laneu8 (void)
+-{
+- uint8x8x3_t out_uint8x8x3_t;
+- uint8x8x3_t arg1_uint8x8x3_t;
+-
+- out_uint8x8x3_t = vld3_lane_u8 (0, arg1_uint8x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3f32 (void)
+-{
+- float32x2x3_t out_float32x2x3_t;
+-
+- out_float32x2x3_t = vld3_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3p16 (void)
+-{
+- poly16x4x3_t out_poly16x4x3_t;
+-
+- out_poly16x4x3_t = vld3_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3p64 (void)
+-{
+- poly64x1x3_t out_poly64x1x3_t;
+-
+- out_poly64x1x3_t = vld3_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3p8 (void)
+-{
+- poly8x8x3_t out_poly8x8x3_t;
+-
+- out_poly8x8x3_t = vld3_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3s16 (void)
+-{
+- int16x4x3_t out_int16x4x3_t;
+-
+- out_int16x4x3_t = vld3_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3s32 (void)
+-{
+- int32x2x3_t out_int32x2x3_t;
+-
+- out_int32x2x3_t = vld3_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3s64 (void)
+-{
+- int64x1x3_t out_int64x1x3_t;
+-
+- out_int64x1x3_t = vld3_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3s8 (void)
+-{
+- int8x8x3_t out_int8x8x3_t;
+-
+- out_int8x8x3_t = vld3_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3u16 (void)
+-{
+- uint16x4x3_t out_uint16x4x3_t;
+-
+- out_uint16x4x3_t = vld3_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3u32 (void)
+-{
+- uint32x2x3_t out_uint32x2x3_t;
+-
+- out_uint32x2x3_t = vld3_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3u64 (void)
+-{
+- uint64x1x3_t out_uint64x1x3_t;
+-
+- out_uint64x1x3_t = vld3_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld3u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld3u8 (void)
+-{
+- uint8x8x3_t out_uint8x8x3_t;
+-
+- out_uint8x8x3_t = vld3_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Q_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Q_lanef32 (void)
+-{
+- float32x4x4_t out_float32x4x4_t;
+- float32x4x4_t arg1_float32x4x4_t;
+-
+- out_float32x4x4_t = vld4q_lane_f32 (0, arg1_float32x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Q_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Q_lanep16 (void)
+-{
+- poly16x8x4_t out_poly16x8x4_t;
+- poly16x8x4_t arg1_poly16x8x4_t;
+-
+- out_poly16x8x4_t = vld4q_lane_p16 (0, arg1_poly16x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Q_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Q_lanes16 (void)
+-{
+- int16x8x4_t out_int16x8x4_t;
+- int16x8x4_t arg1_int16x8x4_t;
+-
+- out_int16x8x4_t = vld4q_lane_s16 (0, arg1_int16x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Q_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Q_lanes32 (void)
+-{
+- int32x4x4_t out_int32x4x4_t;
+- int32x4x4_t arg1_int32x4x4_t;
+-
+- out_int32x4x4_t = vld4q_lane_s32 (0, arg1_int32x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Q_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Q_laneu16 (void)
+-{
+- uint16x8x4_t out_uint16x8x4_t;
+- uint16x8x4_t arg1_uint16x8x4_t;
+-
+- out_uint16x8x4_t = vld4q_lane_u16 (0, arg1_uint16x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Q_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Q_laneu32 (void)
+-{
+- uint32x4x4_t out_uint32x4x4_t;
+- uint32x4x4_t arg1_uint32x4x4_t;
+-
+- out_uint32x4x4_t = vld4q_lane_u32 (0, arg1_uint32x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Qf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Qf32 (void)
+-{
+- float32x4x4_t out_float32x4x4_t;
+-
+- out_float32x4x4_t = vld4q_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Qp16 (void)
+-{
+- poly16x8x4_t out_poly16x8x4_t;
+-
+- out_poly16x8x4_t = vld4q_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Qp8 (void)
+-{
+- poly8x16x4_t out_poly8x16x4_t;
+-
+- out_poly8x16x4_t = vld4q_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Qs16 (void)
+-{
+- int16x8x4_t out_int16x8x4_t;
+-
+- out_int16x8x4_t = vld4q_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Qs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Qs32 (void)
+-{
+- int32x4x4_t out_int32x4x4_t;
+-
+- out_int32x4x4_t = vld4q_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Qs8 (void)
+-{
+- int8x16x4_t out_int8x16x4_t;
+-
+- out_int8x16x4_t = vld4q_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Qu16 (void)
+-{
+- uint16x8x4_t out_uint16x8x4_t;
+-
+- out_uint16x8x4_t = vld4q_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Qu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Qu32 (void)
+-{
+- uint32x4x4_t out_uint32x4x4_t;
+-
+- out_uint32x4x4_t = vld4q_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4Qu8 (void)
+-{
+- uint8x16x4_t out_uint8x16x4_t;
+-
+- out_uint8x16x4_t = vld4q_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupf32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dupf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dupf32 (void)
+-{
+- float32x2x4_t out_float32x2x4_t;
+-
+- out_float32x2x4_t = vld4_dup_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dupp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dupp16 (void)
+-{
+- poly16x4x4_t out_poly16x4x4_t;
+-
+- out_poly16x4x4_t = vld4_dup_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dupp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dupp64 (void)
+-{
+- poly64x1x4_t out_poly64x1x4_t;
+-
+- out_poly64x1x4_t = vld4_dup_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dupp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dupp8 (void)
+-{
+- poly8x8x4_t out_poly8x8x4_t;
+-
+- out_poly8x8x4_t = vld4_dup_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dups16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dups16 (void)
+-{
+- int16x4x4_t out_int16x4x4_t;
+-
+- out_int16x4x4_t = vld4_dup_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dups32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dups32 (void)
+-{
+- int32x2x4_t out_int32x2x4_t;
+-
+- out_int32x2x4_t = vld4_dup_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dups64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dups64 (void)
+-{
+- int64x1x4_t out_int64x1x4_t;
+-
+- out_int64x1x4_t = vld4_dup_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dups8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dups8 (void)
+-{
+- int8x8x4_t out_int8x8x4_t;
+-
+- out_int8x8x4_t = vld4_dup_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dupu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dupu16 (void)
+-{
+- uint16x4x4_t out_uint16x4x4_t;
+-
+- out_uint16x4x4_t = vld4_dup_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dupu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dupu32 (void)
+-{
+- uint32x2x4_t out_uint32x2x4_t;
+-
+- out_uint32x2x4_t = vld4_dup_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dupu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dupu64 (void)
+-{
+- uint64x1x4_t out_uint64x1x4_t;
+-
+- out_uint64x1x4_t = vld4_dup_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4_dupu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_dupu8 (void)
+-{
+- uint8x8x4_t out_uint8x8x4_t;
+-
+- out_uint8x8x4_t = vld4_dup_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_lanef32 (void)
+-{
+- float32x2x4_t out_float32x2x4_t;
+- float32x2x4_t arg1_float32x2x4_t;
+-
+- out_float32x2x4_t = vld4_lane_f32 (0, arg1_float32x2x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_lanep16 (void)
+-{
+- poly16x4x4_t out_poly16x4x4_t;
+- poly16x4x4_t arg1_poly16x4x4_t;
+-
+- out_poly16x4x4_t = vld4_lane_p16 (0, arg1_poly16x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_lanep8 (void)
+-{
+- poly8x8x4_t out_poly8x8x4_t;
+- poly8x8x4_t arg1_poly8x8x4_t;
+-
+- out_poly8x8x4_t = vld4_lane_p8 (0, arg1_poly8x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_lanes16 (void)
+-{
+- int16x4x4_t out_int16x4x4_t;
+- int16x4x4_t arg1_int16x4x4_t;
+-
+- out_int16x4x4_t = vld4_lane_s16 (0, arg1_int16x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_lanes32 (void)
+-{
+- int32x2x4_t out_int32x2x4_t;
+- int32x2x4_t arg1_int32x2x4_t;
+-
+- out_int32x2x4_t = vld4_lane_s32 (0, arg1_int32x2x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_lanes8 (void)
+-{
+- int8x8x4_t out_int8x8x4_t;
+- int8x8x4_t arg1_int8x8x4_t;
+-
+- out_int8x8x4_t = vld4_lane_s8 (0, arg1_int8x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_laneu16 (void)
+-{
+- uint16x4x4_t out_uint16x4x4_t;
+- uint16x4x4_t arg1_uint16x4x4_t;
+-
+- out_uint16x4x4_t = vld4_lane_u16 (0, arg1_uint16x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_laneu32 (void)
+-{
+- uint32x2x4_t out_uint32x2x4_t;
+- uint32x2x4_t arg1_uint32x2x4_t;
+-
+- out_uint32x2x4_t = vld4_lane_u32 (0, arg1_uint32x2x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vld4_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4_laneu8 (void)
+-{
+- uint8x8x4_t out_uint8x8x4_t;
+- uint8x8x4_t arg1_uint8x8x4_t;
+-
+- out_uint8x8x4_t = vld4_lane_u8 (0, arg1_uint8x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4f32 (void)
+-{
+- float32x2x4_t out_float32x2x4_t;
+-
+- out_float32x2x4_t = vld4_f32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4p16 (void)
+-{
+- poly16x4x4_t out_poly16x4x4_t;
+-
+- out_poly16x4x4_t = vld4_p16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4p64 (void)
+-{
+- poly64x1x4_t out_poly64x1x4_t;
+-
+- out_poly64x1x4_t = vld4_p64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4p8 (void)
+-{
+- poly8x8x4_t out_poly8x8x4_t;
+-
+- out_poly8x8x4_t = vld4_p8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4s16 (void)
+-{
+- int16x4x4_t out_int16x4x4_t;
+-
+- out_int16x4x4_t = vld4_s16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4s32 (void)
+-{
+- int32x2x4_t out_int32x2x4_t;
+-
+- out_int32x2x4_t = vld4_s32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4s64 (void)
+-{
+- int64x1x4_t out_int64x1x4_t;
+-
+- out_int64x1x4_t = vld4_s64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4s8 (void)
+-{
+- int8x8x4_t out_int8x8x4_t;
+-
+- out_int8x8x4_t = vld4_s8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4u16 (void)
+-{
+- uint16x4x4_t out_uint16x4x4_t;
+-
+- out_uint16x4x4_t = vld4_u16 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4u32 (void)
+-{
+- uint32x2x4_t out_uint32x2x4_t;
+-
+- out_uint32x2x4_t = vld4_u32 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4u64 (void)
+-{
+- uint64x1x4_t out_uint64x1x4_t;
+-
+- out_uint64x1x4_t = vld4_u64 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vld4u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vld4u8 (void)
+-{
+- uint8x8x4_t out_uint8x8x4_t;
+-
+- out_uint8x8x4_t = vld4_u8 (0);
+-}
+-
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vmaxq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vmaxq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vmaxq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vmaxq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vmaxq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vmaxq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vmaxq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vmax_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vmax_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vmax_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vmax_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vmax_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vmax_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmaxu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmaxu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vmax_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmax\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vminq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vminq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vminq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vminq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vminq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vminq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vminq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vmin_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmins16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmins16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmins16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vmin_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmins32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmins32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmins32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vmin_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmins8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmins8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmins8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vmin_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vmin_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vmin_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vminu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vminu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vmin_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmin\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_lanef32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_lanef32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+- float32x2_t arg2_float32x2_t;
+-
+- out_float32x4_t = vmlaq_lane_f32 (arg0_float32x4_t, arg1_float32x4_t, arg2_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_lanes16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_lanes16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int16x8_t = vmlaq_lane_s16 (arg0_int16x8_t, arg1_int16x8_t, arg2_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_lanes32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_lanes32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int32x4_t = vmlaq_lane_s32 (arg0_int32x4_t, arg1_int32x4_t, arg2_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_laneu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_laneu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint16x8_t = vmlaq_lane_u16 (arg0_uint16x8_t, arg1_uint16x8_t, arg2_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_laneu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_laneu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint32x4_t = vmlaq_lane_u32 (arg0_uint32x4_t, arg1_uint32x4_t, arg2_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_nf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_nf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+- float32_t arg2_float32_t;
+-
+- out_float32x4_t = vmlaq_n_f32 (arg0_float32x4_t, arg1_float32x4_t, arg2_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_ns16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+- int16_t arg2_int16_t;
+-
+- out_int16x8_t = vmlaq_n_s16 (arg0_int16x8_t, arg1_int16x8_t, arg2_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_ns32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+- int32_t arg2_int32_t;
+-
+- out_int32x4_t = vmlaq_n_s32 (arg0_int32x4_t, arg1_int32x4_t, arg2_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_nu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+- uint16_t arg2_uint16_t;
+-
+- out_uint16x8_t = vmlaq_n_u16 (arg0_uint16x8_t, arg1_uint16x8_t, arg2_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_nu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+- uint32_t arg2_uint32_t;
+-
+- out_uint32x4_t = vmlaq_n_u32 (arg0_uint32x4_t, arg1_uint32x4_t, arg2_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+- float32x4_t arg2_float32x4_t;
+-
+- out_float32x4_t = vmlaq_f32 (arg0_float32x4_t, arg1_float32x4_t, arg2_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQs16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+- int16x8_t arg2_int16x8_t;
+-
+- out_int16x8_t = vmlaq_s16 (arg0_int16x8_t, arg1_int16x8_t, arg2_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQs32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+- int32x4_t arg2_int32x4_t;
+-
+- out_int32x4_t = vmlaq_s32 (arg0_int32x4_t, arg1_int32x4_t, arg2_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQs8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+- int8x16_t arg2_int8x16_t;
+-
+- out_int8x16_t = vmlaq_s8 (arg0_int8x16_t, arg1_int8x16_t, arg2_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+- uint16x8_t arg2_uint16x8_t;
+-
+- out_uint16x8_t = vmlaq_u16 (arg0_uint16x8_t, arg1_uint16x8_t, arg2_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+- uint32x4_t arg2_uint32x4_t;
+-
+- out_uint32x4_t = vmlaq_u32 (arg0_uint32x4_t, arg1_uint32x4_t, arg2_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQu8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+- uint8x16_t arg2_uint8x16_t;
+-
+- out_uint8x16_t = vmlaq_u8 (arg0_uint8x16_t, arg1_uint8x16_t, arg2_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_lanef32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_lanef32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+- float32x2_t arg2_float32x2_t;
+-
+- out_float32x2_t = vmla_lane_f32 (arg0_float32x2_t, arg1_float32x2_t, arg2_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_lanes16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_lanes16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int16x4_t = vmla_lane_s16 (arg0_int16x4_t, arg1_int16x4_t, arg2_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_lanes32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_lanes32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int32x2_t = vmla_lane_s32 (arg0_int32x2_t, arg1_int32x2_t, arg2_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_laneu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_laneu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint16x4_t = vmla_lane_u16 (arg0_uint16x4_t, arg1_uint16x4_t, arg2_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_laneu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_laneu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint32x2_t = vmla_lane_u32 (arg0_uint32x2_t, arg1_uint32x2_t, arg2_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_nf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_nf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+- float32_t arg2_float32_t;
+-
+- out_float32x2_t = vmla_n_f32 (arg0_float32x2_t, arg1_float32x2_t, arg2_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_ns16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16_t arg2_int16_t;
+-
+- out_int16x4_t = vmla_n_s16 (arg0_int16x4_t, arg1_int16x4_t, arg2_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_ns32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32_t arg2_int32_t;
+-
+- out_int32x2_t = vmla_n_s32 (arg0_int32x2_t, arg1_int32x2_t, arg2_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_nu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16_t arg2_uint16_t;
+-
+- out_uint16x4_t = vmla_n_u16 (arg0_uint16x4_t, arg1_uint16x4_t, arg2_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_nu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmla_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmla_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32_t arg2_uint32_t;
+-
+- out_uint32x2_t = vmla_n_u32 (arg0_uint32x2_t, arg1_uint32x2_t, arg2_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlaf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlaf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+- float32x2_t arg2_float32x2_t;
+-
+- out_float32x2_t = vmla_f32 (arg0_float32x2_t, arg1_float32x2_t, arg2_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_lanes16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlal_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlal_lanes16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int32x4_t = vmlal_lane_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_lanes32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlal_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlal_lanes32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int64x2_t = vmlal_lane_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_laneu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlal_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlal_laneu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint32x4_t = vmlal_lane_u16 (arg0_uint32x4_t, arg1_uint16x4_t, arg2_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_laneu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlal_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlal_laneu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint64x2_t = vmlal_lane_u32 (arg0_uint64x2_t, arg1_uint32x2_t, arg2_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_ns16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlal_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlal_ns16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16_t arg2_int16_t;
+-
+- out_int32x4_t = vmlal_n_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_ns32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlal_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlal_ns32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32_t arg2_int32_t;
+-
+- out_int64x2_t = vmlal_n_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_nu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlal_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlal_nu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16_t arg2_uint16_t;
+-
+- out_uint32x4_t = vmlal_n_u16 (arg0_uint32x4_t, arg1_uint16x4_t, arg2_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_nu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlal_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlal_nu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32_t arg2_uint32_t;
+-
+- out_uint64x2_t = vmlal_n_u32 (arg0_uint64x2_t, arg1_uint32x2_t, arg2_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlals16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlals16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlals16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int32x4_t = vmlal_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlals32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlals32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlals32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int64x2_t = vmlal_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlals8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlals8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlals8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int8x8_t arg1_int8x8_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int16x8_t = vmlal_s8 (arg0_int16x8_t, arg1_int8x8_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.s8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlalu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlalu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlalu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint32x4_t = vmlal_u16 (arg0_uint32x4_t, arg1_uint16x4_t, arg2_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlalu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlalu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlalu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint64x2_t = vmlal_u32 (arg0_uint64x2_t, arg1_uint32x2_t, arg2_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlalu8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlalu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlalu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint8x8_t arg1_uint8x8_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint16x8_t = vmlal_u8 (arg0_uint16x8_t, arg1_uint8x8_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlal\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlas16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlas16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlas16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int16x4_t = vmla_s16 (arg0_int16x4_t, arg1_int16x4_t, arg2_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlas32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlas32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlas32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int32x2_t = vmla_s32 (arg0_int32x2_t, arg1_int32x2_t, arg2_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlas8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlas8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlas8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int8x8_t = vmla_s8 (arg0_int8x8_t, arg1_int8x8_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlau16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlau16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlau16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint16x4_t = vmla_u16 (arg0_uint16x4_t, arg1_uint16x4_t, arg2_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlau32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlau32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlau32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint32x2_t = vmla_u32 (arg0_uint32x2_t, arg1_uint32x2_t, arg2_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlau8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlau8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlau8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint8x8_t = vmla_u8 (arg0_uint8x8_t, arg1_uint8x8_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmla\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_lanef32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_lanef32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+- float32x2_t arg2_float32x2_t;
+-
+- out_float32x4_t = vmlsq_lane_f32 (arg0_float32x4_t, arg1_float32x4_t, arg2_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_lanes16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_lanes16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int16x8_t = vmlsq_lane_s16 (arg0_int16x8_t, arg1_int16x8_t, arg2_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_lanes32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_lanes32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int32x4_t = vmlsq_lane_s32 (arg0_int32x4_t, arg1_int32x4_t, arg2_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_laneu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_laneu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint16x8_t = vmlsq_lane_u16 (arg0_uint16x8_t, arg1_uint16x8_t, arg2_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_laneu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_laneu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint32x4_t = vmlsq_lane_u32 (arg0_uint32x4_t, arg1_uint32x4_t, arg2_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_nf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_nf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+- float32_t arg2_float32_t;
+-
+- out_float32x4_t = vmlsq_n_f32 (arg0_float32x4_t, arg1_float32x4_t, arg2_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_ns16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+- int16_t arg2_int16_t;
+-
+- out_int16x8_t = vmlsq_n_s16 (arg0_int16x8_t, arg1_int16x8_t, arg2_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_ns32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+- int32_t arg2_int32_t;
+-
+- out_int32x4_t = vmlsq_n_s32 (arg0_int32x4_t, arg1_int32x4_t, arg2_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_nu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+- uint16_t arg2_uint16_t;
+-
+- out_uint16x8_t = vmlsq_n_u16 (arg0_uint16x8_t, arg1_uint16x8_t, arg2_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_nu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+- uint32_t arg2_uint32_t;
+-
+- out_uint32x4_t = vmlsq_n_u32 (arg0_uint32x4_t, arg1_uint32x4_t, arg2_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+- float32x4_t arg2_float32x4_t;
+-
+- out_float32x4_t = vmlsq_f32 (arg0_float32x4_t, arg1_float32x4_t, arg2_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQs16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+- int16x8_t arg2_int16x8_t;
+-
+- out_int16x8_t = vmlsq_s16 (arg0_int16x8_t, arg1_int16x8_t, arg2_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQs32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+- int32x4_t arg2_int32x4_t;
+-
+- out_int32x4_t = vmlsq_s32 (arg0_int32x4_t, arg1_int32x4_t, arg2_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQs8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+- int8x16_t arg2_int8x16_t;
+-
+- out_int8x16_t = vmlsq_s8 (arg0_int8x16_t, arg1_int8x16_t, arg2_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+- uint16x8_t arg2_uint16x8_t;
+-
+- out_uint16x8_t = vmlsq_u16 (arg0_uint16x8_t, arg1_uint16x8_t, arg2_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+- uint32x4_t arg2_uint32x4_t;
+-
+- out_uint32x4_t = vmlsq_u32 (arg0_uint32x4_t, arg1_uint32x4_t, arg2_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQu8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+- uint8x16_t arg2_uint8x16_t;
+-
+- out_uint8x16_t = vmlsq_u8 (arg0_uint8x16_t, arg1_uint8x16_t, arg2_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_lanef32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_lanef32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+- float32x2_t arg2_float32x2_t;
+-
+- out_float32x2_t = vmls_lane_f32 (arg0_float32x2_t, arg1_float32x2_t, arg2_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_lanes16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_lanes16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int16x4_t = vmls_lane_s16 (arg0_int16x4_t, arg1_int16x4_t, arg2_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_lanes32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_lanes32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int32x2_t = vmls_lane_s32 (arg0_int32x2_t, arg1_int32x2_t, arg2_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_laneu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_laneu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint16x4_t = vmls_lane_u16 (arg0_uint16x4_t, arg1_uint16x4_t, arg2_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_laneu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_laneu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint32x2_t = vmls_lane_u32 (arg0_uint32x2_t, arg1_uint32x2_t, arg2_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_nf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_nf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+- float32_t arg2_float32_t;
+-
+- out_float32x2_t = vmls_n_f32 (arg0_float32x2_t, arg1_float32x2_t, arg2_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_ns16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16_t arg2_int16_t;
+-
+- out_int16x4_t = vmls_n_s16 (arg0_int16x4_t, arg1_int16x4_t, arg2_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_ns32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32_t arg2_int32_t;
+-
+- out_int32x2_t = vmls_n_s32 (arg0_int32x2_t, arg1_int32x2_t, arg2_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_nu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16_t arg2_uint16_t;
+-
+- out_uint16x4_t = vmls_n_u16 (arg0_uint16x4_t, arg1_uint16x4_t, arg2_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_nu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmls_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmls_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32_t arg2_uint32_t;
+-
+- out_uint32x2_t = vmls_n_u32 (arg0_uint32x2_t, arg1_uint32x2_t, arg2_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsf32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+- float32x2_t arg2_float32x2_t;
+-
+- out_float32x2_t = vmls_f32 (arg0_float32x2_t, arg1_float32x2_t, arg2_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_lanes16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsl_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsl_lanes16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int32x4_t = vmlsl_lane_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_lanes32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsl_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsl_lanes32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int64x2_t = vmlsl_lane_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_laneu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsl_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsl_laneu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint32x4_t = vmlsl_lane_u16 (arg0_uint32x4_t, arg1_uint16x4_t, arg2_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_laneu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsl_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsl_laneu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint64x2_t = vmlsl_lane_u32 (arg0_uint64x2_t, arg1_uint32x2_t, arg2_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_ns16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsl_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsl_ns16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16_t arg2_int16_t;
+-
+- out_int32x4_t = vmlsl_n_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_ns32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsl_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsl_ns32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32_t arg2_int32_t;
+-
+- out_int64x2_t = vmlsl_n_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_nu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsl_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsl_nu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16_t arg2_uint16_t;
+-
+- out_uint32x4_t = vmlsl_n_u16 (arg0_uint32x4_t, arg1_uint16x4_t, arg2_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_nu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsl_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsl_nu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32_t arg2_uint32_t;
+-
+- out_uint64x2_t = vmlsl_n_u32 (arg0_uint64x2_t, arg1_uint32x2_t, arg2_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsls16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsls16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int32x4_t = vmlsl_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsls32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsls32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int64x2_t = vmlsl_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsls8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsls8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int8x8_t arg1_int8x8_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int16x8_t = vmlsl_s8 (arg0_int16x8_t, arg1_int8x8_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.s8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlslu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlslu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlslu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint32x4_t = vmlsl_u16 (arg0_uint32x4_t, arg1_uint16x4_t, arg2_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlslu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlslu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlslu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint64x2_t = vmlsl_u32 (arg0_uint64x2_t, arg1_uint32x2_t, arg2_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlslu8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlslu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlslu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint8x8_t arg1_uint8x8_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint16x8_t = vmlsl_u8 (arg0_uint16x8_t, arg1_uint8x8_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmlsl\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlss16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlss16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlss16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int16x4_t = vmls_s16 (arg0_int16x4_t, arg1_int16x4_t, arg2_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlss32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlss32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlss32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int32x2_t = vmls_s32 (arg0_int32x2_t, arg1_int32x2_t, arg2_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlss8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlss8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlss8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int8x8_t = vmls_s8 (arg0_int8x8_t, arg1_int8x8_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsu16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+- uint16x4_t arg2_uint16x4_t;
+-
+- out_uint16x4_t = vmls_u16 (arg0_uint16x4_t, arg1_uint16x4_t, arg2_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsu32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+- uint32x2_t arg2_uint32x2_t;
+-
+- out_uint32x2_t = vmls_u32 (arg0_uint32x2_t, arg1_uint32x2_t, arg2_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsu8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vmlsu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmlsu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint8x8_t = vmls_u8 (arg0_uint8x8_t, arg1_uint8x8_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmls\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovQ_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_nf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32_t arg0_float32_t;
+-
+- out_float32x4_t = vmovq_n_f32 (arg0_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_np16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovQ_np16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_np16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16_t arg0_poly16_t;
+-
+- out_poly16x8_t = vmovq_n_p16 (arg0_poly16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_np8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovQ_np8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_np8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8_t arg0_poly8_t;
+-
+- out_poly8x16_t = vmovq_n_p8 (arg0_poly8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16_t arg0_int16_t;
+-
+- out_int16x8_t = vmovq_n_s16 (arg0_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32_t arg0_int32_t;
+-
+- out_int32x4_t = vmovq_n_s32 (arg0_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vmovQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64_t arg0_int64_t;
+-
+- out_int64x2_t = vmovq_n_s64 (arg0_int64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8_t arg0_int8_t;
+-
+- out_int8x16_t = vmovq_n_s8 (arg0_int8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16_t arg0_uint16_t;
+-
+- out_uint16x8_t = vmovq_n_u16 (arg0_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32_t arg0_uint32_t;
+-
+- out_uint32x4_t = vmovq_n_u32 (arg0_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vmovQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64_t arg0_uint64_t;
+-
+- out_uint64x2_t = vmovq_n_u64 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8_t arg0_uint8_t;
+-
+- out_uint8x16_t = vmovq_n_u8 (arg0_uint8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmov_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_nf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32_t arg0_float32_t;
+-
+- out_float32x2_t = vmov_n_f32 (arg0_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_np16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmov_np16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_np16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16_t arg0_poly16_t;
+-
+- out_poly16x4_t = vmov_n_p16 (arg0_poly16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_np8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmov_np8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_np8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8_t arg0_poly8_t;
+-
+- out_poly8x8_t = vmov_n_p8 (arg0_poly8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmov_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16_t arg0_int16_t;
+-
+- out_int16x4_t = vmov_n_s16 (arg0_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmov_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32_t arg0_int32_t;
+-
+- out_int32x2_t = vmov_n_s32 (arg0_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vmov_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64_t arg0_int64_t;
+-
+- out_int64x1_t = vmov_n_s64 (arg0_int64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmov_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8_t arg0_int8_t;
+-
+- out_int8x8_t = vmov_n_s8 (arg0_int8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmov_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16_t arg0_uint16_t;
+-
+- out_uint16x4_t = vmov_n_u16 (arg0_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmov_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32_t arg0_uint32_t;
+-
+- out_uint32x2_t = vmov_n_u32 (arg0_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vmov_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64_t arg0_uint64_t;
+-
+- out_uint64x1_t = vmov_n_u64 (arg0_uint64_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmov_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmov_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8_t arg0_uint8_t;
+-
+- out_uint8x8_t = vmov_n_u8 (arg0_uint8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovls16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovls16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int32x4_t = vmovl_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovls32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovls32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int64x2_t = vmovl_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovls8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovls8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int16x8_t = vmovl_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovl\.s8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovlu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovlu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovlu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint32x4_t = vmovl_u16 (arg0_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovl\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovlu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovlu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovlu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint64x2_t = vmovl_u32 (arg0_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovl\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovlu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovlu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovlu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint16x8_t = vmovl_u8 (arg0_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovl\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int8x8_t = vmovn_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int16x4_t = vmovn_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int32x2_t = vmovn_s64 (arg0_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovnu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovnu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovnu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint8x8_t = vmovn_u16 (arg0_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovnu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovnu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovnu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint16x4_t = vmovn_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovnu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmovnu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmovnu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint32x2_t = vmovn_u64 (arg0_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmovn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_lanef32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_lanef32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x4_t = vmulq_lane_f32 (arg0_float32x4_t, arg1_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_lanes16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x8_t = vmulq_lane_s16 (arg0_int16x8_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_lanes32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x4_t = vmulq_lane_s32 (arg0_int32x4_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_laneu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_laneu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x8_t = vmulq_lane_u16 (arg0_uint16x8_t, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_laneu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_laneu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x4_t = vmulq_lane_u32 (arg0_uint32x4_t, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_nf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_nf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32_t arg1_float32_t;
+-
+- out_float32x4_t = vmulq_n_f32 (arg0_float32x4_t, arg1_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16_t arg1_int16_t;
+-
+- out_int16x8_t = vmulq_n_s16 (arg0_int16x8_t, arg1_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32_t arg1_int32_t;
+-
+- out_int32x4_t = vmulq_n_s32 (arg0_int32x4_t, arg1_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16_t arg1_uint16_t;
+-
+- out_uint16x8_t = vmulq_n_u16 (arg0_uint16x8_t, arg1_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32_t arg1_uint32_t;
+-
+- out_uint32x4_t = vmulq_n_u32 (arg0_uint32x4_t, arg1_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vmulq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_poly8x16_t = vmulq_p8 (arg0_poly8x16_t, arg1_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.p8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vmulq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vmulq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vmulq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vmulq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vmulq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vmulq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_lanef32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_lanef32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vmul_lane_f32 (arg0_float32x2_t, arg1_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_lanes16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vmul_lane_s16 (arg0_int16x4_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_lanes32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vmul_lane_s32 (arg0_int32x2_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_laneu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_laneu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vmul_lane_u16 (arg0_uint16x4_t, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_laneu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_laneu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vmul_lane_u32 (arg0_uint32x2_t, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_nf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_nf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_nf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32_t arg1_float32_t;
+-
+- out_float32x2_t = vmul_n_f32 (arg0_float32x2_t, arg1_float32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16_t arg1_int16_t;
+-
+- out_int16x4_t = vmul_n_s16 (arg0_int16x4_t, arg1_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32_t arg1_int32_t;
+-
+- out_int32x2_t = vmul_n_s32 (arg0_int32x2_t, arg1_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16_t arg1_uint16_t;
+-
+- out_uint16x4_t = vmul_n_u16 (arg0_uint16x4_t, arg1_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmul_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmul_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32_t arg1_uint32_t;
+-
+- out_uint32x2_t = vmul_n_u32 (arg0_uint32x2_t, arg1_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vmul_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmull_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmull_lanes16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x4_t = vmull_lane_s16 (arg0_int16x4_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmull_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmull_lanes32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x2_t = vmull_lane_s32 (arg0_int32x2_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_laneu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmull_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmull_laneu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint32x4_t = vmull_lane_u16 (arg0_uint16x4_t, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_laneu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmull_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmull_laneu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint64x2_t = vmull_lane_u32 (arg0_uint32x2_t, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmull_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmull_ns16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16_t arg1_int16_t;
+-
+- out_int32x4_t = vmull_n_s16 (arg0_int16x4_t, arg1_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmull_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmull_ns32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32_t arg1_int32_t;
+-
+- out_int64x2_t = vmull_n_s32 (arg0_int32x2_t, arg1_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmull_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmull_nu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16_t arg1_uint16_t;
+-
+- out_uint32x4_t = vmull_n_u16 (arg0_uint16x4_t, arg1_uint16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmull_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmull_nu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32_t arg1_uint32_t;
+-
+- out_uint64x2_t = vmull_n_u32 (arg0_uint32x2_t, arg1_uint32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmullp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmullp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmullp8 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly16x8_t = vmull_p8 (arg0_poly8x8_t, arg1_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.p8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulls16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x4_t = vmull_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulls32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x2_t = vmull_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulls8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulls8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int16x8_t = vmull_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.s8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmullu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmullu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmullu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint32x4_t = vmull_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmullu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmullu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmullu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint64x2_t = vmull_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmullu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmullu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmullu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint16x8_t = vmull_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmull\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulp8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x8_t = vmul_p8 (arg0_poly8x8_t, arg1_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.p8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmuls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmuls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmuls16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vmul_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmuls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmuls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmuls32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vmul_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmuls8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmuls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmuls8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vmul_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vmul_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vmul_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vmulu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmulu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vmul_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmul\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnQp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly8x16_t = vmvnq_p8 (arg0_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vmvnq_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vmvnq_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vmvnq_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x8_t = vmvnq_u16 (arg0_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x4_t = vmvnq_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vmvnq_u8 (arg0_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnp8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly8x8_t = vmvn_p8 (arg0_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vmvn_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vmvn_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vmvn_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x4_t = vmvn_u16 (arg0_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vmvn_u32 (arg0_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vmvnu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vmvnu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vmvn_u8 (arg0_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vmvn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegQf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vnegQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vnegQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vnegq_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vneg\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegQs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vnegQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vnegQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vnegq_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vneg\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegQs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vnegQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vnegQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vnegq_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vneg\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegQs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vnegQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vnegQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vnegq_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vneg\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vnegf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vnegf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vneg_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vneg\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vnegs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vnegs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vneg_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vneg\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vnegs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vnegs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vneg_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vneg\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vnegs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vnegs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vneg_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vneg\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int16x8_t out_int16x8_t;
+-int16x8_t arg0_int16x8_t;
+-int16x8_t arg1_int16x8_t;
+-void test_vornQs16 (void)
+-{
+-
+- out_int16x8_t = vornq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int32x4_t out_int32x4_t;
+-int32x4_t arg0_int32x4_t;
+-int32x4_t arg1_int32x4_t;
+-void test_vornQs32 (void)
+-{
+-
+- out_int32x4_t = vornq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int64x2_t out_int64x2_t;
+-int64x2_t arg0_int64x2_t;
+-int64x2_t arg1_int64x2_t;
+-void test_vornQs64 (void)
+-{
+-
+- out_int64x2_t = vornq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int8x16_t out_int8x16_t;
+-int8x16_t arg0_int8x16_t;
+-int8x16_t arg1_int8x16_t;
+-void test_vornQs8 (void)
+-{
+-
+- out_int8x16_t = vornq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint16x8_t out_uint16x8_t;
+-uint16x8_t arg0_uint16x8_t;
+-uint16x8_t arg1_uint16x8_t;
+-void test_vornQu16 (void)
+-{
+-
+- out_uint16x8_t = vornq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint32x4_t out_uint32x4_t;
+-uint32x4_t arg0_uint32x4_t;
+-uint32x4_t arg1_uint32x4_t;
+-void test_vornQu32 (void)
+-{
+-
+- out_uint32x4_t = vornq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint64x2_t out_uint64x2_t;
+-uint64x2_t arg0_uint64x2_t;
+-uint64x2_t arg1_uint64x2_t;
+-void test_vornQu64 (void)
+-{
+-
+- out_uint64x2_t = vornq_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint8x16_t out_uint8x16_t;
+-uint8x16_t arg0_uint8x16_t;
+-uint8x16_t arg1_uint8x16_t;
+-void test_vornQu8 (void)
+-{
+-
+- out_uint8x16_t = vornq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int16x4_t out_int16x4_t;
+-int16x4_t arg0_int16x4_t;
+-int16x4_t arg1_int16x4_t;
+-void test_vorns16 (void)
+-{
+-
+- out_int16x4_t = vorn_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int32x2_t out_int32x2_t;
+-int32x2_t arg0_int32x2_t;
+-int32x2_t arg1_int32x2_t;
+-void test_vorns32 (void)
+-{
+-
+- out_int32x2_t = vorn_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vorns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int64x1_t out_int64x1_t;
+-int64x1_t arg0_int64x1_t;
+-int64x1_t arg1_int64x1_t;
+-void test_vorns64 (void)
+-{
+-
+- out_int64x1_t = vorn_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-int8x8_t out_int8x8_t;
+-int8x8_t arg0_int8x8_t;
+-int8x8_t arg1_int8x8_t;
+-void test_vorns8 (void)
+-{
+-
+- out_int8x8_t = vorn_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint16x4_t out_uint16x4_t;
+-uint16x4_t arg0_uint16x4_t;
+-uint16x4_t arg1_uint16x4_t;
+-void test_vornu16 (void)
+-{
+-
+- out_uint16x4_t = vorn_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint32x2_t out_uint32x2_t;
+-uint32x2_t arg0_uint32x2_t;
+-uint32x2_t arg1_uint32x2_t;
+-void test_vornu32 (void)
+-{
+-
+- out_uint32x2_t = vorn_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vornu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint64x1_t out_uint64x1_t;
+-uint64x1_t arg0_uint64x1_t;
+-uint64x1_t arg1_uint64x1_t;
+-void test_vornu64 (void)
+-{
+-
+- out_uint64x1_t = vorn_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vornu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O2" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-uint8x8_t out_uint8x8_t;
+-uint8x8_t arg0_uint8x8_t;
+-uint8x8_t arg1_uint8x8_t;
+-void test_vornu8 (void)
+-{
+-
+- out_uint8x8_t = vorn_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vorrq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vorrq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vorrq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vorrq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vorrq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vorrq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vorrq_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vorrq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vorr_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vorr_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrs64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vorrs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrs64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vorr_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorrs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorrs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vorr_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorru16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorru16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorru16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vorr_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorru32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorru32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorru32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vorr_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorru64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vorru64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorru64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vorr_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorru8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vorru8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vorru8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vorr_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vorr\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadalQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadalQs16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int32x4_t = vpadalq_s16 (arg0_int32x4_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadalQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadalQs32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int64x2_t = vpadalq_s32 (arg0_int64x2_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadalQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadalQs8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int16x8_t = vpadalq_s8 (arg0_int16x8_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadalQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadalQu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint32x4_t = vpadalq_u16 (arg0_uint32x4_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadalQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadalQu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint64x2_t = vpadalq_u32 (arg0_uint64x2_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadalQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadalQu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint16x8_t = vpadalq_u8 (arg0_uint16x8_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadals16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadals16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadals16 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x2_t = vpadal_s16 (arg0_int32x2_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadals32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadals32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadals32 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x1_t = vpadal_s32 (arg0_int64x1_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadals8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadals8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadals8 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int16x4_t = vpadal_s8 (arg0_int16x4_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadalu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadalu16 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint32x2_t = vpadal_u16 (arg0_uint32x2_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadalu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadalu32 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint64x1_t = vpadal_u32 (arg0_uint64x1_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadalu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadalu8 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint16x4_t = vpadal_u8 (arg0_uint16x4_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadal\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpaddf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vpadd_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadd\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddlQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddlQs16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int32x4_t = vpaddlq_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddlQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddlQs32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int64x2_t = vpaddlq_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddlQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddlQs8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int16x8_t = vpaddlq_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddlQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddlQu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint32x4_t = vpaddlq_u16 (arg0_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddlQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddlQu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint64x2_t = vpaddlq_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddlQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddlQu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint16x8_t = vpaddlq_u8 (arg0_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddls16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddls16 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int32x2_t = vpaddl_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddls32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddls32 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int64x1_t = vpaddl_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddls8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddls8 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int16x4_t = vpaddl_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddlu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddlu16 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint32x2_t = vpaddl_u16 (arg0_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddlu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddlu32 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint64x1_t = vpaddl_u32 (arg0_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vpaddlu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddlu8 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint16x4_t = vpaddl_u8 (arg0_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpaddl\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadds16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadds16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadds16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vpadd_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadd\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadds32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadds32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadds32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vpadd_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadd\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadds8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpadds8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpadds8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vpadd_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadd\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpaddu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vpadd_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadd\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpaddu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vpadd_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadd\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpaddu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpaddu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vpadd_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpadd\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmaxf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmaxf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vpmax_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmax\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmaxs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmaxs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vpmax_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmax\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmaxs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmaxs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vpmax_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmax\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmaxs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmaxs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vpmax_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmax\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmaxu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmaxu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vpmax_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmax\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmaxu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmaxu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vpmax_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmax\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmaxu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmaxu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vpmax_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmax\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpminf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpminf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpminf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vpmin_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmin\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmins16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmins16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmins16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vpmin_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmin\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmins32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmins32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmins32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vpmin_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmin\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmins8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpmins8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpmins8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vpmin_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmin\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpminu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpminu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpminu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vpmin_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmin\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpminu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpminu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpminu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vpmin_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmin\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpminu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vpminu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vpminu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vpmin_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vpmin\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulhQ_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulhQ_lanes16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x8_t = vqrdmulhq_lane_s16 (arg0_int16x8_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulhQ_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulhQ_lanes32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x4_t = vqrdmulhq_lane_s32 (arg0_int32x4_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulhQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulhQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16_t arg1_int16_t;
+-
+- out_int16x8_t = vqrdmulhq_n_s16 (arg0_int16x8_t, arg1_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulhQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulhQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32_t arg1_int32_t;
+-
+- out_int32x4_t = vqrdmulhq_n_s32 (arg0_int32x4_t, arg1_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulhQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulhQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vqrdmulhq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulhQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulhQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vqrdmulhq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulh_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulh_lanes16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vqrdmulh_lane_s16 (arg0_int16x4_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulh_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulh_lanes32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vqrdmulh_lane_s32 (arg0_int32x2_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulh_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulh_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16_t arg1_int16_t;
+-
+- out_int16x4_t = vqrdmulh_n_s16 (arg0_int16x4_t, arg1_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulh_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulh_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32_t arg1_int32_t;
+-
+- out_int32x2_t = vqrdmulh_n_s32 (arg0_int32x2_t, arg1_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulhs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulhs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vqrdmulh_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRdmulhs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRdmulhs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vqrdmulh_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrdmulh\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vqrshlq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vqrshlq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vqrshlq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vqrshlq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vqrshlq_u16 (arg0_uint16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vqrshlq_u32 (arg0_uint32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_uint64x2_t = vqrshlq_u64 (arg0_uint64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vqrshlq_u8 (arg0_uint8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshls16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vqrshl_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshls32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vqrshl_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshls64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshls64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshls64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vqrshl_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshls8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshls8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vqrshl_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vqrshl_u16 (arg0_uint16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vqrshl_u32 (arg0_uint32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_uint64x1_t = vqrshl_u64 (arg0_uint64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqRshlu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshlu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vqrshl_u8 (arg0_uint8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshl\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqRshrn_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshrn_ns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int8x8_t = vqrshrn_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshrn\.s16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqRshrn_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshrn_ns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int16x4_t = vqrshrn_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshrn\.s32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqRshrn_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshrn_ns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int32x2_t = vqrshrn_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshrn\.s64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqRshrn_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshrn_nu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint8x8_t = vqrshrn_n_u16 (arg0_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshrn\.u16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqRshrn_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshrn_nu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint16x4_t = vqrshrn_n_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshrn\.u32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqRshrn_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshrn_nu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint32x2_t = vqrshrn_n_u64 (arg0_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshrn\.u64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrun_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqRshrun_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshrun_ns16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_uint8x8_t = vqrshrun_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshrun\.s16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrun_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqRshrun_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshrun_ns32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_uint16x4_t = vqrshrun_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshrun\.s32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrun_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqRshrun_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqRshrun_ns64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_uint32x2_t = vqrshrun_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqrshrun\.s64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabsQs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqabsQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqabsQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vqabsq_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqabs\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabsQs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqabsQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqabsQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vqabsq_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqabs\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabsQs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqabsQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqabsQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vqabsq_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqabs\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabss16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqabss16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqabss16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vqabs_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqabs\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabss32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqabss32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqabss32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vqabs_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqabs\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabss8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqabss8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqabss8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vqabs_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqabs\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vqaddq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vqaddq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vqaddq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vqaddq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vqaddq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vqaddq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vqaddq_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vqaddq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqadds16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqadds16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqadds16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vqadd_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqadds32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqadds32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqadds32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vqadd_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqadds64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqadds64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqadds64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vqadd_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqadds8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqadds8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqadds8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vqadd_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vqadd_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vqadd_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vqadd_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqaddu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqaddu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vqadd_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqadd\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_lanes16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlal_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlal_lanes16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int32x4_t = vqdmlal_lane_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlal\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_lanes32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlal_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlal_lanes32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int64x2_t = vqdmlal_lane_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlal\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_ns16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlal_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlal_ns16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16_t arg2_int16_t;
+-
+- out_int32x4_t = vqdmlal_n_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlal\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_ns32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlal_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlal_ns32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32_t arg2_int32_t;
+-
+- out_int64x2_t = vqdmlal_n_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlal\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlals16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlals16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlals16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int32x4_t = vqdmlal_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlal\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlals32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlals32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlals32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int64x2_t = vqdmlal_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlal\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_lanes16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlsl_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlsl_lanes16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int32x4_t = vqdmlsl_lane_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlsl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_lanes32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlsl_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlsl_lanes32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int64x2_t = vqdmlsl_lane_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlsl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_ns16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlsl_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlsl_ns16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16_t arg2_int16_t;
+-
+- out_int32x4_t = vqdmlsl_n_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlsl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_ns32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlsl_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlsl_ns32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32_t arg2_int32_t;
+-
+- out_int64x2_t = vqdmlsl_n_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlsl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsls16.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlsls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlsls16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+- int16x4_t arg2_int16x4_t;
+-
+- out_int32x4_t = vqdmlsl_s16 (arg0_int32x4_t, arg1_int16x4_t, arg2_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlsl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsls32.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vqdmlsls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmlsls32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+- int32x2_t arg2_int32x2_t;
+-
+- out_int64x2_t = vqdmlsl_s32 (arg0_int64x2_t, arg1_int32x2_t, arg2_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmlsl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulhQ_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulhQ_lanes16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x8_t = vqdmulhq_lane_s16 (arg0_int16x8_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulhQ_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulhQ_lanes32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x4_t = vqdmulhq_lane_s32 (arg0_int32x4_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulhQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulhQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16_t arg1_int16_t;
+-
+- out_int16x8_t = vqdmulhq_n_s16 (arg0_int16x8_t, arg1_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulhQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulhQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32_t arg1_int32_t;
+-
+- out_int32x4_t = vqdmulhq_n_s32 (arg0_int32x4_t, arg1_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulhQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulhQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vqdmulhq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulhQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulhQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vqdmulhq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulh_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulh_lanes16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vqdmulh_lane_s16 (arg0_int16x4_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulh_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulh_lanes32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vqdmulh_lane_s32 (arg0_int32x2_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulh_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulh_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16_t arg1_int16_t;
+-
+- out_int16x4_t = vqdmulh_n_s16 (arg0_int16x4_t, arg1_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulh_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulh_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32_t arg1_int32_t;
+-
+- out_int32x2_t = vqdmulh_n_s32 (arg0_int32x2_t, arg1_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulhs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulhs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vqdmulh_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulhs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulhs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vqdmulh_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmulh\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmull_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmull_lanes16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x4_t = vqdmull_lane_s16 (arg0_int16x4_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmull\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmull_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmull_lanes32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x2_t = vqdmull_lane_s32 (arg0_int32x2_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmull\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmull_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmull_ns16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16_t arg1_int16_t;
+-
+- out_int32x4_t = vqdmull_n_s16 (arg0_int16x4_t, arg1_int16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmull\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmull_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmull_ns32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32_t arg1_int32_t;
+-
+- out_int64x2_t = vqdmull_n_s32 (arg0_int32x2_t, arg1_int32_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmull\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulls16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x4_t = vqdmull_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmull\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqdmulls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqdmulls32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x2_t = vqdmull_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqdmull\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqmovns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqmovns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int8x8_t = vqmovn_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqmovn\.s16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqmovns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqmovns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int16x4_t = vqmovn_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqmovn\.s32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqmovns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqmovns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int32x2_t = vqmovn_s64 (arg0_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqmovn\.s64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovnu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqmovnu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqmovnu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint8x8_t = vqmovn_u16 (arg0_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqmovn\.u16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovnu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqmovnu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqmovnu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint16x4_t = vqmovn_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqmovn\.u32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovnu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqmovnu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqmovnu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint32x2_t = vqmovn_u64 (arg0_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqmovn\.u64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovuns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqmovuns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqmovuns16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_uint8x8_t = vqmovun_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqmovun\.s16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovuns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqmovuns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqmovuns32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_uint16x4_t = vqmovun_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqmovun\.s32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovuns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqmovuns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqmovuns64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_uint32x2_t = vqmovun_s64 (arg0_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqmovun\.s64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegQs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqnegQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqnegQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vqnegq_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqneg\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegQs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqnegQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqnegQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vqnegq_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqneg\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegQs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqnegQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqnegQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vqnegq_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqneg\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqnegs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqnegs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vqneg_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqneg\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqnegs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqnegs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vqneg_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqneg\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqnegs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqnegs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vqneg_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqneg\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vqshlq_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vqshlq_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int64x2_t = vqshlq_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vqshlq_n_s8 (arg0_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x8_t = vqshlq_n_u16 (arg0_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x4_t = vqshlq_n_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint64x2_t = vqshlq_n_u64 (arg0_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vqshlq_n_u8 (arg0_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vqshlq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vqshlq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vqshlq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vqshlq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vqshlq_u16 (arg0_uint16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vqshlq_u32 (arg0_uint32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_uint64x2_t = vqshlq_u64 (arg0_uint64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vqshlq_u8 (arg0_uint8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshl_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshl_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vqshl_n_s16 (arg0_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshl_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshl_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vqshl_n_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshl_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshl_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int64x1_t = vqshl_n_s64 (arg0_int64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshl_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshl_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vqshl_n_s8 (arg0_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshl_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshl_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x4_t = vqshl_n_u16 (arg0_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshl_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshl_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vqshl_n_u32 (arg0_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshl_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshl_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint64x1_t = vqshl_n_u64 (arg0_uint64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshl_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshl_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vqshl_n_u8 (arg0_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshls16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vqshl_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshls32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vqshl_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshls64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshls64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshls64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vqshl_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshls8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshls8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vqshl_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vqshl_u16 (arg0_uint16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vqshl_u32 (arg0_uint32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_uint64x1_t = vqshl_u64 (arg0_uint64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqshlu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vqshl_u8 (arg0_uint8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqshl\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshluQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshluQ_ns16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_uint16x8_t = vqshluq_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshlu\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshluQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshluQ_ns32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_uint32x4_t = vqshluq_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshlu\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshluQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshluQ_ns64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_uint64x2_t = vqshluq_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshlu\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshluQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshluQ_ns8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_uint8x16_t = vqshluq_n_s8 (arg0_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshlu\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlu_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlu_ns16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_uint16x4_t = vqshlu_n_s16 (arg0_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshlu\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlu_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlu_ns32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_uint32x2_t = vqshlu_n_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshlu\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlu_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlu_ns64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_uint64x1_t = vqshlu_n_s64 (arg0_int64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshlu\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshlu_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshlu_ns8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_uint8x8_t = vqshlu_n_s8 (arg0_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshlu\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshrn_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshrn_ns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int8x8_t = vqshrn_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshrn\.s16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshrn_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshrn_ns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int16x4_t = vqshrn_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshrn\.s32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshrn_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshrn_ns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int32x2_t = vqshrn_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshrn\.s64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshrn_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshrn_nu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint8x8_t = vqshrn_n_u16 (arg0_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshrn\.u16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshrn_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshrn_nu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint16x4_t = vqshrn_n_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshrn\.u32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshrn_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshrn_nu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint32x2_t = vqshrn_n_u64 (arg0_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshrn\.u64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrun_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshrun_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshrun_ns16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_uint8x8_t = vqshrun_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshrun\.s16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrun_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshrun_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshrun_ns32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_uint16x4_t = vqshrun_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshrun\.s32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrun_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vqshrun_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqshrun_ns64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_uint32x2_t = vqshrun_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vqshrun\.s64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vqsubq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vqsubq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vqsubq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vqsubq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vqsubq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vqsubq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vqsubq_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vqsubq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vqsub_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vqsub_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubs64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vqsub_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vqsub_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vqsub_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vqsub_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vqsub_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vqsubu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vqsubu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vqsub_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vqsub\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpeQf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrecpeQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrecpeQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vrecpeq_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrecpe\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpeQu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrecpeQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrecpeQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x4_t = vrecpeq_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrecpe\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrecpef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrecpef32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vrecpe_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrecpe\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpeu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrecpeu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrecpeu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vrecpe_u32 (arg0_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrecpe\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpsQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vrecpsQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrecpsQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vrecpsq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrecps\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpsf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vrecpsf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrecpsf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vrecps_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrecps\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_p128 (void)
+-{
+- float32x4_t out_float32x4_t;
+- poly128_t arg0_poly128_t;
+-
+- out_float32x4_t = vreinterpretq_f32_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_p16 (void)
+-{
+- float32x4_t out_float32x4_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_float32x4_t = vreinterpretq_f32_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_p64 (void)
+-{
+- float32x4_t out_float32x4_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_float32x4_t = vreinterpretq_f32_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_p8 (void)
+-{
+- float32x4_t out_float32x4_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_float32x4_t = vreinterpretq_f32_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_s16 (void)
+-{
+- float32x4_t out_float32x4_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_float32x4_t = vreinterpretq_f32_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_s32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_float32x4_t = vreinterpretq_f32_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_s64 (void)
+-{
+- float32x4_t out_float32x4_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_float32x4_t = vreinterpretq_f32_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_s8 (void)
+-{
+- float32x4_t out_float32x4_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_float32x4_t = vreinterpretq_f32_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_u16 (void)
+-{
+- float32x4_t out_float32x4_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_float32x4_t = vreinterpretq_f32_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_u32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_float32x4_t = vreinterpretq_f32_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_u64 (void)
+-{
+- float32x4_t out_float32x4_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_float32x4_t = vreinterpretq_f32_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQf32_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQf32_u8 (void)
+-{
+- float32x4_t out_float32x4_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_float32x4_t = vreinterpretq_f32_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_f32 (void)
+-{
+- poly128_t out_poly128_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_poly128_t = vreinterpretq_p128_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_p16 (void)
+-{
+- poly128_t out_poly128_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_poly128_t = vreinterpretq_p128_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_p64 (void)
+-{
+- poly128_t out_poly128_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_poly128_t = vreinterpretq_p128_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_p8 (void)
+-{
+- poly128_t out_poly128_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly128_t = vreinterpretq_p128_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_s16 (void)
+-{
+- poly128_t out_poly128_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_poly128_t = vreinterpretq_p128_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_s32 (void)
+-{
+- poly128_t out_poly128_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_poly128_t = vreinterpretq_p128_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_s64 (void)
+-{
+- poly128_t out_poly128_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_poly128_t = vreinterpretq_p128_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_s8 (void)
+-{
+- poly128_t out_poly128_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_poly128_t = vreinterpretq_p128_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_u16 (void)
+-{
+- poly128_t out_poly128_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_poly128_t = vreinterpretq_p128_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_u32 (void)
+-{
+- poly128_t out_poly128_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_poly128_t = vreinterpretq_p128_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_u64 (void)
+-{
+- poly128_t out_poly128_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_poly128_t = vreinterpretq_p128_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp128_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp128_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp128_u8 (void)
+-{
+- poly128_t out_poly128_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_poly128_t = vreinterpretq_p128_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_f32 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_p128 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly128_t arg0_poly128_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_p64 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_p8 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_s16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_s32 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_s64 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_s8 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_u16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_u32 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_u64 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp16_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp16_u8 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_poly16x8_t = vreinterpretq_p16_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_f32 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_p128 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly128_t arg0_poly128_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_p16 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_p8 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_s16 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_s32 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_s64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_s8 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_u16 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_u32 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_u64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp64_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp64_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp64_u8 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_poly64x2_t = vreinterpretq_p64_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_f32 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_p128 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly128_t arg0_poly128_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_p16 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_p64 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_s16 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_s32 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_s64 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_s8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_u16 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_u32 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_u64 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQp8_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQp8_u8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_poly8x16_t = vreinterpretq_p8_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_f32 (void)
+-{
+- int16x8_t out_int16x8_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_int16x8_t = vreinterpretq_s16_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_p128 (void)
+-{
+- int16x8_t out_int16x8_t;
+- poly128_t arg0_poly128_t;
+-
+- out_int16x8_t = vreinterpretq_s16_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_p16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_int16x8_t = vreinterpretq_s16_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_p64 (void)
+-{
+- int16x8_t out_int16x8_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_int16x8_t = vreinterpretq_s16_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_p8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_int16x8_t = vreinterpretq_s16_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_s32 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int16x8_t = vreinterpretq_s16_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_s64 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int16x8_t = vreinterpretq_s16_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_s8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int16x8_t = vreinterpretq_s16_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_u16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_int16x8_t = vreinterpretq_s16_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_u32 (void)
+-{
+- int16x8_t out_int16x8_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_int16x8_t = vreinterpretq_s16_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_u64 (void)
+-{
+- int16x8_t out_int16x8_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_int16x8_t = vreinterpretq_s16_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs16_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs16_u8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_int16x8_t = vreinterpretq_s16_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_f32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_int32x4_t = vreinterpretq_s32_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_p128 (void)
+-{
+- int32x4_t out_int32x4_t;
+- poly128_t arg0_poly128_t;
+-
+- out_int32x4_t = vreinterpretq_s32_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_p16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_int32x4_t = vreinterpretq_s32_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_p64 (void)
+-{
+- int32x4_t out_int32x4_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_int32x4_t = vreinterpretq_s32_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_p8 (void)
+-{
+- int32x4_t out_int32x4_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_int32x4_t = vreinterpretq_s32_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_s16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int32x4_t = vreinterpretq_s32_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_s64 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int32x4_t = vreinterpretq_s32_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_s8 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int32x4_t = vreinterpretq_s32_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_u16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_int32x4_t = vreinterpretq_s32_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_u32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_int32x4_t = vreinterpretq_s32_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_u64 (void)
+-{
+- int32x4_t out_int32x4_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_int32x4_t = vreinterpretq_s32_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs32_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs32_u8 (void)
+-{
+- int32x4_t out_int32x4_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_int32x4_t = vreinterpretq_s32_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_f32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_int64x2_t = vreinterpretq_s64_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_p128 (void)
+-{
+- int64x2_t out_int64x2_t;
+- poly128_t arg0_poly128_t;
+-
+- out_int64x2_t = vreinterpretq_s64_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_p16 (void)
+-{
+- int64x2_t out_int64x2_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_int64x2_t = vreinterpretq_s64_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_p64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_int64x2_t = vreinterpretq_s64_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_p8 (void)
+-{
+- int64x2_t out_int64x2_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_int64x2_t = vreinterpretq_s64_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_s16 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int64x2_t = vreinterpretq_s64_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_s32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int64x2_t = vreinterpretq_s64_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_s8 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int64x2_t = vreinterpretq_s64_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_u16 (void)
+-{
+- int64x2_t out_int64x2_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_int64x2_t = vreinterpretq_s64_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_u32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_int64x2_t = vreinterpretq_s64_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_u64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_int64x2_t = vreinterpretq_s64_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs64_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs64_u8 (void)
+-{
+- int64x2_t out_int64x2_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_int64x2_t = vreinterpretq_s64_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_f32 (void)
+-{
+- int8x16_t out_int8x16_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_int8x16_t = vreinterpretq_s8_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_p128 (void)
+-{
+- int8x16_t out_int8x16_t;
+- poly128_t arg0_poly128_t;
+-
+- out_int8x16_t = vreinterpretq_s8_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_p16 (void)
+-{
+- int8x16_t out_int8x16_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_int8x16_t = vreinterpretq_s8_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_p64 (void)
+-{
+- int8x16_t out_int8x16_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_int8x16_t = vreinterpretq_s8_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_p8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_int8x16_t = vreinterpretq_s8_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_s16 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int8x16_t = vreinterpretq_s8_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_s32 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int8x16_t = vreinterpretq_s8_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_s64 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int8x16_t = vreinterpretq_s8_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_u16 (void)
+-{
+- int8x16_t out_int8x16_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_int8x16_t = vreinterpretq_s8_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_u32 (void)
+-{
+- int8x16_t out_int8x16_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_int8x16_t = vreinterpretq_s8_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_u64 (void)
+-{
+- int8x16_t out_int8x16_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_int8x16_t = vreinterpretq_s8_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQs8_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQs8_u8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_int8x16_t = vreinterpretq_s8_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_f32 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_p128 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- poly128_t arg0_poly128_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_p16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_p64 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_p8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_s16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_s32 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_s64 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_s8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_u32 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_u64 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu16_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu16_u8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint16x8_t = vreinterpretq_u16_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_f32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_p128 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- poly128_t arg0_poly128_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_p16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_p64 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_p8 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_s16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_s32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_s64 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_s8 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_u16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_u64 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu32_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu32_u8 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint32x4_t = vreinterpretq_u32_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_f32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_p128 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- poly128_t arg0_poly128_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_p16 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_p64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_p8 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_s16 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_s32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_s64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_s8 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_u16 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_u32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu64_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu64_u8 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint64x2_t = vreinterpretq_u64_u8 (arg0_uint8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_f32 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_f32 (arg0_float32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_p128.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_p128' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_p128 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- poly128_t arg0_poly128_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_p128 (arg0_poly128_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_p16 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_p16 (arg0_poly16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_p64 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- poly64x2_t arg0_poly64x2_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_p64 (arg0_poly64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_p8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_p8 (arg0_poly8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_s16 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_s16 (arg0_int16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_s32 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_s32 (arg0_int32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_s64 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_s64 (arg0_int64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_s8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_s8 (arg0_int8x16_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_u16 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_u16 (arg0_uint16x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_u32 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_u32 (arg0_uint32x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretQu8_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretQu8_u64 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint8x16_t = vreinterpretq_u8_u64 (arg0_uint64x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_p16 (void)
+-{
+- float32x2_t out_float32x2_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_float32x2_t = vreinterpret_f32_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_p64 (void)
+-{
+- float32x2_t out_float32x2_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_float32x2_t = vreinterpret_f32_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_p8 (void)
+-{
+- float32x2_t out_float32x2_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_float32x2_t = vreinterpret_f32_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_s16 (void)
+-{
+- float32x2_t out_float32x2_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_float32x2_t = vreinterpret_f32_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_s32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_float32x2_t = vreinterpret_f32_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_s64 (void)
+-{
+- float32x2_t out_float32x2_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_float32x2_t = vreinterpret_f32_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_s8 (void)
+-{
+- float32x2_t out_float32x2_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_float32x2_t = vreinterpret_f32_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_u16 (void)
+-{
+- float32x2_t out_float32x2_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_float32x2_t = vreinterpret_f32_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_u32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_float32x2_t = vreinterpret_f32_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_u64 (void)
+-{
+- float32x2_t out_float32x2_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_float32x2_t = vreinterpret_f32_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretf32_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretf32_u8 (void)
+-{
+- float32x2_t out_float32x2_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_float32x2_t = vreinterpret_f32_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_f32 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_poly16x4_t = vreinterpret_p16_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_p64 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_poly16x4_t = vreinterpret_p16_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_p8 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly16x4_t = vreinterpret_p16_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_s16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_poly16x4_t = vreinterpret_p16_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_s32 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_poly16x4_t = vreinterpret_p16_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_s64 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_poly16x4_t = vreinterpret_p16_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_s8 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_poly16x4_t = vreinterpret_p16_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_u16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_poly16x4_t = vreinterpret_p16_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_u32 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_poly16x4_t = vreinterpret_p16_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_u64 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_poly16x4_t = vreinterpret_p16_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp16_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp16_u8 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_poly16x4_t = vreinterpret_p16_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_f32 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_poly64x1_t = vreinterpret_p64_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_p16 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_poly64x1_t = vreinterpret_p64_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_p8 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly64x1_t = vreinterpret_p64_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_s16 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_poly64x1_t = vreinterpret_p64_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_s32 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_poly64x1_t = vreinterpret_p64_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_s64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_poly64x1_t = vreinterpret_p64_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_s8 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_poly64x1_t = vreinterpret_p64_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_u16 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_poly64x1_t = vreinterpret_p64_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_u32 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_poly64x1_t = vreinterpret_p64_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_u64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_poly64x1_t = vreinterpret_p64_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp64_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp64_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp64_u8 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_poly64x1_t = vreinterpret_p64_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_f32 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_poly8x8_t = vreinterpret_p8_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_p16 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_poly8x8_t = vreinterpret_p8_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_p64 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_poly8x8_t = vreinterpret_p8_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_s16 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_poly8x8_t = vreinterpret_p8_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_s32 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_poly8x8_t = vreinterpret_p8_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_s64 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_poly8x8_t = vreinterpret_p8_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_s8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_poly8x8_t = vreinterpret_p8_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_u16 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_poly8x8_t = vreinterpret_p8_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_u32 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_poly8x8_t = vreinterpret_p8_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_u64 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_poly8x8_t = vreinterpret_p8_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretp8_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretp8_u8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_poly8x8_t = vreinterpret_p8_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_f32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_int16x4_t = vreinterpret_s16_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_p16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_int16x4_t = vreinterpret_s16_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_p64 (void)
+-{
+- int16x4_t out_int16x4_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_int16x4_t = vreinterpret_s16_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_p8 (void)
+-{
+- int16x4_t out_int16x4_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_int16x4_t = vreinterpret_s16_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_s32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int16x4_t = vreinterpret_s16_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_s64 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int16x4_t = vreinterpret_s16_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_s8 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int16x4_t = vreinterpret_s16_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_u16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_int16x4_t = vreinterpret_s16_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_u32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_int16x4_t = vreinterpret_s16_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_u64 (void)
+-{
+- int16x4_t out_int16x4_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_int16x4_t = vreinterpret_s16_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets16_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets16_u8 (void)
+-{
+- int16x4_t out_int16x4_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_int16x4_t = vreinterpret_s16_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_f32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_int32x2_t = vreinterpret_s32_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_p16 (void)
+-{
+- int32x2_t out_int32x2_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_int32x2_t = vreinterpret_s32_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_p64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_int32x2_t = vreinterpret_s32_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_p8 (void)
+-{
+- int32x2_t out_int32x2_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_int32x2_t = vreinterpret_s32_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_s16 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int32x2_t = vreinterpret_s32_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_s64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int32x2_t = vreinterpret_s32_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_s8 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int32x2_t = vreinterpret_s32_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_u16 (void)
+-{
+- int32x2_t out_int32x2_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_int32x2_t = vreinterpret_s32_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_u32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_int32x2_t = vreinterpret_s32_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_u64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_int32x2_t = vreinterpret_s32_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets32_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets32_u8 (void)
+-{
+- int32x2_t out_int32x2_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_int32x2_t = vreinterpret_s32_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_f32 (void)
+-{
+- int64x1_t out_int64x1_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_int64x1_t = vreinterpret_s64_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_p16 (void)
+-{
+- int64x1_t out_int64x1_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_int64x1_t = vreinterpret_s64_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_p64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_int64x1_t = vreinterpret_s64_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_p8 (void)
+-{
+- int64x1_t out_int64x1_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_int64x1_t = vreinterpret_s64_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_s16 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int64x1_t = vreinterpret_s64_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_s32 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int64x1_t = vreinterpret_s64_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_s8 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int64x1_t = vreinterpret_s64_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_u16 (void)
+-{
+- int64x1_t out_int64x1_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_int64x1_t = vreinterpret_s64_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_u32 (void)
+-{
+- int64x1_t out_int64x1_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_int64x1_t = vreinterpret_s64_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_u64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_int64x1_t = vreinterpret_s64_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets64_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets64_u8 (void)
+-{
+- int64x1_t out_int64x1_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_int64x1_t = vreinterpret_s64_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_f32 (void)
+-{
+- int8x8_t out_int8x8_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_int8x8_t = vreinterpret_s8_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_p16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_int8x8_t = vreinterpret_s8_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_p64 (void)
+-{
+- int8x8_t out_int8x8_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_int8x8_t = vreinterpret_s8_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_p8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_int8x8_t = vreinterpret_s8_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_s16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int8x8_t = vreinterpret_s8_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_s32 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int8x8_t = vreinterpret_s8_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_s64 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int8x8_t = vreinterpret_s8_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_u16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_int8x8_t = vreinterpret_s8_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_u32 (void)
+-{
+- int8x8_t out_int8x8_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_int8x8_t = vreinterpret_s8_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_u64 (void)
+-{
+- int8x8_t out_int8x8_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_int8x8_t = vreinterpret_s8_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterprets8_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterprets8_u8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_int8x8_t = vreinterpret_s8_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_f32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_uint16x4_t = vreinterpret_u16_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_p16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_uint16x4_t = vreinterpret_u16_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_p64 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_uint16x4_t = vreinterpret_u16_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_p8 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_uint16x4_t = vreinterpret_u16_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_s16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_uint16x4_t = vreinterpret_u16_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_s32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_uint16x4_t = vreinterpret_u16_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_s64 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_uint16x4_t = vreinterpret_u16_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_s8 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_uint16x4_t = vreinterpret_u16_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_u32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint16x4_t = vreinterpret_u16_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_u64 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint16x4_t = vreinterpret_u16_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu16_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu16_u8 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint16x4_t = vreinterpret_u16_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_f32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_uint32x2_t = vreinterpret_u32_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_p16 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_uint32x2_t = vreinterpret_u32_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_p64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_uint32x2_t = vreinterpret_u32_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_p8 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_uint32x2_t = vreinterpret_u32_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_s16 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_uint32x2_t = vreinterpret_u32_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_s32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_uint32x2_t = vreinterpret_u32_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_s64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_uint32x2_t = vreinterpret_u32_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_s8 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_uint32x2_t = vreinterpret_u32_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_u16 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint32x2_t = vreinterpret_u32_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_u64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint32x2_t = vreinterpret_u32_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu32_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu32_u8 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint32x2_t = vreinterpret_u32_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_f32 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_uint64x1_t = vreinterpret_u64_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_p16 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_uint64x1_t = vreinterpret_u64_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_p64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_uint64x1_t = vreinterpret_u64_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_p8 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_uint64x1_t = vreinterpret_u64_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_s16 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_uint64x1_t = vreinterpret_u64_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_s32 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_uint64x1_t = vreinterpret_u64_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_s64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_uint64x1_t = vreinterpret_u64_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_s8 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_uint64x1_t = vreinterpret_u64_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_u16 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint64x1_t = vreinterpret_u64_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_u32 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint64x1_t = vreinterpret_u64_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_u8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu64_u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu64_u8 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint64x1_t = vreinterpret_u64_u8 (arg0_uint8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_f32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_f32 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_uint8x8_t = vreinterpret_u8_f32 (arg0_float32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_p16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_p16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_uint8x8_t = vreinterpret_u8_p16 (arg0_poly16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_p64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_p64 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- poly64x1_t arg0_poly64x1_t;
+-
+- out_uint8x8_t = vreinterpret_u8_p64 (arg0_poly64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_p8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_p8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_uint8x8_t = vreinterpret_u8_p8 (arg0_poly8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_s16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_uint8x8_t = vreinterpret_u8_s16 (arg0_int16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_s32 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_uint8x8_t = vreinterpret_u8_s32 (arg0_int32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_s64 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_uint8x8_t = vreinterpret_u8_s64 (arg0_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s8.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_s8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_uint8x8_t = vreinterpret_u8_s8 (arg0_int8x8_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_u16.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_u16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint8x8_t = vreinterpret_u8_u16 (arg0_uint16x4_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_u32.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_u32 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint8x8_t = vreinterpret_u8_u32 (arg0_uint32x2_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_u64.c
++++ b/src//dev/null
+@@ -1,18 +0,0 @@
+-/* Test the `vreinterpretu8_u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vreinterpretu8_u64 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint8x8_t = vreinterpret_u8_u64 (arg0_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16Qp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev16Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev16Qp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly8x16_t = vrev16q_p8 (arg0_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev16\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16Qs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev16Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev16Qs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vrev16q_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev16\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16Qu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev16Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev16Qu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vrev16q_u8 (arg0_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev16\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16p8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev16p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev16p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly8x8_t = vrev16_p8 (arg0_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev16\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16s8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev16s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev16s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vrev16_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev16\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16u8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev16u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev16u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vrev16_u8 (arg0_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev16\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qp16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32Qp16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_poly16x8_t = vrev32q_p16 (arg0_poly16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32Qp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly8x16_t = vrev32q_p8 (arg0_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32Qs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vrev32q_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32Qs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vrev32q_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32Qu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x8_t = vrev32q_u16 (arg0_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32Qu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vrev32q_u8 (arg0_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32p16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32p16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_poly16x4_t = vrev32_p16 (arg0_poly16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32p8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly8x8_t = vrev32_p8 (arg0_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32s16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32s16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vrev32_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32s8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vrev32_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32u16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32u16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x4_t = vrev32_u16 (arg0_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32u8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev32u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev32u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vrev32_u8 (arg0_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev32\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64Qf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64Qf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vrev64q_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qp16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64Qp16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16x8_t arg0_poly16x8_t;
+-
+- out_poly16x8_t = vrev64q_p16 (arg0_poly16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64Qp8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+-
+- out_poly8x16_t = vrev64q_p8 (arg0_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64Qs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vrev64q_s16 (arg0_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64Qs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64Qs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vrev64q_s32 (arg0_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64Qs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vrev64q_s8 (arg0_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64Qu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x8_t = vrev64q_u16 (arg0_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64Qu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64Qu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x4_t = vrev64q_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64Qu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vrev64q_u8 (arg0_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64f32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vrev64_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64p16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64p16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16x4_t arg0_poly16x4_t;
+-
+- out_poly16x4_t = vrev64_p16 (arg0_poly16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64p8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+-
+- out_poly8x8_t = vrev64_p8 (arg0_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64s16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64s16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vrev64_s16 (arg0_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64s32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64s32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vrev64_s32 (arg0_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64s8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vrev64_s8 (arg0_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64u16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64u16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x4_t = vrev64_u16 (arg0_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64u32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64u32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vrev64_u32 (arg0_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64u8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrev64u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrev64u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vrev64_u8 (arg0_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrev64\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndaf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndaf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndaf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vrnda_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrinta\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndaqf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndaq_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndaqf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vrndaq_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrinta\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vrnd_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrintz\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndmf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndmf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndmf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vrndm_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrintm\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndmqf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndmq_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndmqf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vrndmq_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrintm\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndnf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndnf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndnf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vrndn_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrintn\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndnqf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndnq_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndnqf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vrndnq_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrintn\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndpf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndpf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndpf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vrndp_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrintp\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndpqf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndpq_f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndpqf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vrndpq_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrintp\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrndqf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrndqf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_v8_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_v8_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrndqf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vrndq_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrintz\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrteQf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrsqrteQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrsqrteQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+-
+- out_float32x4_t = vrsqrteq_f32 (arg0_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsqrte\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrteQu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrsqrteQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrsqrteQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x4_t = vrsqrteq_u32 (arg0_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsqrte\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrtef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrsqrtef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrsqrtef32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+-
+- out_float32x2_t = vrsqrte_f32 (arg0_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsqrte\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrteu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vrsqrteu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrsqrteu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vrsqrte_u32 (arg0_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsqrte\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrtsQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vrsqrtsQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrsqrtsQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vrsqrtsq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsqrts\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrtsf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vrsqrtsf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vrsqrtsf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vrsqrts_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vrsqrts\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanef32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_lanef32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32_t arg0_float32_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vsetq_lane_f32 (arg0_float32_t, arg1_float32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanep16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_lanep16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16_t arg0_poly16_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- out_poly16x8_t = vsetq_lane_p16 (arg0_poly16_t, arg1_poly16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.16\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanep8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_lanep8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8_t arg0_poly8_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_poly8x16_t = vsetq_lane_p8 (arg0_poly8_t, arg1_poly8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.8\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_lanes16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16_t arg0_int16_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vsetq_lane_s16 (arg0_int16_t, arg1_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.16\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_lanes32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32_t arg0_int32_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vsetq_lane_s32 (arg0_int32_t, arg1_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_lanes64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64_t arg0_int64_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vsetq_lane_s64 (arg0_int64_t, arg1_int64x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_lanes8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8_t arg0_int8_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vsetq_lane_s8 (arg0_int8_t, arg1_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.8\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_laneu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16_t arg0_uint16_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vsetq_lane_u16 (arg0_uint16_t, arg1_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.16\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_laneu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32_t arg0_uint32_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vsetq_lane_u32 (arg0_uint32_t, arg1_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_laneu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64_t arg0_uint64_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vsetq_lane_u64 (arg0_uint64_t, arg1_uint64x2_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsetQ_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsetQ_laneu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8_t arg0_uint8_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vsetq_lane_u8 (arg0_uint8_t, arg1_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.8\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanef32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vset_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_lanef32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32_t arg0_float32_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vset_lane_f32 (arg0_float32_t, arg1_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanep16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vset_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_lanep16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16_t arg0_poly16_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- out_poly16x4_t = vset_lane_p16 (arg0_poly16_t, arg1_poly16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.16\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanep8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vset_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_lanep8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8_t arg0_poly8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x8_t = vset_lane_p8 (arg0_poly8_t, arg1_poly8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.8\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vset_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_lanes16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16_t arg0_int16_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vset_lane_s16 (arg0_int16_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.16\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vset_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_lanes32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32_t arg0_int32_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vset_lane_s32 (arg0_int32_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vset_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_lanes64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64_t arg0_int64_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vset_lane_s64 (arg0_int64_t, arg1_int64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vset_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_lanes8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8_t arg0_int8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vset_lane_s8 (arg0_int8_t, arg1_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.8\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vset_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_laneu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16_t arg0_uint16_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vset_lane_u16 (arg0_uint16_t, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.16\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vset_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_laneu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32_t arg0_uint32_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vset_lane_u32 (arg0_uint32_t, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.32\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vset_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_laneu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64_t arg0_uint64_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vset_lane_u64 (arg0_uint64_t, arg1_uint64x1_t, 0);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vset_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vset_laneu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8_t arg0_uint8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vset_lane_u8 (arg0_uint8_t, arg1_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vmov\.8\[ \]+\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshlQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vshlq_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshlQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vshlq_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshlQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int64x2_t = vshlq_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshlQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vshlq_n_s8 (arg0_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshlQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x8_t = vshlq_n_u16 (arg0_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshlQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x4_t = vshlq_n_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshlQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint64x2_t = vshlq_n_u64 (arg0_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshlQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vshlq_n_u8 (arg0_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vshlq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vshlq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vshlq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vshlq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vshlq_u16 (arg0_uint16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vshlq_u32 (arg0_uint32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_uint64x2_t = vshlq_u64 (arg0_uint64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vshlq_u8 (arg0_uint8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshl_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshl_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vshl_n_s16 (arg0_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshl_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshl_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vshl_n_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshl_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshl_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int64x1_t = vshl_n_s64 (arg0_int64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshl_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshl_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vshl_n_s8 (arg0_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshl_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshl_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x4_t = vshl_n_u16 (arg0_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshl_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshl_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vshl_n_u32 (arg0_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshl_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshl_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint64x1_t = vshl_n_u64 (arg0_uint64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshl_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshl_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vshl_n_u8 (arg0_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshll_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshll_ns16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int32x4_t = vshll_n_s16 (arg0_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshll\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshll_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshll_ns32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int64x2_t = vshll_n_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshll\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshll_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshll_ns8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int16x8_t = vshll_n_s8 (arg0_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshll\.s8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshll_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshll_nu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint32x4_t = vshll_n_u16 (arg0_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshll\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshll_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshll_nu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint64x2_t = vshll_n_u32 (arg0_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshll\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshll_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshll_nu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint16x8_t = vshll_n_u8 (arg0_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshll\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshls16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vshl_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshls32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vshl_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshls64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshls64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshls64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vshl_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshls8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshls8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vshl_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vshl_u16 (arg0_uint16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vshl_u32 (arg0_uint32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_uint64x1_t = vshl_u64 (arg0_uint64x1_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vshlu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshlu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vshl_u8 (arg0_uint8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vshl\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int16x8_t = vshrq_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int32x4_t = vshrq_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int64x2_t = vshrq_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+-
+- out_int8x16_t = vshrq_n_s8 (arg0_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint16x8_t = vshrq_n_u16 (arg0_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint32x4_t = vshrq_n_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint64x2_t = vshrq_n_u64 (arg0_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+-
+- out_uint8x16_t = vshrq_n_u8 (arg0_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshr_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshr_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+-
+- out_int16x4_t = vshr_n_s16 (arg0_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshr_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshr_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+-
+- out_int32x2_t = vshr_n_s32 (arg0_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshr_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshr_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+-
+- out_int64x1_t = vshr_n_s64 (arg0_int64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshr_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshr_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+-
+- out_int8x8_t = vshr_n_s8 (arg0_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshr_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshr_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+-
+- out_uint16x4_t = vshr_n_u16 (arg0_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshr_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshr_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+-
+- out_uint32x2_t = vshr_n_u32 (arg0_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshr_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshr_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+-
+- out_uint64x1_t = vshr_n_u64 (arg0_uint64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshr_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshr_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+-
+- out_uint8x8_t = vshr_n_u8 (arg0_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshr\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_ns16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrn_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrn_ns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+-
+- out_int8x8_t = vshrn_n_s16 (arg0_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshrn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_ns32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrn_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrn_ns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+-
+- out_int16x4_t = vshrn_n_s32 (arg0_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshrn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_ns64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrn_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrn_ns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+-
+- out_int32x2_t = vshrn_n_s64 (arg0_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshrn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_nu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrn_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrn_nu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+-
+- out_uint8x8_t = vshrn_n_u16 (arg0_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshrn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_nu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrn_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrn_nu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+-
+- out_uint16x4_t = vshrn_n_u32 (arg0_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshrn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_nu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vshrn_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vshrn_nu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+-
+- out_uint32x2_t = vshrn_n_u64 (arg0_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vshrn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_np16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_np16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_np16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16x8_t arg0_poly16x8_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- out_poly16x8_t = vsliq_n_p16 (arg0_poly16x8_t, arg1_poly16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_np64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_np64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_np64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly64x2_t arg0_poly64x2_t;
+- poly64x2_t arg1_poly64x2_t;
+-
+- out_poly64x2_t = vsliq_n_p64 (arg0_poly64x2_t, arg1_poly64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_np8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_np8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_np8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_poly8x16_t = vsliq_n_p8 (arg0_poly8x16_t, arg1_poly8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vsliq_n_s16 (arg0_int16x8_t, arg1_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vsliq_n_s32 (arg0_int32x4_t, arg1_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vsliq_n_s64 (arg0_int64x2_t, arg1_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vsliq_n_s8 (arg0_int8x16_t, arg1_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vsliq_n_u16 (arg0_uint16x8_t, arg1_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vsliq_n_u32 (arg0_uint32x4_t, arg1_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vsliq_n_u64 (arg0_uint64x2_t, arg1_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsliQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsliQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vsliq_n_u8 (arg0_uint8x16_t, arg1_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_np16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_np16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_np16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16x4_t arg0_poly16x4_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- out_poly16x4_t = vsli_n_p16 (arg0_poly16x4_t, arg1_poly16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_np64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_np64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_np64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly64x1_t arg0_poly64x1_t;
+- poly64x1_t arg1_poly64x1_t;
+-
+- out_poly64x1_t = vsli_n_p64 (arg0_poly64x1_t, arg1_poly64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_np8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_np8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_np8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x8_t = vsli_n_p8 (arg0_poly8x8_t, arg1_poly8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vsli_n_s16 (arg0_int16x4_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vsli_n_s32 (arg0_int32x2_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vsli_n_s64 (arg0_int64x1_t, arg1_int64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vsli_n_s8 (arg0_int8x8_t, arg1_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vsli_n_u16 (arg0_uint16x4_t, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vsli_n_u32 (arg0_uint32x2_t, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vsli_n_u64 (arg0_uint64x1_t, arg1_uint64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsli_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsli_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vsli_n_u8 (arg0_uint8x8_t, arg1_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsli\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsraQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsraQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vsraq_n_s16 (arg0_int16x8_t, arg1_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsraQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsraQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vsraq_n_s32 (arg0_int32x4_t, arg1_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsraQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsraQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vsraq_n_s64 (arg0_int64x2_t, arg1_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.s64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsraQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsraQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vsraq_n_s8 (arg0_int8x16_t, arg1_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsraQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsraQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vsraq_n_u16 (arg0_uint16x8_t, arg1_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsraQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsraQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vsraq_n_u32 (arg0_uint32x4_t, arg1_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsraQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsraQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vsraq_n_u64 (arg0_uint64x2_t, arg1_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.u64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsraQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsraQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vsraq_n_u8 (arg0_uint8x16_t, arg1_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsra_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsra_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vsra_n_s16 (arg0_int16x4_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsra_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsra_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vsra_n_s32 (arg0_int32x2_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsra_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsra_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vsra_n_s64 (arg0_int64x1_t, arg1_int64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.s64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsra_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsra_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vsra_n_s8 (arg0_int8x8_t, arg1_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsra_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsra_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vsra_n_u16 (arg0_uint16x4_t, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsra_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsra_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vsra_n_u32 (arg0_uint32x2_t, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsra_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsra_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vsra_n_u64 (arg0_uint64x1_t, arg1_uint64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.u64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsra_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsra_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vsra_n_u8 (arg0_uint8x8_t, arg1_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsra\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_np16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_np16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_np16 (void)
+-{
+- poly16x8_t out_poly16x8_t;
+- poly16x8_t arg0_poly16x8_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- out_poly16x8_t = vsriq_n_p16 (arg0_poly16x8_t, arg1_poly16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_np64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_np64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_np64 (void)
+-{
+- poly64x2_t out_poly64x2_t;
+- poly64x2_t arg0_poly64x2_t;
+- poly64x2_t arg1_poly64x2_t;
+-
+- out_poly64x2_t = vsriq_n_p64 (arg0_poly64x2_t, arg1_poly64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_np8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_np8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_np8 (void)
+-{
+- poly8x16_t out_poly8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_poly8x16_t = vsriq_n_p8 (arg0_poly8x16_t, arg1_poly8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_ns16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vsriq_n_s16 (arg0_int16x8_t, arg1_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_ns32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vsriq_n_s32 (arg0_int32x4_t, arg1_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_ns64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vsriq_n_s64 (arg0_int64x2_t, arg1_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_ns8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vsriq_n_s8 (arg0_int8x16_t, arg1_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_nu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vsriq_n_u16 (arg0_uint16x8_t, arg1_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_nu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vsriq_n_u32 (arg0_uint32x4_t, arg1_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_nu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vsriq_n_u64 (arg0_uint64x2_t, arg1_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsriQ_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsriQ_nu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vsriq_n_u8 (arg0_uint8x16_t, arg1_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_np16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_np16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_np16 (void)
+-{
+- poly16x4_t out_poly16x4_t;
+- poly16x4_t arg0_poly16x4_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- out_poly16x4_t = vsri_n_p16 (arg0_poly16x4_t, arg1_poly16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_np64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_np64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_np64 (void)
+-{
+- poly64x1_t out_poly64x1_t;
+- poly64x1_t arg0_poly64x1_t;
+- poly64x1_t arg1_poly64x1_t;
+-
+- out_poly64x1_t = vsri_n_p64 (arg0_poly64x1_t, arg1_poly64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_np8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_np8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_np8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x8_t = vsri_n_p8 (arg0_poly8x8_t, arg1_poly8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_ns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_ns16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vsri_n_s16 (arg0_int16x4_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_ns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_ns32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vsri_n_s32 (arg0_int32x2_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_ns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_ns64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vsri_n_s64 (arg0_int64x1_t, arg1_int64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_ns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_ns8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vsri_n_s8 (arg0_int8x8_t, arg1_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_nu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_nu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vsri_n_u16 (arg0_uint16x4_t, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_nu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_nu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vsri_n_u32 (arg0_uint32x2_t, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_nu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_nu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vsri_n_u64 (arg0_uint64x1_t, arg1_uint64x1_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsri_nu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsri_nu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vsri_n_u8 (arg0_uint8x8_t, arg1_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vsri\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_lanef32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x4_t arg1_float32x4_t;
+-
+- vst1q_lane_f32 (arg0_float32_t, arg1_float32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_lanep16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- vst1q_lane_p16 (arg0_poly16_t, arg1_poly16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_lanep64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_lanep64 (void)
+-{
+- poly64_t *arg0_poly64_t;
+- poly64x2_t arg1_poly64x2_t;
+-
+- vst1q_lane_p64 (arg0_poly64_t, arg1_poly64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_lanep8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- vst1q_lane_p8 (arg0_poly8_t, arg1_poly8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_lanes16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x8_t arg1_int16x8_t;
+-
+- vst1q_lane_s16 (arg0_int16_t, arg1_int16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_lanes32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x4_t arg1_int32x4_t;
+-
+- vst1q_lane_s32 (arg0_int32_t, arg1_int32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_lanes64 (void)
+-{
+- int64_t *arg0_int64_t;
+- int64x2_t arg1_int64x2_t;
+-
+- vst1q_lane_s64 (arg0_int64_t, arg1_int64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_lanes8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x16_t arg1_int8x16_t;
+-
+- vst1q_lane_s8 (arg0_int8_t, arg1_int8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_laneu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- vst1q_lane_u16 (arg0_uint16_t, arg1_uint16x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_laneu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- vst1q_lane_u32 (arg0_uint32_t, arg1_uint32x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c
++++ b/src//dev/null
+@@ -1,25 +0,0 @@
+-/* Test the `vst1Q_laneu64' ARM Neon intrinsic. */
+-
+-/* Detect ICE in the case of unaligned memory address. */
+-
+-/* { dg-do compile } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-unsigned char dummy_store[1000];
+-
+-void
+-foo (char* addr)
+-{
+- uint8x16_t vdata = vld1q_u8 (addr);
+- vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0);
+-}
+-
+-uint64_t
+-bar (uint64x2_t vdata)
+-{
+- vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0);
+- return vgetq_lane_u64 (vdata, 0);
+-}
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_laneu64 (void)
+-{
+- uint64_t *arg0_uint64_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- vst1q_lane_u64 (arg0_uint64_t, arg1_uint64x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Q_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Q_laneu8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- vst1q_lane_u8 (arg0_uint8_t, arg1_uint8x16_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qf32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x4_t arg1_float32x4_t;
+-
+- vst1q_f32 (arg0_float32_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qp16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- vst1q_p16 (arg0_poly16_t, arg1_poly16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qp64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qp64 (void)
+-{
+- poly64_t *arg0_poly64_t;
+- poly64x2_t arg1_poly64x2_t;
+-
+- vst1q_p64 (arg0_poly64_t, arg1_poly64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qp8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- vst1q_p8 (arg0_poly8_t, arg1_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qs16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x8_t arg1_int16x8_t;
+-
+- vst1q_s16 (arg0_int16_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qs32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x4_t arg1_int32x4_t;
+-
+- vst1q_s32 (arg0_int32_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qs64 (void)
+-{
+- int64_t *arg0_int64_t;
+- int64x2_t arg1_int64x2_t;
+-
+- vst1q_s64 (arg0_int64_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qs8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x16_t arg1_int8x16_t;
+-
+- vst1q_s8 (arg0_int8_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- vst1q_u16 (arg0_uint16_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- vst1q_u32 (arg0_uint32_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qu64 (void)
+-{
+- uint64_t *arg0_uint64_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- vst1q_u64 (arg0_uint64_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1Qu8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- vst1q_u8 (arg0_uint8_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_lanef32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x2_t arg1_float32x2_t;
+-
+- vst1_lane_f32 (arg0_float32_t, arg1_float32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_lanep16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- vst1_lane_p16 (arg0_poly16_t, arg1_poly16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_lanep64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_lanep64 (void)
+-{
+- poly64_t *arg0_poly64_t;
+- poly64x1_t arg1_poly64x1_t;
+-
+- vst1_lane_p64 (arg0_poly64_t, arg1_poly64x1_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_lanep8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- vst1_lane_p8 (arg0_poly8_t, arg1_poly8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_lanes16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x4_t arg1_int16x4_t;
+-
+- vst1_lane_s16 (arg0_int16_t, arg1_int16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_lanes32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x2_t arg1_int32x2_t;
+-
+- vst1_lane_s32 (arg0_int32_t, arg1_int32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_lanes64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_lanes64 (void)
+-{
+- int64_t *arg0_int64_t;
+- int64x1_t arg1_int64x1_t;
+-
+- vst1_lane_s64 (arg0_int64_t, arg1_int64x1_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_lanes8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- vst1_lane_s8 (arg0_int8_t, arg1_int8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_laneu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- vst1_lane_u16 (arg0_uint16_t, arg1_uint16x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_laneu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- vst1_lane_u32 (arg0_uint32_t, arg1_uint32x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_laneu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_laneu64 (void)
+-{
+- uint64_t *arg0_uint64_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- vst1_lane_u64 (arg0_uint64_t, arg1_uint64x1_t, 0);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1_laneu8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- vst1_lane_u8 (arg0_uint8_t, arg1_uint8x8_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1f32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x2_t arg1_float32x2_t;
+-
+- vst1_f32 (arg0_float32_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1p16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1p16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- vst1_p16 (arg0_poly16_t, arg1_poly16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1p64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1p64 (void)
+-{
+- poly64_t *arg0_poly64_t;
+- poly64x1_t arg1_poly64x1_t;
+-
+- vst1_p64 (arg0_poly64_t, arg1_poly64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1p8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1p8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- vst1_p8 (arg0_poly8_t, arg1_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1s16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x4_t arg1_int16x4_t;
+-
+- vst1_s16 (arg0_int16_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1s32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x2_t arg1_int32x2_t;
+-
+- vst1_s32 (arg0_int32_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1s64 (void)
+-{
+- int64_t *arg0_int64_t;
+- int64x1_t arg1_int64x1_t;
+-
+- vst1_s64 (arg0_int64_t, arg1_int64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1s8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- vst1_s8 (arg0_int8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1u16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- vst1_u16 (arg0_uint16_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1u32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- vst1_u32 (arg0_uint32_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1u64 (void)
+-{
+- uint64_t *arg0_uint64_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- vst1_u64 (arg0_uint64_t, arg1_uint64x1_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst1u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst1u8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- vst1_u8 (arg0_uint8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2Q_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Q_lanef32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x4x2_t arg1_float32x4x2_t;
+-
+- vst2q_lane_f32 (arg0_float32_t, arg1_float32x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2Q_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Q_lanep16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x8x2_t arg1_poly16x8x2_t;
+-
+- vst2q_lane_p16 (arg0_poly16_t, arg1_poly16x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2Q_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Q_lanes16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x8x2_t arg1_int16x8x2_t;
+-
+- vst2q_lane_s16 (arg0_int16_t, arg1_int16x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2Q_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Q_lanes32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x4x2_t arg1_int32x4x2_t;
+-
+- vst2q_lane_s32 (arg0_int32_t, arg1_int32x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2Q_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Q_laneu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x8x2_t arg1_uint16x8x2_t;
+-
+- vst2q_lane_u16 (arg0_uint16_t, arg1_uint16x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2Q_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Q_laneu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x4x2_t arg1_uint32x4x2_t;
+-
+- vst2q_lane_u32 (arg0_uint32_t, arg1_uint32x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst2Qf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Qf32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x4x2_t arg1_float32x4x2_t;
+-
+- vst2q_f32 (arg0_float32_t, arg1_float32x4x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst2Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Qp16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x8x2_t arg1_poly16x8x2_t;
+-
+- vst2q_p16 (arg0_poly16_t, arg1_poly16x8x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst2Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Qp8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x16x2_t arg1_poly8x16x2_t;
+-
+- vst2q_p8 (arg0_poly8_t, arg1_poly8x16x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst2Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Qs16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x8x2_t arg1_int16x8x2_t;
+-
+- vst2q_s16 (arg0_int16_t, arg1_int16x8x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst2Qs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Qs32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x4x2_t arg1_int32x4x2_t;
+-
+- vst2q_s32 (arg0_int32_t, arg1_int32x4x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst2Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Qs8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x16x2_t arg1_int8x16x2_t;
+-
+- vst2q_s8 (arg0_int8_t, arg1_int8x16x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst2Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Qu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x8x2_t arg1_uint16x8x2_t;
+-
+- vst2q_u16 (arg0_uint16_t, arg1_uint16x8x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst2Qu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Qu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x4x2_t arg1_uint32x4x2_t;
+-
+- vst2q_u32 (arg0_uint32_t, arg1_uint32x4x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst2Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2Qu8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x16x2_t arg1_uint8x16x2_t;
+-
+- vst2q_u8 (arg0_uint8_t, arg1_uint8x16x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2_lanef32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x2x2_t arg1_float32x2x2_t;
+-
+- vst2_lane_f32 (arg0_float32_t, arg1_float32x2x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2_lanep16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x4x2_t arg1_poly16x4x2_t;
+-
+- vst2_lane_p16 (arg0_poly16_t, arg1_poly16x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2_lanep8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x8x2_t arg1_poly8x8x2_t;
+-
+- vst2_lane_p8 (arg0_poly8_t, arg1_poly8x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2_lanes16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x4x2_t arg1_int16x4x2_t;
+-
+- vst2_lane_s16 (arg0_int16_t, arg1_int16x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2_lanes32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x2x2_t arg1_int32x2x2_t;
+-
+- vst2_lane_s32 (arg0_int32_t, arg1_int32x2x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2_lanes8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x8x2_t arg1_int8x8x2_t;
+-
+- vst2_lane_s8 (arg0_int8_t, arg1_int8x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2_laneu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x4x2_t arg1_uint16x4x2_t;
+-
+- vst2_lane_u16 (arg0_uint16_t, arg1_uint16x4x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2_laneu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x2x2_t arg1_uint32x2x2_t;
+-
+- vst2_lane_u32 (arg0_uint32_t, arg1_uint32x2x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2_laneu8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x8x2_t arg1_uint8x8x2_t;
+-
+- vst2_lane_u8 (arg0_uint8_t, arg1_uint8x8x2_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2f32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x2x2_t arg1_float32x2x2_t;
+-
+- vst2_f32 (arg0_float32_t, arg1_float32x2x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2p16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2p16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x4x2_t arg1_poly16x4x2_t;
+-
+- vst2_p16 (arg0_poly16_t, arg1_poly16x4x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2p64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2p64 (void)
+-{
+- poly64_t *arg0_poly64_t;
+- poly64x1x2_t arg1_poly64x1x2_t;
+-
+- vst2_p64 (arg0_poly64_t, arg1_poly64x1x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2p8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2p8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x8x2_t arg1_poly8x8x2_t;
+-
+- vst2_p8 (arg0_poly8_t, arg1_poly8x8x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2s16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x4x2_t arg1_int16x4x2_t;
+-
+- vst2_s16 (arg0_int16_t, arg1_int16x4x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2s32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x2x2_t arg1_int32x2x2_t;
+-
+- vst2_s32 (arg0_int32_t, arg1_int32x2x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2s64 (void)
+-{
+- int64_t *arg0_int64_t;
+- int64x1x2_t arg1_int64x1x2_t;
+-
+- vst2_s64 (arg0_int64_t, arg1_int64x1x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2s8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x8x2_t arg1_int8x8x2_t;
+-
+- vst2_s8 (arg0_int8_t, arg1_int8x8x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2u16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x4x2_t arg1_uint16x4x2_t;
+-
+- vst2_u16 (arg0_uint16_t, arg1_uint16x4x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2u32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x2x2_t arg1_uint32x2x2_t;
+-
+- vst2_u32 (arg0_uint32_t, arg1_uint32x2x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2u64 (void)
+-{
+- uint64_t *arg0_uint64_t;
+- uint64x1x2_t arg1_uint64x1x2_t;
+-
+- vst2_u64 (arg0_uint64_t, arg1_uint64x1x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst2u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst2u8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x8x2_t arg1_uint8x8x2_t;
+-
+- vst2_u8 (arg0_uint8_t, arg1_uint8x8x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3Q_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Q_lanef32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x4x3_t arg1_float32x4x3_t;
+-
+- vst3q_lane_f32 (arg0_float32_t, arg1_float32x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3Q_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Q_lanep16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x8x3_t arg1_poly16x8x3_t;
+-
+- vst3q_lane_p16 (arg0_poly16_t, arg1_poly16x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3Q_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Q_lanes16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x8x3_t arg1_int16x8x3_t;
+-
+- vst3q_lane_s16 (arg0_int16_t, arg1_int16x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3Q_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Q_lanes32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x4x3_t arg1_int32x4x3_t;
+-
+- vst3q_lane_s32 (arg0_int32_t, arg1_int32x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3Q_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Q_laneu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x8x3_t arg1_uint16x8x3_t;
+-
+- vst3q_lane_u16 (arg0_uint16_t, arg1_uint16x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3Q_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Q_laneu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x4x3_t arg1_uint32x4x3_t;
+-
+- vst3q_lane_u32 (arg0_uint32_t, arg1_uint32x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst3Qf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Qf32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x4x3_t arg1_float32x4x3_t;
+-
+- vst3q_f32 (arg0_float32_t, arg1_float32x4x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst3Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Qp16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x8x3_t arg1_poly16x8x3_t;
+-
+- vst3q_p16 (arg0_poly16_t, arg1_poly16x8x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst3Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Qp8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x16x3_t arg1_poly8x16x3_t;
+-
+- vst3q_p8 (arg0_poly8_t, arg1_poly8x16x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst3Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Qs16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x8x3_t arg1_int16x8x3_t;
+-
+- vst3q_s16 (arg0_int16_t, arg1_int16x8x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst3Qs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Qs32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x4x3_t arg1_int32x4x3_t;
+-
+- vst3q_s32 (arg0_int32_t, arg1_int32x4x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst3Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Qs8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x16x3_t arg1_int8x16x3_t;
+-
+- vst3q_s8 (arg0_int8_t, arg1_int8x16x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst3Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Qu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x8x3_t arg1_uint16x8x3_t;
+-
+- vst3q_u16 (arg0_uint16_t, arg1_uint16x8x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst3Qu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Qu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x4x3_t arg1_uint32x4x3_t;
+-
+- vst3q_u32 (arg0_uint32_t, arg1_uint32x4x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst3Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3Qu8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x16x3_t arg1_uint8x16x3_t;
+-
+- vst3q_u8 (arg0_uint8_t, arg1_uint8x16x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3_lanef32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x2x3_t arg1_float32x2x3_t;
+-
+- vst3_lane_f32 (arg0_float32_t, arg1_float32x2x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3_lanep16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x4x3_t arg1_poly16x4x3_t;
+-
+- vst3_lane_p16 (arg0_poly16_t, arg1_poly16x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3_lanep8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x8x3_t arg1_poly8x8x3_t;
+-
+- vst3_lane_p8 (arg0_poly8_t, arg1_poly8x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3_lanes16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x4x3_t arg1_int16x4x3_t;
+-
+- vst3_lane_s16 (arg0_int16_t, arg1_int16x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3_lanes32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x2x3_t arg1_int32x2x3_t;
+-
+- vst3_lane_s32 (arg0_int32_t, arg1_int32x2x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3_lanes8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x8x3_t arg1_int8x8x3_t;
+-
+- vst3_lane_s8 (arg0_int8_t, arg1_int8x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3_laneu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x4x3_t arg1_uint16x4x3_t;
+-
+- vst3_lane_u16 (arg0_uint16_t, arg1_uint16x4x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3_laneu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x2x3_t arg1_uint32x2x3_t;
+-
+- vst3_lane_u32 (arg0_uint32_t, arg1_uint32x2x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3_laneu8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x8x3_t arg1_uint8x8x3_t;
+-
+- vst3_lane_u8 (arg0_uint8_t, arg1_uint8x8x3_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3f32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x2x3_t arg1_float32x2x3_t;
+-
+- vst3_f32 (arg0_float32_t, arg1_float32x2x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3p16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3p16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x4x3_t arg1_poly16x4x3_t;
+-
+- vst3_p16 (arg0_poly16_t, arg1_poly16x4x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3p64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3p64 (void)
+-{
+- poly64_t *arg0_poly64_t;
+- poly64x1x3_t arg1_poly64x1x3_t;
+-
+- vst3_p64 (arg0_poly64_t, arg1_poly64x1x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3p8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3p8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x8x3_t arg1_poly8x8x3_t;
+-
+- vst3_p8 (arg0_poly8_t, arg1_poly8x8x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3s16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x4x3_t arg1_int16x4x3_t;
+-
+- vst3_s16 (arg0_int16_t, arg1_int16x4x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3s32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x2x3_t arg1_int32x2x3_t;
+-
+- vst3_s32 (arg0_int32_t, arg1_int32x2x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3s64 (void)
+-{
+- int64_t *arg0_int64_t;
+- int64x1x3_t arg1_int64x1x3_t;
+-
+- vst3_s64 (arg0_int64_t, arg1_int64x1x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3s8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x8x3_t arg1_int8x8x3_t;
+-
+- vst3_s8 (arg0_int8_t, arg1_int8x8x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3u16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x4x3_t arg1_uint16x4x3_t;
+-
+- vst3_u16 (arg0_uint16_t, arg1_uint16x4x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3u32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x2x3_t arg1_uint32x2x3_t;
+-
+- vst3_u32 (arg0_uint32_t, arg1_uint32x2x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3u64 (void)
+-{
+- uint64_t *arg0_uint64_t;
+- uint64x1x3_t arg1_uint64x1x3_t;
+-
+- vst3_u64 (arg0_uint64_t, arg1_uint64x1x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst3u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst3u8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x8x3_t arg1_uint8x8x3_t;
+-
+- vst3_u8 (arg0_uint8_t, arg1_uint8x8x3_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4Q_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Q_lanef32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x4x4_t arg1_float32x4x4_t;
+-
+- vst4q_lane_f32 (arg0_float32_t, arg1_float32x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4Q_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Q_lanep16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x8x4_t arg1_poly16x8x4_t;
+-
+- vst4q_lane_p16 (arg0_poly16_t, arg1_poly16x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4Q_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Q_lanes16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x8x4_t arg1_int16x8x4_t;
+-
+- vst4q_lane_s16 (arg0_int16_t, arg1_int16x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4Q_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Q_lanes32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x4x4_t arg1_int32x4x4_t;
+-
+- vst4q_lane_s32 (arg0_int32_t, arg1_int32x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4Q_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Q_laneu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x8x4_t arg1_uint16x8x4_t;
+-
+- vst4q_lane_u16 (arg0_uint16_t, arg1_uint16x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4Q_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Q_laneu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x4x4_t arg1_uint32x4x4_t;
+-
+- vst4q_lane_u32 (arg0_uint32_t, arg1_uint32x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst4Qf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Qf32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x4x4_t arg1_float32x4x4_t;
+-
+- vst4q_f32 (arg0_float32_t, arg1_float32x4x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst4Qp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Qp16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x8x4_t arg1_poly16x8x4_t;
+-
+- vst4q_p16 (arg0_poly16_t, arg1_poly16x8x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst4Qp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Qp8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x16x4_t arg1_poly8x16x4_t;
+-
+- vst4q_p8 (arg0_poly8_t, arg1_poly8x16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst4Qs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Qs16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x8x4_t arg1_int16x8x4_t;
+-
+- vst4q_s16 (arg0_int16_t, arg1_int16x8x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst4Qs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Qs32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x4x4_t arg1_int32x4x4_t;
+-
+- vst4q_s32 (arg0_int32_t, arg1_int32x4x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst4Qs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Qs8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x16x4_t arg1_int8x16x4_t;
+-
+- vst4q_s8 (arg0_int8_t, arg1_int8x16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst4Qu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Qu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x8x4_t arg1_uint16x8x4_t;
+-
+- vst4q_u16 (arg0_uint16_t, arg1_uint16x8x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst4Qu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Qu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x4x4_t arg1_uint32x4x4_t;
+-
+- vst4q_u32 (arg0_uint32_t, arg1_uint32x4x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vst4Qu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4Qu8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x16x4_t arg1_uint8x16x4_t;
+-
+- vst4q_u8 (arg0_uint8_t, arg1_uint8x16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanef32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4_lanef32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4_lanef32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x2x4_t arg1_float32x2x4_t;
+-
+- vst4_lane_f32 (arg0_float32_t, arg1_float32x2x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4_lanep16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4_lanep16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x4x4_t arg1_poly16x4x4_t;
+-
+- vst4_lane_p16 (arg0_poly16_t, arg1_poly16x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4_lanep8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4_lanep8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x8x4_t arg1_poly8x8x4_t;
+-
+- vst4_lane_p8 (arg0_poly8_t, arg1_poly8x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4_lanes16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4_lanes16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x4x4_t arg1_int16x4x4_t;
+-
+- vst4_lane_s16 (arg0_int16_t, arg1_int16x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4_lanes32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4_lanes32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x2x4_t arg1_int32x2x4_t;
+-
+- vst4_lane_s32 (arg0_int32_t, arg1_int32x2x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4_lanes8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4_lanes8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x8x4_t arg1_int8x8x4_t;
+-
+- vst4_lane_s8 (arg0_int8_t, arg1_int8x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4_laneu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4_laneu16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x4x4_t arg1_uint16x4x4_t;
+-
+- vst4_lane_u16 (arg0_uint16_t, arg1_uint16x4x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4_laneu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4_laneu32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x2x4_t arg1_uint32x2x4_t;
+-
+- vst4_lane_u32 (arg0_uint32_t, arg1_uint32x2x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4_laneu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4_laneu8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x8x4_t arg1_uint8x8x4_t;
+-
+- vst4_lane_u8 (arg0_uint8_t, arg1_uint8x8x4_t, 1);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4f32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4f32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4f32 (void)
+-{
+- float32_t *arg0_float32_t;
+- float32x2x4_t arg1_float32x2x4_t;
+-
+- vst4_f32 (arg0_float32_t, arg1_float32x2x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4p16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4p16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4p16 (void)
+-{
+- poly16_t *arg0_poly16_t;
+- poly16x4x4_t arg1_poly16x4x4_t;
+-
+- vst4_p16 (arg0_poly16_t, arg1_poly16x4x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4p64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4p64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_crypto_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_crypto } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4p64 (void)
+-{
+- poly64_t *arg0_poly64_t;
+- poly64x1x4_t arg1_poly64x1x4_t;
+-
+- vst4_p64 (arg0_poly64_t, arg1_poly64x1x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4p8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4p8 (void)
+-{
+- poly8_t *arg0_poly8_t;
+- poly8x8x4_t arg1_poly8x8x4_t;
+-
+- vst4_p8 (arg0_poly8_t, arg1_poly8x8x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4s16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4s16 (void)
+-{
+- int16_t *arg0_int16_t;
+- int16x4x4_t arg1_int16x4x4_t;
+-
+- vst4_s16 (arg0_int16_t, arg1_int16x4x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4s32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4s32 (void)
+-{
+- int32_t *arg0_int32_t;
+- int32x2x4_t arg1_int32x2x4_t;
+-
+- vst4_s32 (arg0_int32_t, arg1_int32x2x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4s64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4s64 (void)
+-{
+- int64_t *arg0_int64_t;
+- int64x1x4_t arg1_int64x1x4_t;
+-
+- vst4_s64 (arg0_int64_t, arg1_int64x1x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4s8 (void)
+-{
+- int8_t *arg0_int8_t;
+- int8x8x4_t arg1_int8x8x4_t;
+-
+- vst4_s8 (arg0_int8_t, arg1_int8x8x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u16.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4u16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4u16 (void)
+-{
+- uint16_t *arg0_uint16_t;
+- uint16x4x4_t arg1_uint16x4x4_t;
+-
+- vst4_u16 (arg0_uint16_t, arg1_uint16x4x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u32.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4u32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4u32 (void)
+-{
+- uint32_t *arg0_uint32_t;
+- uint32x2x4_t arg1_uint32x2x4_t;
+-
+- vst4_u32 (arg0_uint32_t, arg1_uint32x2x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4u64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4u64 (void)
+-{
+- uint64_t *arg0_uint64_t;
+- uint64x1x4_t arg1_uint64x1x4_t;
+-
+- vst4_u64 (arg0_uint64_t, arg1_uint64x1x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u8.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vst4u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vst4u8 (void)
+-{
+- uint8_t *arg0_uint8_t;
+- uint8x8x4_t arg1_uint8x8x4_t;
+-
+- vst4_u8 (arg0_uint8_t, arg1_uint8x8x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubQf32 (void)
+-{
+- float32x4_t out_float32x4_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4_t = vsubq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.f32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubQs16 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8_t = vsubq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubQs32 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4_t = vsubq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQs64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubQs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubQs64 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int64x2_t = vsubq_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubQs8 (void)
+-{
+- int8x16_t out_int8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16_t = vsubq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vsubq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vsubq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubQu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubQu64 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint64x2_t = vsubq_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i64\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vsubq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubf32 (void)
+-{
+- float32x2_t out_float32x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2_t = vsub_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.f32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubhns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubhns16 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int8x8_t = vsubhn_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubhn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubhns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubhns32 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int16x4_t = vsubhn_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubhn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhns64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubhns64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubhns64 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int64x2_t arg0_int64x2_t;
+- int64x2_t arg1_int64x2_t;
+-
+- out_int32x2_t = vsubhn_s64 (arg0_int64x2_t, arg1_int64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubhn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhnu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubhnu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubhnu16 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint8x8_t = vsubhn_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubhn\.i16\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhnu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubhnu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubhnu32 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint16x4_t = vsubhn_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubhn\.i32\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhnu64.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubhnu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubhnu64 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint64x2_t arg1_uint64x2_t;
+-
+- out_uint32x2_t = vsubhn_u64 (arg0_uint64x2_t, arg1_uint64x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubhn\.i64\[ \]+\[dD\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubls16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubls16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubls16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x4_t = vsubl_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubl\.s16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubls32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubls32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubls32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x2_t = vsubl_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubl\.s32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubls8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubls8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubls8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int16x8_t = vsubl_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubl\.s8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsublu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsublu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsublu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint32x4_t = vsubl_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubl\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsublu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsublu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsublu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint64x2_t = vsubl_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubl\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsublu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsublu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsublu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint16x8_t = vsubl_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubl\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubs16 (void)
+-{
+- int16x4_t out_int16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4_t = vsub_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubs32 (void)
+-{
+- int32x2_t out_int32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2_t = vsub_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubs64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vsubs64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubs64 (void)
+-{
+- int64x1_t out_int64x1_t;
+- int64x1_t arg0_int64x1_t;
+- int64x1_t arg1_int64x1_t;
+-
+- out_int64x1_t = vsub_s64 (arg0_int64x1_t, arg1_int64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubs8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vsub_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vsub_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vsub_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubu64.c
++++ b/src//dev/null
+@@ -1,19 +0,0 @@
+-/* Test the `vsubu64' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubu64 (void)
+-{
+- uint64x1_t out_uint64x1_t;
+- uint64x1_t arg0_uint64x1_t;
+- uint64x1_t arg1_uint64x1_t;
+-
+- out_uint64x1_t = vsub_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+-}
+-
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vsub_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsub\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubws16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubws16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubws16 (void)
+-{
+- int32x4_t out_int32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int32x4_t = vsubw_s16 (arg0_int32x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubw\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubws32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubws32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubws32 (void)
+-{
+- int64x2_t out_int64x2_t;
+- int64x2_t arg0_int64x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int64x2_t = vsubw_s32 (arg0_int64x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubw\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubws8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubws8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubws8 (void)
+-{
+- int16x8_t out_int16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int16x8_t = vsubw_s8 (arg0_int16x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubw\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubwu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubwu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubwu16 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint32x4_t = vsubw_u16 (arg0_uint32x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubw\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubwu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubwu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubwu32 (void)
+-{
+- uint64x2_t out_uint64x2_t;
+- uint64x2_t arg0_uint64x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint64x2_t = vsubw_u32 (arg0_uint64x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubw\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubwu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vsubwu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vsubwu8 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint16x8_t = vsubw_u8 (arg0_uint16x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vsubw\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl1p8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl1p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl1p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_poly8x8_t = vtbl1_p8 (arg0_poly8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, ((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl1s8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl1s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl1s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vtbl1_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, ((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl1u8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl1u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl1u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vtbl1_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, ((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl2p8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl2p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl2p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8x2_t arg0_poly8x8x2_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_poly8x8_t = vtbl2_p8 (arg0_poly8x8x2_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl2s8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl2s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl2s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8x2_t arg0_int8x8x2_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vtbl2_s8 (arg0_int8x8x2_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl2u8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl2u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl2u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8x2_t arg0_uint8x8x2_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vtbl2_u8 (arg0_uint8x8x2_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl3p8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl3p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl3p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8x3_t arg0_poly8x8x3_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_poly8x8_t = vtbl3_p8 (arg0_poly8x8x3_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl3s8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl3s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl3s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8x3_t arg0_int8x8x3_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vtbl3_s8 (arg0_int8x8x3_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl3u8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl3u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl3u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8x3_t arg0_uint8x8x3_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vtbl3_u8 (arg0_uint8x8x3_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl4p8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl4p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl4p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8x4_t arg0_poly8x8x4_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_poly8x8_t = vtbl4_p8 (arg0_poly8x8x4_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl4s8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl4s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl4s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8x4_t arg0_int8x8x4_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8_t = vtbl4_s8 (arg0_int8x8x4_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl4u8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtbl4u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbl4u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8x4_t arg0_uint8x8x4_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vtbl4_u8 (arg0_uint8x8x4_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbl\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx1p8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx1p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx1p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_poly8x8_t = vtbx1_p8 (arg0_poly8x8_t, arg1_poly8x8_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, ((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx1s8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx1s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx1s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int8x8_t = vtbx1_s8 (arg0_int8x8_t, arg1_int8x8_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, ((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx1u8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx1u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx1u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint8x8_t = vtbx1_u8 (arg0_uint8x8_t, arg1_uint8x8_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, ((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx2p8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx2p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx2p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8x2_t arg1_poly8x8x2_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_poly8x8_t = vtbx2_p8 (arg0_poly8x8_t, arg1_poly8x8x2_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx2s8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx2s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx2s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8x2_t arg1_int8x8x2_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int8x8_t = vtbx2_s8 (arg0_int8x8_t, arg1_int8x8x2_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx2u8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx2u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx2u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8x2_t arg1_uint8x8x2_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint8x8_t = vtbx2_u8 (arg0_uint8x8_t, arg1_uint8x8x2_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx3p8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx3p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx3p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8x3_t arg1_poly8x8x3_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_poly8x8_t = vtbx3_p8 (arg0_poly8x8_t, arg1_poly8x8x3_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx3s8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx3s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx3s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8x3_t arg1_int8x8x3_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int8x8_t = vtbx3_s8 (arg0_int8x8_t, arg1_int8x8x3_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx3u8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx3u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx3u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8x3_t arg1_uint8x8x3_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint8x8_t = vtbx3_u8 (arg0_uint8x8_t, arg1_uint8x8x3_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx4p8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx4p8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx4p8 (void)
+-{
+- poly8x8_t out_poly8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8x4_t arg1_poly8x8x4_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_poly8x8_t = vtbx4_p8 (arg0_poly8x8_t, arg1_poly8x8x4_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx4s8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx4s8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx4s8 (void)
+-{
+- int8x8_t out_int8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8x4_t arg1_int8x8x4_t;
+- int8x8_t arg2_int8x8_t;
+-
+- out_int8x8_t = vtbx4_s8 (arg0_int8x8_t, arg1_int8x8x4_t, arg2_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx4u8.c
++++ b/src//dev/null
+@@ -1,21 +0,0 @@
+-/* Test the `vtbx4u8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtbx4u8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8x4_t arg1_uint8x8x4_t;
+- uint8x8_t arg2_uint8x8_t;
+-
+- out_uint8x8_t = vtbx4_u8 (arg0_uint8x8_t, arg1_uint8x8x4_t, arg2_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtbx\.8\[ \]+\[dD\]\[0-9\]+, \\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnQf32 (void)
+-{
+- float32x4x2_t out_float32x4x2_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4x2_t = vtrnq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnQp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnQp16 (void)
+-{
+- poly16x8x2_t out_poly16x8x2_t;
+- poly16x8_t arg0_poly16x8_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- out_poly16x8x2_t = vtrnq_p16 (arg0_poly16x8_t, arg1_poly16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnQp8 (void)
+-{
+- poly8x16x2_t out_poly8x16x2_t;
+- poly8x16_t arg0_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_poly8x16x2_t = vtrnq_p8 (arg0_poly8x16_t, arg1_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnQs16 (void)
+-{
+- int16x8x2_t out_int16x8x2_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8x2_t = vtrnq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnQs32 (void)
+-{
+- int32x4x2_t out_int32x4x2_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4x2_t = vtrnq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnQs8 (void)
+-{
+- int8x16x2_t out_int8x16x2_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16x2_t = vtrnq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnQu16 (void)
+-{
+- uint16x8x2_t out_uint16x8x2_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8x2_t = vtrnq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnQu32 (void)
+-{
+- uint32x4x2_t out_uint32x4x2_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4x2_t = vtrnq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnQu8 (void)
+-{
+- uint8x16x2_t out_uint8x16x2_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16x2_t = vtrnq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnf32 (void)
+-{
+- float32x2x2_t out_float32x2x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2x2_t = vtrn_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnp16 (void)
+-{
+- poly16x4x2_t out_poly16x4x2_t;
+- poly16x4_t arg0_poly16x4_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- out_poly16x4x2_t = vtrn_p16 (arg0_poly16x4_t, arg1_poly16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnp8 (void)
+-{
+- poly8x8x2_t out_poly8x8x2_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x8x2_t = vtrn_p8 (arg0_poly8x8_t, arg1_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrns16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrns16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrns16 (void)
+-{
+- int16x4x2_t out_int16x4x2_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4x2_t = vtrn_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrns32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrns32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrns32 (void)
+-{
+- int32x2x2_t out_int32x2x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2x2_t = vtrn_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrns8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrns8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrns8 (void)
+-{
+- int8x8x2_t out_int8x8x2_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8x2_t = vtrn_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnu16 (void)
+-{
+- uint16x4x2_t out_uint16x4x2_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4x2_t = vtrn_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnu32 (void)
+-{
+- uint32x2x2_t out_uint32x2x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2x2_t = vtrn_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtrnu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtrnu8 (void)
+-{
+- uint8x8x2_t out_uint8x8x2_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8x2_t = vtrn_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtrn\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstQp8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- poly8x16_t arg0_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_uint8x16_t = vtstq_p8 (arg0_poly8x16_t, arg1_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstQs16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_uint16x8_t = vtstq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstQs32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_uint32x4_t = vtstq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstQs8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_uint8x16_t = vtstq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstQu16 (void)
+-{
+- uint16x8_t out_uint16x8_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8_t = vtstq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstQu32 (void)
+-{
+- uint32x4_t out_uint32x4_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4_t = vtstq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstQu8 (void)
+-{
+- uint8x16_t out_uint8x16_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16_t = vtstq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstp8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_uint8x8_t = vtst_p8 (arg0_poly8x8_t, arg1_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtsts16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtsts16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtsts16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_uint16x4_t = vtst_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtsts32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtsts32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtsts32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_uint32x2_t = vtst_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtsts8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtsts8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtsts8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_uint8x8_t = vtst_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstu16 (void)
+-{
+- uint16x4_t out_uint16x4_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4_t = vtst_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstu32 (void)
+-{
+- uint32x2_t out_uint32x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2_t = vtst_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vtstu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vtstu8 (void)
+-{
+- uint8x8_t out_uint8x8_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8_t = vtst_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vtst\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpQf32 (void)
+-{
+- float32x4x2_t out_float32x4x2_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4x2_t = vuzpq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpQp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpQp16 (void)
+-{
+- poly16x8x2_t out_poly16x8x2_t;
+- poly16x8_t arg0_poly16x8_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- out_poly16x8x2_t = vuzpq_p16 (arg0_poly16x8_t, arg1_poly16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpQp8 (void)
+-{
+- poly8x16x2_t out_poly8x16x2_t;
+- poly8x16_t arg0_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_poly8x16x2_t = vuzpq_p8 (arg0_poly8x16_t, arg1_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpQs16 (void)
+-{
+- int16x8x2_t out_int16x8x2_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8x2_t = vuzpq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpQs32 (void)
+-{
+- int32x4x2_t out_int32x4x2_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4x2_t = vuzpq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpQs8 (void)
+-{
+- int8x16x2_t out_int8x16x2_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16x2_t = vuzpq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpQu16 (void)
+-{
+- uint16x8x2_t out_uint16x8x2_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8x2_t = vuzpq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpQu32 (void)
+-{
+- uint32x4x2_t out_uint32x4x2_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4x2_t = vuzpq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpQu8 (void)
+-{
+- uint8x16x2_t out_uint8x16x2_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16x2_t = vuzpq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpf32 (void)
+-{
+- float32x2x2_t out_float32x2x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2x2_t = vuzp_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpp16 (void)
+-{
+- poly16x4x2_t out_poly16x4x2_t;
+- poly16x4_t arg0_poly16x4_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- out_poly16x4x2_t = vuzp_p16 (arg0_poly16x4_t, arg1_poly16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpp8 (void)
+-{
+- poly8x8x2_t out_poly8x8x2_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x8x2_t = vuzp_p8 (arg0_poly8x8_t, arg1_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzps16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzps16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzps16 (void)
+-{
+- int16x4x2_t out_int16x4x2_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4x2_t = vuzp_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzps32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzps32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzps32 (void)
+-{
+- int32x2x2_t out_int32x2x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2x2_t = vuzp_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzps8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzps8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzps8 (void)
+-{
+- int8x8x2_t out_int8x8x2_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8x2_t = vuzp_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpu16 (void)
+-{
+- uint16x4x2_t out_uint16x4x2_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4x2_t = vuzp_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpu32 (void)
+-{
+- uint32x2x2_t out_uint32x2x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2x2_t = vuzp_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vuzpu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vuzpu8 (void)
+-{
+- uint8x8x2_t out_uint8x8x2_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8x2_t = vuzp_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipQf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipQf32 (void)
+-{
+- float32x4x2_t out_float32x4x2_t;
+- float32x4_t arg0_float32x4_t;
+- float32x4_t arg1_float32x4_t;
+-
+- out_float32x4x2_t = vzipq_f32 (arg0_float32x4_t, arg1_float32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipQp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipQp16 (void)
+-{
+- poly16x8x2_t out_poly16x8x2_t;
+- poly16x8_t arg0_poly16x8_t;
+- poly16x8_t arg1_poly16x8_t;
+-
+- out_poly16x8x2_t = vzipq_p16 (arg0_poly16x8_t, arg1_poly16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipQp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipQp8 (void)
+-{
+- poly8x16x2_t out_poly8x16x2_t;
+- poly8x16_t arg0_poly8x16_t;
+- poly8x16_t arg1_poly8x16_t;
+-
+- out_poly8x16x2_t = vzipq_p8 (arg0_poly8x16_t, arg1_poly8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQs16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipQs16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipQs16 (void)
+-{
+- int16x8x2_t out_int16x8x2_t;
+- int16x8_t arg0_int16x8_t;
+- int16x8_t arg1_int16x8_t;
+-
+- out_int16x8x2_t = vzipq_s16 (arg0_int16x8_t, arg1_int16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQs32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipQs32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipQs32 (void)
+-{
+- int32x4x2_t out_int32x4x2_t;
+- int32x4_t arg0_int32x4_t;
+- int32x4_t arg1_int32x4_t;
+-
+- out_int32x4x2_t = vzipq_s32 (arg0_int32x4_t, arg1_int32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQs8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipQs8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipQs8 (void)
+-{
+- int8x16x2_t out_int8x16x2_t;
+- int8x16_t arg0_int8x16_t;
+- int8x16_t arg1_int8x16_t;
+-
+- out_int8x16x2_t = vzipq_s8 (arg0_int8x16_t, arg1_int8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipQu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipQu16 (void)
+-{
+- uint16x8x2_t out_uint16x8x2_t;
+- uint16x8_t arg0_uint16x8_t;
+- uint16x8_t arg1_uint16x8_t;
+-
+- out_uint16x8x2_t = vzipq_u16 (arg0_uint16x8_t, arg1_uint16x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipQu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipQu32 (void)
+-{
+- uint32x4x2_t out_uint32x4x2_t;
+- uint32x4_t arg0_uint32x4_t;
+- uint32x4_t arg1_uint32x4_t;
+-
+- out_uint32x4x2_t = vzipq_u32 (arg0_uint32x4_t, arg1_uint32x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipQu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipQu8 (void)
+-{
+- uint8x16x2_t out_uint8x16x2_t;
+- uint8x16_t arg0_uint8x16_t;
+- uint8x16_t arg1_uint8x16_t;
+-
+- out_uint8x16x2_t = vzipq_u8 (arg0_uint8x16_t, arg1_uint8x16_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipf32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipf32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipf32 (void)
+-{
+- float32x2x2_t out_float32x2x2_t;
+- float32x2_t arg0_float32x2_t;
+- float32x2_t arg1_float32x2_t;
+-
+- out_float32x2x2_t = vzip_f32 (arg0_float32x2_t, arg1_float32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipp16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipp16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipp16 (void)
+-{
+- poly16x4x2_t out_poly16x4x2_t;
+- poly16x4_t arg0_poly16x4_t;
+- poly16x4_t arg1_poly16x4_t;
+-
+- out_poly16x4x2_t = vzip_p16 (arg0_poly16x4_t, arg1_poly16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipp8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipp8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipp8 (void)
+-{
+- poly8x8x2_t out_poly8x8x2_t;
+- poly8x8_t arg0_poly8x8_t;
+- poly8x8_t arg1_poly8x8_t;
+-
+- out_poly8x8x2_t = vzip_p8 (arg0_poly8x8_t, arg1_poly8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzips16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzips16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzips16 (void)
+-{
+- int16x4x2_t out_int16x4x2_t;
+- int16x4_t arg0_int16x4_t;
+- int16x4_t arg1_int16x4_t;
+-
+- out_int16x4x2_t = vzip_s16 (arg0_int16x4_t, arg1_int16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzips32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzips32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzips32 (void)
+-{
+- int32x2x2_t out_int32x2x2_t;
+- int32x2_t arg0_int32x2_t;
+- int32x2_t arg1_int32x2_t;
+-
+- out_int32x2x2_t = vzip_s32 (arg0_int32x2_t, arg1_int32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzips8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzips8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzips8 (void)
+-{
+- int8x8x2_t out_int8x8x2_t;
+- int8x8_t arg0_int8x8_t;
+- int8x8_t arg1_int8x8_t;
+-
+- out_int8x8x2_t = vzip_s8 (arg0_int8x8_t, arg1_int8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipu16.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipu16' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipu16 (void)
+-{
+- uint16x4x2_t out_uint16x4x2_t;
+- uint16x4_t arg0_uint16x4_t;
+- uint16x4_t arg1_uint16x4_t;
+-
+- out_uint16x4x2_t = vzip_u16 (arg0_uint16x4_t, arg1_uint16x4_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipu32.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipu32' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipu32 (void)
+-{
+- uint32x2x2_t out_uint32x2x2_t;
+- uint32x2_t arg0_uint32x2_t;
+- uint32x2_t arg1_uint32x2_t;
+-
+- out_uint32x2x2_t = vzip_u32 (arg0_uint32x2_t, arg1_uint32x2_t);
+-}
+-
+-/* { dg-final { scan-assembler "vuzp\.32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipu8.c
++++ b/src//dev/null
+@@ -1,20 +0,0 @@
+-/* Test the `vzipu8' ARM Neon intrinsic. */
+-/* This file was autogenerated by neon-testgen. */
+-
+-/* { dg-do assemble } */
+-/* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0" } */
+-/* { dg-add-options arm_neon } */
+-
+-#include "arm_neon.h"
+-
+-void test_vzipu8 (void)
+-{
+- uint8x8x2_t out_uint8x8x2_t;
+- uint8x8_t arg0_uint8x8_t;
+- uint8x8_t arg1_uint8x8_t;
+-
+- out_uint8x8x2_t = vzip_u8 (arg0_uint8x8_t, arg1_uint8x8_t);
+-}
+-
+-/* { dg-final { scan-assembler "vzip\.8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/optional_thumb-1.c
+@@ -0,0 +1,7 @@
++/* { dg-do compile { target { ! default_mode } } } */
++/* { dg-skip-if "-marm/-mthumb/-march/-mcpu given" { *-*-* } { "-marm" "-mthumb" "-march=*" "-mcpu=*" } } */
++/* { dg-options "-march=armv6-m" } */
++
++/* Check that -mthumb is not needed when compiling for a Thumb-only target. */
++
++int foo;
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/optional_thumb-2.c
+@@ -0,0 +1,7 @@
++/* { dg-do compile { target { ! default_mode } } } */
++/* { dg-skip-if "-marm/-mthumb/-march/-mcpu given" { *-*-* } { "-marm" "-mthumb" "-march=*" "-mcpu=*" } } */
++/* { dg-options "-mcpu=cortex-m4" } */
++
++/* Check that -mthumb is not needed when compiling for a Thumb-only target. */
++
++int foo;
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/optional_thumb-3.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_cortex_m } */
++/* { dg-skip-if "-mthumb given" { *-*-* } { "-mthumb" } } */
++/* { dg-options "-marm" } */
++/* { dg-error "target CPU does not support ARM mode" "missing error with -marm on Thumb-only targets" { target *-*-* } 0 } */
++
++/* Check that -marm gives an error when compiling for a Thumb-only target. */
++
++int foo;
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/polytypes.c
+@@ -0,0 +1,48 @@
++/* Check that NEON polynomial vector types are suitably incompatible with
++ integer vector types of the same layout. */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++void s64_8 (int8x8_t a) {}
++void u64_8 (uint8x8_t a) {}
++void p64_8 (poly8x8_t a) {}
++void s64_16 (int16x4_t a) {}
++void u64_16 (uint16x4_t a) {}
++void p64_16 (poly16x4_t a) {}
++
++void s128_8 (int8x16_t a) {}
++void u128_8 (uint8x16_t a) {}
++void p128_8 (poly8x16_t a) {}
++void s128_16 (int16x8_t a) {}
++void u128_16 (uint16x8_t a) {}
++void p128_16 (poly16x8_t a) {}
++
++void foo ()
++{
++ poly8x8_t v64_8;
++ poly16x4_t v64_16;
++ poly8x16_t v128_8;
++ poly16x8_t v128_16;
++
++ s64_8 (v64_8); /* { dg-message "use -flax-vector-conversions" } */
++ /* { dg-error "incompatible type for argument 1 of 's64_8'" "" { target *-*-* } 31 } */
++ u64_8 (v64_8); /* { dg-error "incompatible type for argument 1 of 'u64_8'" } */
++ p64_8 (v64_8);
++
++ s64_16 (v64_16); /* { dg-error "incompatible type for argument 1 of 's64_16'" } */
++ u64_16 (v64_16); /* { dg-error "incompatible type for argument 1 of 'u64_16'" } */
++ p64_16 (v64_16);
++
++ s128_8 (v128_8); /* { dg-error "incompatible type for argument 1 of 's128_8'" } */
++ u128_8 (v128_8); /* { dg-error "incompatible type for argument 1 of 'u128_8'" } */
++ p128_8 (v128_8);
++
++ s128_16 (v128_16); /* { dg-error "incompatible type for argument 1 of 's128_16'" } */
++ u128_16 (v128_16); /* { dg-error "incompatible type for argument 1 of 'u128_16'" } */
++ p128_16 (v128_16);
++}
++/* { dg-message "note: expected '\[^'\n\]*' but argument is of type '\[^'\n\]*'" "note: expected" { target *-*-* } 0 } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/pr37780_1.c
+@@ -0,0 +1,48 @@
++/* Test that we can remove the conditional move due to CLZ
++ being defined at zero. */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v6t2_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_arch_v6t2 } */
++
++int
++fooctz (int i)
++{
++ return (i == 0) ? 32 : __builtin_ctz (i);
++}
++
++int
++fooctz2 (int i)
++{
++ return (i != 0) ? __builtin_ctz (i) : 32;
++}
++
++unsigned int
++fooctz3 (unsigned int i)
++{
++ return (i > 0) ? __builtin_ctz (i) : 32;
++}
++
++/* { dg-final { scan-assembler-times "rbit\t*" 3 } } */
++
++int
++fooclz (int i)
++{
++ return (i == 0) ? 32 : __builtin_clz (i);
++}
++
++int
++fooclz2 (int i)
++{
++ return (i != 0) ? __builtin_clz (i) : 32;
++}
++
++unsigned int
++fooclz3 (unsigned int i)
++{
++ return (i > 0) ? __builtin_clz (i) : 32;
++}
++
++/* { dg-final { scan-assembler-times "clz\t" 6 } } */
++/* { dg-final { scan-assembler-not "cmp\t.*0" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/pr42574.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr42574.c
+@@ -1,5 +1,5 @@
++/* { dg-do compile { target { arm_thumb1_ok && { ! arm_thumb1_movt_ok } } } } */
+ /* { dg-options "-mthumb -Os -fpic" } */
+-/* { dg-require-effective-target arm_thumb1_ok } */
+ /* { dg-require-effective-target fpic } */
+ /* Make sure the address of glob.c is calculated only once and using
+ a logical shift for the offset (200<<1). */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/pr51534.c
+@@ -0,0 +1,83 @@
++/* Test the vector comparison intrinsics when comparing to immediate zero.
++ */
++
++/* { dg-do assemble } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-save-temps -mfloat-abi=hard -O3" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++#define GEN_TEST(T, D, C, R) \
++ R test_##C##_##T (T a) { return C (a, D (0)); }
++
++#define GEN_DOUBLE_TESTS(S, T, C) \
++ GEN_TEST (T, vdup_n_s##S, C##_s##S, u##T) \
++ GEN_TEST (u##T, vdup_n_u##S, C##_u##S, u##T)
++
++#define GEN_QUAD_TESTS(S, T, C) \
++ GEN_TEST (T, vdupq_n_s##S, C##q_s##S, u##T) \
++ GEN_TEST (u##T, vdupq_n_u##S, C##q_u##S, u##T)
++
++#define GEN_COND_TESTS(C) \
++ GEN_DOUBLE_TESTS (8, int8x8_t, C) \
++ GEN_DOUBLE_TESTS (16, int16x4_t, C) \
++ GEN_DOUBLE_TESTS (32, int32x2_t, C) \
++ GEN_QUAD_TESTS (8, int8x16_t, C) \
++ GEN_QUAD_TESTS (16, int16x8_t, C) \
++ GEN_QUAD_TESTS (32, int32x4_t, C)
++
++GEN_COND_TESTS(vcgt)
++GEN_COND_TESTS(vcge)
++GEN_COND_TESTS(vclt)
++GEN_COND_TESTS(vcle)
++GEN_COND_TESTS(vceq)
++
++/* Scan for expected outputs. */
++/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcgt\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcgt\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcgt\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcgt\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcgt\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcgt\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcge\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcge\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcge\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcge\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcge\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vcge\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */
++/* { dg-final { scan-assembler "vclt\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vclt\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vclt\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vclt\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vclt\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vclt\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vcle\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vcle\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vcle\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vcle\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vcle\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler "vcle\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */
++/* { dg-final { scan-assembler-times "vceq\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" 2 } } */
++/* { dg-final { scan-assembler-times "vceq\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" 2 } } */
++/* { dg-final { scan-assembler-times "vceq\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" 2 } } */
++/* { dg-final { scan-assembler-times "vceq\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" 2 } } */
++/* { dg-final { scan-assembler-times "vceq\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" 2 } } */
++/* { dg-final { scan-assembler-times "vceq\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" 2 } } */
++
++/* And ensure we don't have unexpected output too. */
++/* { dg-final { scan-assembler-not "vc\[gl\]\[te\]\.u\[0-9\]+\[ \]+\[qQdD\]\[0-9\]+, \[qQdD\]\[0-9\]+, #0" } } */
++
++/* Tidy up. */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/pr79145.c
+@@ -0,0 +1,16 @@
++/* { dg-do compile } */
++/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
++/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
++/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
++/* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-require-effective-target arm_iwmmxt_ok } */
++/* { dg-options "-mcpu=iwmmxt" } */
++
++int
++main (void)
++{
++ volatile long long t1;
++ t1 ^= 0x55;
++ return 0;
++}
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/short-vfp-1.c
+@@ -0,0 +1,45 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok }
++/* { dg-options "-mfpu=vfp" } */
++
++int
++test_sisf (float x)
++{
++ return (int)x;
++}
++
++short
++test_hisf (float x)
++{
++ return (short)x;
++}
++
++float
++test_sfsi (int x)
++{
++ return (float)x;
++}
++
++float
++test_sfhi (short x)
++{
++ return (float)x;
++}
++
++short
++test_hisi (int x)
++{
++ return (short)x;
++}
++
++int
++test_sihi (short x)
++{
++ return (int)x;
++}
++
++/* {dg-final { scan-assembler-times {vcvt\.s32\.f32\ts[0-9]+,s[0-9]+} 2 }} */
++/* {dg-final { scan-assembler-times {vcvt\.f32\.s32\ts[0-9]+,s[0-9]+} 2 }} */
++/* {dg-final { scan-assembler-times {vmov\tr[0-9]+,s[0-9]+} 2 }} */
++/* {dg-final { scan-assembler-times {vmov\ts[0-9]+,r[0-9]+} 2 }} */
++/* {dg-final { scan-assembler-times {sxth\tr[0-9]+,r[0-9]+} 2 }} */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/simd/vmaxnm_f32_1.c
+@@ -0,0 +1,159 @@
++/* Test the `vmaxnmf32' ARM Neon intrinsic. */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-options "-save-temps -O3 -march=armv8-a" } */
++/* { dg-add-options arm_v8_neon } */
++
++#include "arm_neon.h"
++
++extern void abort ();
++
++void __attribute__ ((noinline))
++test_vmaxnm_f32__regular_input1 ()
++{
++ float32_t a1[] = {1,2};
++ float32_t b1[] = {3,4};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vmaxnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual[i] != b1[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnm_f32__regular_input2 ()
++{
++ float32_t a1[] = {3,2};
++ float32_t b1[] = {1,4};
++ float32_t e[] = {3,4};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vmaxnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnm_f32__quiet_NaN_one_arg ()
++{
++ /* When given a quiet NaN, vmaxnm returns the other operand.
++ In this test case we have NaNs in only one operand. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {1,2};
++ float32_t b1[] = {n,n};
++ float32_t e[] = {1,2};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vmaxnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnm_f32__quiet_NaN_both_args ()
++{
++ /* When given a quiet NaN, vmaxnm returns the other operand.
++ In this test case we have NaNs in both operands. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {n,2};
++ float32_t b1[] = {1,n};
++ float32_t e[] = {1,2};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vmaxnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnm_f32__zero_both_args ()
++{
++ /* For 0 and -0, vmaxnm returns 0. Since 0 == -0, check sign bit. */
++ float32_t a1[] = {0.0, 0.0};
++ float32_t b1[] = {-0.0, -0.0};
++ float32_t e[] = {0.0, 0.0};
++
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vmaxnm_f32 (a, b);
++
++ float32_t actual1[2];
++ vst1_f32 (actual1, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual1[i] != e[i] || __builtin_signbit (actual1[i]) != 0)
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnm_f32__inf_both_args ()
++{
++ /* The max of inf and inf is inf. The max of -inf and -inf is -inf. */
++ float32_t inf = __builtin_huge_valf ();
++ float32_t a1[] = {inf, -inf};
++ float32_t b1[] = {inf, -inf};
++ float32_t e[] = {inf, -inf};
++
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vmaxnm_f32 (a, b);
++
++ float32_t actual1[2];
++ vst1_f32 (actual1, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual1[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnm_f32__two_quiet_NaNs_both_args ()
++{
++ /* When given 2 NaNs, return a NaN. Since a NaN is not equal to anything,
++ not even another NaN, use __builtin_isnan () to check. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {n,n};
++ float32_t b1[] = {n,n};
++ float32_t e[] = {n,n};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vmaxnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (!__builtin_isnan (actual[i]))
++ abort ();
++}
++
++int
++main ()
++{
++ test_vmaxnm_f32__regular_input1 ();
++ test_vmaxnm_f32__regular_input2 ();
++ test_vmaxnm_f32__quiet_NaN_one_arg ();
++ test_vmaxnm_f32__quiet_NaN_both_args ();
++ test_vmaxnm_f32__zero_both_args ();
++ test_vmaxnm_f32__inf_both_args ();
++ test_vmaxnm_f32__two_quiet_NaNs_both_args ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler-times "vmaxnm\.f32\t\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+\n" 7 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/simd/vmaxnmq_f32_1.c
+@@ -0,0 +1,160 @@
++/* Test the `vmaxnmqf32' ARM Neon intrinsic. */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-options "-save-temps -O3 -march=armv8-a" } */
++/* { dg-add-options arm_v8_neon } */
++
++#include "arm_neon.h"
++
++extern void abort ();
++
++void __attribute__ ((noinline))
++test_vmaxnmq_f32__regular_input1 ()
++{
++ float32_t a1[] = {1,2,5,6};
++ float32_t b1[] = {3,4,7,8};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vmaxnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual[i] != b1[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnmq_f32__regular_input2 ()
++{
++ float32_t a1[] = {3,2,7,6};
++ float32_t b1[] = {1,4,5,8};
++ float32_t e[] = {3,4,7,8};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vmaxnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++
++void __attribute__ ((noinline))
++test_vmaxnmq_f32__quiet_NaN_one_arg ()
++{
++ /* When given a quiet NaN, vmaxnmq returns the other operand.
++ In this test case we have NaNs in only one operand. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {1,2,3,4};
++ float32_t b1[] = {n,n,n,n};
++ float32_t e[] = {1,2,3,4};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vmaxnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnmq_f32__quiet_NaN_both_args ()
++{
++ /* When given a quiet NaN, vmaxnmq returns the other operand.
++ In this test case we have NaNs in both operands. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {n,2,n,4};
++ float32_t b1[] = {1,n,3,n};
++ float32_t e[] = {1,2,3,4};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vmaxnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnmq_f32__zero_both_args ()
++{
++ /* For 0 and -0, vmaxnmq returns 0. Since 0 == -0, check sign bit. */
++ float32_t a1[] = {0.0, 0.0, -0.0, -0.0};
++ float32_t b1[] = {-0.0, -0.0, 0.0, 0.0};
++ float32_t e[] = {0.0, 0.0, 0.0, 0.0};
++
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vmaxnmq_f32 (a, b);
++
++ float32_t actual1[4];
++ vst1q_f32 (actual1, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual1[i] != e[i] || __builtin_signbit (actual1[i]) != 0)
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnmq_f32__inf_both_args ()
++{
++ /* The max of inf and inf is inf. The max of -inf and -inf is -inf. */
++ float32_t inf = __builtin_huge_valf ();
++ float32_t a1[] = {inf, -inf, inf, inf};
++ float32_t b1[] = {inf, -inf, -inf, -inf};
++ float32_t e[] = {inf, -inf, inf, inf};
++
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vmaxnmq_f32 (a, b);
++
++ float32_t actual1[4];
++ vst1q_f32 (actual1, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual1[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vmaxnmq_f32__two_quiet_NaNs_both_args ()
++{
++ /* When given 2 NaNs, return a NaN. Since a NaN is not equal to anything,
++ not even another NaN, use __builtin_isnan () to check. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {n,n,n,n};
++ float32_t b1[] = {n,n,n,n};
++ float32_t e[] = {n,n};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vmaxnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (!__builtin_isnan (actual[i]))
++ abort ();
++}
++
++int
++main ()
++{
++ test_vmaxnmq_f32__regular_input1 ();
++ test_vmaxnmq_f32__regular_input2 ();
++ test_vmaxnmq_f32__quiet_NaN_one_arg ();
++ test_vmaxnmq_f32__quiet_NaN_both_args ();
++ test_vmaxnmq_f32__zero_both_args ();
++ test_vmaxnmq_f32__inf_both_args ();
++ test_vmaxnmq_f32__two_quiet_NaNs_both_args ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler-times "vmaxnm\.f32\t\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+\n" 7 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/simd/vminnm_f32_1.c
+@@ -0,0 +1,159 @@
++/* Test the `vminnmf32' ARM Neon intrinsic. */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-options "-save-temps -O3 -march=armv8-a" } */
++/* { dg-add-options arm_v8_neon } */
++
++#include "arm_neon.h"
++
++extern void abort ();
++
++void __attribute__ ((noinline))
++test_vminnm_f32__regular_input1 ()
++{
++ float32_t a1[] = {1,2};
++ float32_t b1[] = {3,4};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vminnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual[i] != a1[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnm_f32__regular_input2 ()
++{
++ float32_t a1[] = {3,2};
++ float32_t b1[] = {1,4};
++ float32_t e[] = {1,2};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vminnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnm_f32__quiet_NaN_one_arg ()
++{
++ /* When given a quiet NaN, vminnm returns the other operand.
++ In this test case we have NaNs in only one operand. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {1,2};
++ float32_t b1[] = {n,n};
++ float32_t e[] = {1,2};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vminnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnm_f32__quiet_NaN_both_args ()
++{
++ /* When given a quiet NaN, vminnm returns the other operand.
++ In this test case we have NaNs in both operands. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {n,2};
++ float32_t b1[] = {1,n};
++ float32_t e[] = {1,2};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vminnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnm_f32__zero_both_args ()
++{
++ /* For 0 and -0, vminnm returns -0. Since 0 == -0, check sign bit. */
++ float32_t a1[] = {0.0,0.0};
++ float32_t b1[] = {-0.0, -0.0};
++ float32_t e[] = {-0.0, -0.0};
++
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vminnm_f32 (a, b);
++
++ float32_t actual1[2];
++ vst1_f32 (actual1, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual1[i] != e[i] || __builtin_signbit (actual1[i]) == 0)
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnm_f32__inf_both_args ()
++{
++ /* The min of inf and inf is inf. The min of -inf and -inf is -inf. */
++ float32_t inf = __builtin_huge_valf ();
++ float32_t a1[] = {inf, -inf};
++ float32_t b1[] = {inf, -inf};
++ float32_t e[] = {inf, -inf};
++
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vminnm_f32 (a, b);
++
++ float32_t actual1[2];
++ vst1_f32 (actual1, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (actual1[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnm_f32__two_quiet_NaNs_both_args ()
++{
++ /* When given 2 NaNs, return a NaN. Since a NaN is not equal to anything,
++ not even another NaN, use __builtin_isnan () to check. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {n,n};
++ float32_t b1[] = {n,n};
++ float32_t e[] = {n,n};
++ float32x2_t a = vld1_f32 (a1);
++ float32x2_t b = vld1_f32 (b1);
++ float32x2_t c = vminnm_f32 (a, b);
++ float32_t actual[2];
++ vst1_f32 (actual, c);
++
++ for (int i = 0; i < 2; ++i)
++ if (!__builtin_isnan (actual[i]))
++ abort ();
++}
++
++int
++main ()
++{
++ test_vminnm_f32__regular_input1 ();
++ test_vminnm_f32__regular_input2 ();
++ test_vminnm_f32__quiet_NaN_one_arg ();
++ test_vminnm_f32__quiet_NaN_both_args ();
++ test_vminnm_f32__zero_both_args ();
++ test_vminnm_f32__inf_both_args ();
++ test_vminnm_f32__two_quiet_NaNs_both_args ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler-times "vminnm\.f32\t\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+\n" 7 } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/simd/vminnmq_f32_1.c
+@@ -0,0 +1,159 @@
++/* Test the `vminnmqf32' ARM Neon intrinsic. */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_v8_neon_hw } */
++/* { dg-options "-save-temps -O3 -march=armv8-a" } */
++/* { dg-add-options arm_v8_neon } */
++
++#include "arm_neon.h"
++
++extern void abort ();
++
++void __attribute__ ((noinline))
++test_vminnmq_f32__regular_input1 ()
++{
++ float32_t a1[] = {1,2,5,6};
++ float32_t b1[] = {3,4,7,8};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vminnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual[i] != a1[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnmq_f32__regular_input2 ()
++{
++ float32_t a1[] = {3,2,7,6};
++ float32_t b1[] = {1,4,5,8};
++ float32_t e[] = {1,2,5,6};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vminnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnmq_f32__quiet_NaN_one_arg ()
++{
++ /* When given a quiet NaN, vminnmq returns the other operand.
++ In this test case we have NaNs in only one operand. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {1,2,3,4};
++ float32_t b1[] = {n,n,n,n};
++ float32_t e[] = {1,2,3,4};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vminnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnmq_f32__quiet_NaN_both_args ()
++{
++ /* When given a quiet NaN, vminnmq returns the other operand.
++ In this test case we have NaNs in both operands. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {n,2,n,4};
++ float32_t b1[] = {1,n,3,n};
++ float32_t e[] = {1,2,3,4};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vminnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnmq_f32__zero_both_args ()
++{
++ /* For 0 and -0, vminnmq returns -0. Since 0 == -0, check sign bit. */
++ float32_t a1[] = {0.0, 0.0, -0.0, -0.0};
++ float32_t b1[] = {-0.0, -0.0, 0.0, 0.0};
++ float32_t e[] = {-0.0, -0.0, -0.0, -0.0};
++
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vminnmq_f32 (a, b);
++
++ float32_t actual1[4];
++ vst1q_f32 (actual1, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual1[i] != e[i] || __builtin_signbit (actual1[i]) == 0)
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnmq_f32__inf_both_args ()
++{
++ /* The min of inf and inf is inf. The min of -inf and -inf is -inf. */
++ float32_t inf = __builtin_huge_valf ();
++ float32_t a1[] = {inf, -inf, inf, inf};
++ float32_t b1[] = {inf, -inf, -inf, -inf};
++ float32_t e[] = {inf, -inf, -inf, -inf};
++
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vminnmq_f32 (a, b);
++
++ float32_t actual1[4];
++ vst1q_f32 (actual1, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (actual1[i] != e[i])
++ abort ();
++}
++
++void __attribute__ ((noinline))
++test_vminnmq_f32__two_quiet_NaNs_both_args ()
++{
++ /* When given 2 NaNs, return a NaN. Since a NaN is not equal to anything,
++ not even another NaN, use __builtin_isnan () to check. */
++ float32_t n = __builtin_nanf ("");
++ float32_t a1[] = {n,n,n,n};
++ float32_t b1[] = {n,n,n,n};
++ float32_t e[] = {n,n};
++ float32x4_t a = vld1q_f32 (a1);
++ float32x4_t b = vld1q_f32 (b1);
++ float32x4_t c = vminnmq_f32 (a, b);
++ float32_t actual[4];
++ vst1q_f32 (actual, c);
++
++ for (int i = 0; i < 4; ++i)
++ if (!__builtin_isnan (actual[i]))
++ abort ();
++}
++
++int
++main ()
++{
++ test_vminnmq_f32__regular_input1 ();
++ test_vminnmq_f32__regular_input2 ();
++ test_vminnmq_f32__quiet_NaN_one_arg ();
++ test_vminnmq_f32__quiet_NaN_both_args ();
++ test_vminnmq_f32__zero_both_args ();
++ test_vminnmq_f32__inf_both_args ();
++ test_vminnmq_f32__two_quiet_NaNs_both_args ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler-times "vminnm\.f32\t\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+\n" 7 } } */
+--- a/src/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
+@@ -2,13 +2,13 @@
+ /* { dg-require-effective-target arm_thumb2_ok } */
+ /* { dg-options "-O" } */
+
+-unsigned short foo (unsigned short x)
++unsigned short foo (unsigned short x, unsigned short c)
+ {
+ unsigned char i = 0;
+ for (i = 0; i < 8; i++)
+ {
+ x >>= 1;
+- x &= 0x7fff;
++ x &= c;
+ }
+ return x;
+ }
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/vect-vcvt.c
+@@ -0,0 +1,27 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details -mvectorize-with-neon-double" } */
++/* { dg-add-options arm_neon } */
++
++#define N 32
++
++int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
++float fa[N];
++int ia[N];
++
++int convert()
++{
++ int i;
++
++ /* int -> float */
++ for (i = 0; i < N; i++)
++ fa[i] = (float) ib[i];
++
++ /* float -> int */
++ for (i = 0; i < N; i++)
++ ia[i] = (int) fa[i];
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/vect-vcvtq.c
+@@ -0,0 +1,27 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details" } */
++/* { dg-add-options arm_neon } */
++
++#define N 32
++
++int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
++float fa[N];
++int ia[N];
++
++int convert()
++{
++ int i;
++
++ /* int -> float */
++ for (i = 0; i < N; i++)
++ fa[i] = (float) ib[i];
++
++ /* float -> int */
++ for (i = 0; i < N; i++)
++ ia[i] = (int) fa[i];
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-shift-a2t2.c
+@@ -0,0 +1,27 @@
++/* Check that NEON vector shifts support immediate values == size. /*
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-save-temps" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint16x8_t test_vshll_n_u8 (uint8x8_t a)
++{
++ return vshll_n_u8(a, 8);
++}
++
++uint32x4_t test_vshll_n_u16 (uint16x4_t a)
++{
++ return vshll_n_u16(a, 16);
++}
++
++uint64x2_t test_vshll_n_u32 (uint32x2_t a)
++{
++ return vshll_n_u32(a, 32);
++}
++
++/* { dg-final { scan-assembler "vshll\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vshll\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vshll\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/arm/vst1Q_laneu64-1.c
+@@ -0,0 +1,25 @@
++/* Test the `vst1Q_laneu64' ARM Neon intrinsic. */
++
++/* Detect ICE in the case of unaligned memory address. */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++
++unsigned char dummy_store[1000];
++
++void
++foo (unsigned char* addr)
++{
++ uint8x16_t vdata = vld1q_u8 (addr);
++ vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0);
++}
++
++uint64_t
++bar (uint64x2_t vdata)
++{
++ vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0);
++ return vgetq_lane_u64 (vdata, 0);
++}
+--- a/src/gcc/testsuite/lib/gcc-dg.exp
++++ b/src/gcc/testsuite/lib/gcc-dg.exp
+@@ -403,6 +403,7 @@ if { [info procs ${tool}_load] != [list] \
+ switch [lindex $result 0] {
+ "pass" { set status "fail" }
+ "fail" { set status "pass" }
++ default { set status [lindex $result 0] }
+ }
+ set result [list $status [lindex $result 1]]
+ }
+--- a/src/gcc/testsuite/lib/target-supports.exp
++++ b/src/gcc/testsuite/lib/target-supports.exp
+@@ -252,6 +252,20 @@ proc check_runtime {prop args} {
+ }]
+ }
+
++# Return 1 if GCC was configured with $pattern.
++proc check_configured_with { pattern } {
++ global tool
++
++ set gcc_output [${tool}_target_compile "-v" "" "none" ""]
++ if { [ regexp "Configured with: \[^\n\]*$pattern" $gcc_output ] } {
++ verbose "Matched: $pattern" 2
++ return 1
++ }
++
++ verbose "Failed to match: $pattern" 2
++ return 0
++}
++
+ ###############################
+ # proc check_weak_available { }
+ ###############################
+@@ -2936,6 +2950,28 @@ proc add_options_for_arm_v8_1a_neon { flags } {
+ return "$flags $et_arm_v8_1a_neon_flags -march=armv8.1-a"
+ }
+
++# Add the options needed for ARMv8.2 with the scalar FP16 extension.
++# Also adds the ARMv8 FP options for ARM and for AArch64.
++
++proc add_options_for_arm_v8_2a_fp16_scalar { flags } {
++ if { ! [check_effective_target_arm_v8_2a_fp16_scalar_ok] } {
++ return "$flags"
++ }
++ global et_arm_v8_2a_fp16_scalar_flags
++ return "$flags $et_arm_v8_2a_fp16_scalar_flags"
++}
++
++# Add the options needed for ARMv8.2 with the FP16 extension. Also adds
++# the ARMv8 NEON options for ARM and for AArch64.
++
++proc add_options_for_arm_v8_2a_fp16_neon { flags } {
++ if { ! [check_effective_target_arm_v8_2a_fp16_neon_ok] } {
++ return "$flags"
++ }
++ global et_arm_v8_2a_fp16_neon_flags
++ return "$flags $et_arm_v8_2a_fp16_neon_flags"
++}
++
+ proc add_options_for_arm_crc { flags } {
+ if { ! [check_effective_target_arm_crc_ok] } {
+ return "$flags"
+@@ -3022,23 +3058,25 @@ proc check_effective_target_arm_crc_ok { } {
+
+ proc check_effective_target_arm_neon_fp16_ok_nocache { } {
+ global et_arm_neon_fp16_flags
++ global et_arm_neon_flags
+ set et_arm_neon_fp16_flags ""
+- if { [check_effective_target_arm32] } {
++ if { [check_effective_target_arm32]
++ && [check_effective_target_arm_neon_ok] } {
+ foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon-fp16"
+ "-mfpu=neon-fp16 -mfloat-abi=softfp"
+ "-mfp16-format=ieee"
+ "-mfloat-abi=softfp -mfp16-format=ieee"
+ "-mfpu=neon-fp16 -mfp16-format=ieee"
+ "-mfpu=neon-fp16 -mfloat-abi=softfp -mfp16-format=ieee"} {
+- if { [check_no_compiler_messages_nocache arm_neon_fp_16_ok object {
++ if { [check_no_compiler_messages_nocache arm_neon_fp16_ok object {
+ #include "arm_neon.h"
+ float16x4_t
+ foo (float32x4_t arg)
+ {
+ return vcvt_f16_f32 (arg);
+ }
+- } "$flags"] } {
+- set et_arm_neon_fp16_flags $flags
++ } "$et_arm_neon_flags $flags"] } {
++ set et_arm_neon_fp16_flags [concat $et_arm_neon_flags $flags]
+ return 1
+ }
+ }
+@@ -3075,6 +3113,65 @@ proc add_options_for_arm_neon_fp16 { flags } {
+ return "$flags $et_arm_neon_fp16_flags"
+ }
+
++# Return 1 if this is an ARM target supporting the FP16 alternative
++# format. Some multilibs may be incompatible with the options needed. Also
++# set et_arm_neon_fp16_flags to the best options to add.
++
++proc check_effective_target_arm_fp16_alternative_ok_nocache { } {
++ global et_arm_neon_fp16_flags
++ set et_arm_neon_fp16_flags ""
++ if { [check_effective_target_arm32] } {
++ foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon-fp16"
++ "-mfpu=neon-fp16 -mfloat-abi=softfp"} {
++ if { [check_no_compiler_messages_nocache \
++ arm_fp16_alternative_ok object {
++ #if !defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ #error __ARM_FP16_FORMAT_ALTERNATIVE not defined
++ #endif
++ } "$flags -mfp16-format=alternative"] } {
++ set et_arm_neon_fp16_flags "$flags -mfp16-format=alternative"
++ return 1
++ }
++ }
++ }
++
++ return 0
++}
++
++proc check_effective_target_arm_fp16_alternative_ok { } {
++ return [check_cached_effective_target arm_fp16_alternative_ok \
++ check_effective_target_arm_fp16_alternative_ok_nocache]
++}
++
++# Return 1 if this is an ARM target supports specifying the FP16 none
++# format. Some multilibs may be incompatible with the options needed.
++
++proc check_effective_target_arm_fp16_none_ok_nocache { } {
++ if { [check_effective_target_arm32] } {
++ foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon-fp16"
++ "-mfpu=neon-fp16 -mfloat-abi=softfp"} {
++ if { [check_no_compiler_messages_nocache \
++ arm_fp16_none_ok object {
++ #if defined (__ARM_FP16_FORMAT_ALTERNATIVE)
++ #error __ARM_FP16_FORMAT_ALTERNATIVE defined
++ #endif
++ #if defined (__ARM_FP16_FORMAT_IEEE)
++ #error __ARM_FP16_FORMAT_IEEE defined
++ #endif
++ } "$flags -mfp16-format=none"] } {
++ return 1
++ }
++ }
++ }
++
++ return 0
++}
++
++proc check_effective_target_arm_fp16_none_ok { } {
++ return [check_cached_effective_target arm_fp16_none_ok \
++ check_effective_target_arm_fp16_none_ok_nocache]
++}
++
+ # Return 1 if this is an ARM target supporting -mfpu=neon-fp-armv8
+ # -mfloat-abi=softfp or equivalent options. Some multilibs may be
+ # incompatible with these options. Also set et_arm_v8_neon_flags to the
+@@ -3117,8 +3214,10 @@ proc check_effective_target_arm_v8_neon_ok { } {
+
+ proc check_effective_target_arm_neonv2_ok_nocache { } {
+ global et_arm_neonv2_flags
++ global et_arm_neon_flags
+ set et_arm_neonv2_flags ""
+- if { [check_effective_target_arm32] } {
++ if { [check_effective_target_arm32]
++ && [check_effective_target_arm_neon_ok] } {
+ foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon-vfpv4" "-mfpu=neon-vfpv4 -mfloat-abi=softfp"} {
+ if { [check_no_compiler_messages_nocache arm_neonv2_ok object {
+ #include "arm_neon.h"
+@@ -3127,8 +3226,8 @@ proc check_effective_target_arm_neonv2_ok_nocache { } {
+ {
+ return vfma_f32 (a, b, c);
+ }
+- } "$flags"] } {
+- set et_arm_neonv2_flags $flags
++ } "$et_arm_neon_flags $flags"] } {
++ set et_arm_neonv2_flags [concat $et_arm_neon_flags $flags]
+ return 1
+ }
+ }
+@@ -3142,9 +3241,9 @@ proc check_effective_target_arm_neonv2_ok { } {
+ check_effective_target_arm_neonv2_ok_nocache]
+ }
+
+-# Add the options needed for NEON. We need either -mfloat-abi=softfp
+-# or -mfloat-abi=hard, but if one is already specified by the
+-# multilib, use it.
++# Add the options needed for VFP FP16 support. We need either
++# -mfloat-abi=softfp or -mfloat-abi=hard. If one is already specified by
++# the multilib, use it.
+
+ proc add_options_for_arm_fp16 { flags } {
+ if { ! [check_effective_target_arm_fp16_ok] } {
+@@ -3154,9 +3253,32 @@ proc add_options_for_arm_fp16 { flags } {
+ return "$flags $et_arm_fp16_flags"
+ }
+
++# Add the options needed to enable support for IEEE format
++# half-precision support. This is valid for ARM targets.
++
++proc add_options_for_arm_fp16_ieee { flags } {
++ if { ! [check_effective_target_arm_fp16_ok] } {
++ return "$flags"
++ }
++ global et_arm_fp16_flags
++ return "$flags $et_arm_fp16_flags -mfp16-format=ieee"
++}
++
++# Add the options needed to enable support for ARM Alternative format
++# half-precision support. This is valid for ARM targets.
++
++proc add_options_for_arm_fp16_alternative { flags } {
++ if { ! [check_effective_target_arm_fp16_ok] } {
++ return "$flags"
++ }
++ global et_arm_fp16_flags
++ return "$flags $et_arm_fp16_flags -mfp16-format=alternative"
++}
++
+ # Return 1 if this is an ARM target that can support a VFP fp16 variant.
+ # Skip multilibs that are incompatible with these options and set
+-# et_arm_fp16_flags to the best options to add.
++# et_arm_fp16_flags to the best options to add. This test is valid for
++# ARM only.
+
+ proc check_effective_target_arm_fp16_ok_nocache { } {
+ global et_arm_fp16_flags
+@@ -3164,7 +3286,10 @@ proc check_effective_target_arm_fp16_ok_nocache { } {
+ if { ! [check_effective_target_arm32] } {
+ return 0;
+ }
+- if [check-flags [list "" { *-*-* } { "-mfpu=*" } { "-mfpu=*fp16*" "-mfpu=*fpv[4-9]*" "-mfpu=*fpv[1-9][0-9]*" } ]] {
++ if [check-flags \
++ [list "" { *-*-* } { "-mfpu=*" } \
++ { "-mfpu=*fp16*" "-mfpu=*fpv[4-9]*" \
++ "-mfpu=*fpv[1-9][0-9]*" "-mfpu=*fp-armv8*" } ]] {
+ # Multilib flags would override -mfpu.
+ return 0
+ }
+@@ -3200,6 +3325,28 @@ proc check_effective_target_arm_fp16_ok { } {
+ check_effective_target_arm_fp16_ok_nocache]
+ }
+
++# Return 1 if the target supports executing VFP FP16 instructions, 0
++# otherwise. This test is valid for ARM only.
++
++proc check_effective_target_arm_fp16_hw { } {
++ if {! [check_effective_target_arm_fp16_ok] } {
++ return 0
++ }
++ global et_arm_fp16_flags
++ check_runtime_nocache arm_fp16_hw {
++ int
++ main (int argc, char **argv)
++ {
++ __fp16 a = 1.0;
++ float r;
++ asm ("vcvtb.f32.f16 %0, %1"
++ : "=w" (r) : "w" (a)
++ : /* No clobbers. */);
++ return (r == 1.0) ? 0 : 1;
++ }
++ } "$et_arm_fp16_flags -mfp16-format=ieee"
++}
++
+ # Creates a series of routines that return 1 if the given architecture
+ # can be selected and a routine to give the flags to select that architecture
+ # Note: Extra flags may be added to disable options from newer compilers
+@@ -3209,22 +3356,26 @@ proc check_effective_target_arm_fp16_ok { } {
+ # Usage: /* { dg-require-effective-target arm_arch_v5_ok } */
+ # /* { dg-add-options arm_arch_v5 } */
+ # /* { dg-require-effective-target arm_arch_v5_multilib } */
+-foreach { armfunc armflag armdef } { v4 "-march=armv4 -marm" __ARM_ARCH_4__
+- v4t "-march=armv4t" __ARM_ARCH_4T__
+- v5 "-march=armv5 -marm" __ARM_ARCH_5__
+- v5t "-march=armv5t" __ARM_ARCH_5T__
+- v5te "-march=armv5te" __ARM_ARCH_5TE__
+- v6 "-march=armv6" __ARM_ARCH_6__
+- v6k "-march=armv6k" __ARM_ARCH_6K__
+- v6t2 "-march=armv6t2" __ARM_ARCH_6T2__
+- v6z "-march=armv6z" __ARM_ARCH_6Z__
+- v6m "-march=armv6-m -mthumb" __ARM_ARCH_6M__
+- v7a "-march=armv7-a" __ARM_ARCH_7A__
+- v7r "-march=armv7-r" __ARM_ARCH_7R__
+- v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
+- v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
+- v8a "-march=armv8-a" __ARM_ARCH_8A__
+- v8_1a "-march=armv8.1a" __ARM_ARCH_8A__ } {
++foreach { armfunc armflag armdef } {
++ v4 "-march=armv4 -marm" __ARM_ARCH_4__
++ v4t "-march=armv4t" __ARM_ARCH_4T__
++ v5 "-march=armv5 -marm" __ARM_ARCH_5__
++ v5t "-march=armv5t" __ARM_ARCH_5T__
++ v5te "-march=armv5te" __ARM_ARCH_5TE__
++ v6 "-march=armv6" __ARM_ARCH_6__
++ v6k "-march=armv6k" __ARM_ARCH_6K__
++ v6t2 "-march=armv6t2" __ARM_ARCH_6T2__
++ v6z "-march=armv6z" __ARM_ARCH_6Z__
++ v6m "-march=armv6-m -mthumb -mfloat-abi=soft" __ARM_ARCH_6M__
++ v7a "-march=armv7-a" __ARM_ARCH_7A__
++ v7r "-march=armv7-r" __ARM_ARCH_7R__
++ v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
++ v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
++ v8a "-march=armv8-a" __ARM_ARCH_8A__
++ v8_1a "-march=armv8.1a" __ARM_ARCH_8A__
++ v8_2a "-march=armv8.2a" __ARM_ARCH_8A__
++ v8m_base "-march=armv8-m.base -mthumb -mfloat-abi=soft" __ARM_ARCH_8M_BASE__
++ v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } {
+ eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] {
+ proc check_effective_target_arm_arch_FUNC_ok { } {
+ if { [ string match "*-marm*" "FLAG" ] &&
+@@ -3274,6 +3425,12 @@ proc add_options_for_arm_arch_v7ve { flags } {
+ return "$flags -march=armv7ve"
+ }
+
++# Return 1 if GCC was configured with --with-mode=
++proc check_effective_target_default_mode { } {
++
++ return [check_configured_with "with-mode="]
++}
++
+ # Return 1 if this is an ARM target where -marm causes ARM to be
+ # used (not Thumb)
+
+@@ -3352,15 +3509,60 @@ proc check_effective_target_arm_cortex_m { } {
+ return 0
+ }
+ return [check_no_compiler_messages arm_cortex_m assembly {
+- #if !defined(__ARM_ARCH_7M__) \
+- && !defined (__ARM_ARCH_7EM__) \
+- && !defined (__ARM_ARCH_6M__)
+- #error !__ARM_ARCH_7M__ && !__ARM_ARCH_7EM__ && !__ARM_ARCH_6M__
++ #if defined(__ARM_ARCH_ISA_ARM)
++ #error __ARM_ARCH_ISA_ARM is defined
+ #endif
+ int i;
+ } "-mthumb"]
+ }
+
++# Return 1 if this is an ARM target where -mthumb causes Thumb-1 to be
++# used and MOVT/MOVW instructions to be available.
++
++proc check_effective_target_arm_thumb1_movt_ok {} {
++ if [check_effective_target_arm_thumb1_ok] {
++ return [check_no_compiler_messages arm_movt object {
++ int
++ foo (void)
++ {
++ asm ("movt r0, #42");
++ }
++ } "-mthumb"]
++ } else {
++ return 0
++ }
++}
++
++# Return 1 if this is an ARM target where -mthumb causes Thumb-1 to be
++# used and CBZ and CBNZ instructions are available.
++
++proc check_effective_target_arm_thumb1_cbz_ok {} {
++ if [check_effective_target_arm_thumb1_ok] {
++ return [check_no_compiler_messages arm_movt object {
++ int
++ foo (void)
++ {
++ asm ("cbz r0, 2f\n2:");
++ }
++ } "-mthumb"]
++ } else {
++ return 0
++ }
++}
++
++# Return 1 if this is an ARM target where ARMv8-M Security Extensions is
++# available.
++
++proc check_effective_target_arm_cmse_ok {} {
++ return [check_no_compiler_messages arm_cmse object {
++ int
++ foo (void)
++ {
++ asm ("bxns r0");
++ }
++ } "-mcmse"];
++}
++
+ # Return 1 if this compilation turns on string_ops_prefer_neon on.
+
+ proc check_effective_target_arm_tune_string_ops_prefer_neon { } {
+@@ -3436,6 +3638,76 @@ proc check_effective_target_arm_v8_1a_neon_ok { } {
+ check_effective_target_arm_v8_1a_neon_ok_nocache]
+ }
+
++# Return 1 if the target supports ARMv8.2 scalar FP16 arithmetic
++# instructions, 0 otherwise. The test is valid for ARM and for AArch64.
++# Record the command line options needed.
++
++proc check_effective_target_arm_v8_2a_fp16_scalar_ok_nocache { } {
++ global et_arm_v8_2a_fp16_scalar_flags
++ set et_arm_v8_2a_fp16_scalar_flags ""
++
++ if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } {
++ return 0;
++ }
++
++ # Iterate through sets of options to find the compiler flags that
++ # need to be added to the -march option.
++ foreach flags {"" "-mfpu=fp-armv8" "-mfloat-abi=softfp" \
++ "-mfpu=fp-armv8 -mfloat-abi=softfp"} {
++ if { [check_no_compiler_messages_nocache \
++ arm_v8_2a_fp16_scalar_ok object {
++ #if !defined (__ARM_FEATURE_FP16_SCALAR_ARITHMETIC)
++ #error "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC not defined"
++ #endif
++ } "$flags -march=armv8.2-a+fp16"] } {
++ set et_arm_v8_2a_fp16_scalar_flags "$flags -march=armv8.2-a+fp16"
++ return 1
++ }
++ }
++
++ return 0;
++}
++
++proc check_effective_target_arm_v8_2a_fp16_scalar_ok { } {
++ return [check_cached_effective_target arm_v8_2a_fp16_scalar_ok \
++ check_effective_target_arm_v8_2a_fp16_scalar_ok_nocache]
++}
++
++# Return 1 if the target supports ARMv8.2 Adv.SIMD FP16 arithmetic
++# instructions, 0 otherwise. The test is valid for ARM and for AArch64.
++# Record the command line options needed.
++
++proc check_effective_target_arm_v8_2a_fp16_neon_ok_nocache { } {
++ global et_arm_v8_2a_fp16_neon_flags
++ set et_arm_v8_2a_fp16_neon_flags ""
++
++ if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } {
++ return 0;
++ }
++
++ # Iterate through sets of options to find the compiler flags that
++ # need to be added to the -march option.
++ foreach flags {"" "-mfpu=neon-fp-armv8" "-mfloat-abi=softfp" \
++ "-mfpu=neon-fp-armv8 -mfloat-abi=softfp"} {
++ if { [check_no_compiler_messages_nocache \
++ arm_v8_2a_fp16_neon_ok object {
++ #if !defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
++ #error "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC not defined"
++ #endif
++ } "$flags -march=armv8.2-a+fp16"] } {
++ set et_arm_v8_2a_fp16_neon_flags "$flags -march=armv8.2-a+fp16"
++ return 1
++ }
++ }
++
++ return 0;
++}
++
++proc check_effective_target_arm_v8_2a_fp16_neon_ok { } {
++ return [check_cached_effective_target arm_v8_2a_fp16_neon_ok \
++ check_effective_target_arm_v8_2a_fp16_neon_ok_nocache]
++}
++
+ # Return 1 if the target supports executing ARMv8 NEON instructions, 0
+ # otherwise.
+
+@@ -3445,11 +3717,17 @@ proc check_effective_target_arm_v8_neon_hw { } {
+ int
+ main (void)
+ {
+- float32x2_t a;
++ float32x2_t a = { 1.0f, 2.0f };
++ #ifdef __ARM_ARCH_ISA_A64
++ asm ("frinta %0.2s, %1.2s"
++ : "=w" (a)
++ : "w" (a));
++ #else
+ asm ("vrinta.f32 %P0, %P1"
+ : "=w" (a)
+ : "0" (a));
+- return 0;
++ #endif
++ return a[0] == 2.0f;
+ }
+ } [add_options_for_arm_v8_neon ""]]
+ }
+@@ -3492,6 +3770,81 @@ proc check_effective_target_arm_v8_1a_neon_hw { } {
+ } [add_options_for_arm_v8_1a_neon ""]]
+ }
+
++# Return 1 if the target supports executing floating point instructions from
++# ARMv8.2 with the FP16 extension, 0 otherwise. The test is valid for ARM and
++# for AArch64.
++
++proc check_effective_target_arm_v8_2a_fp16_scalar_hw { } {
++ if { ![check_effective_target_arm_v8_2a_fp16_scalar_ok] } {
++ return 0;
++ }
++ return [check_runtime arm_v8_2a_fp16_scalar_hw_available {
++ int
++ main (void)
++ {
++ __fp16 a = 1.0;
++ __fp16 result;
++
++ #ifdef __ARM_ARCH_ISA_A64
++
++ asm ("fabs %h0, %h1"
++ : "=w"(result)
++ : "w"(a)
++ : /* No clobbers. */);
++
++ #else
++
++ asm ("vabs.f16 %0, %1"
++ : "=w"(result)
++ : "w"(a)
++ : /* No clobbers. */);
++
++ #endif
++
++ return (result == 1.0) ? 0 : 1;
++ }
++ } [add_options_for_arm_v8_2a_fp16_scalar ""]]
++}
++
++# Return 1 if the target supports executing Adv.SIMD instructions from ARMv8.2
++# with the FP16 extension, 0 otherwise. The test is valid for ARM and for
++# AArch64.
++
++proc check_effective_target_arm_v8_2a_fp16_neon_hw { } {
++ if { ![check_effective_target_arm_v8_2a_fp16_neon_ok] } {
++ return 0;
++ }
++ return [check_runtime arm_v8_2a_fp16_neon_hw_available {
++ int
++ main (void)
++ {
++ #ifdef __ARM_ARCH_ISA_A64
++
++ __Float16x4_t a = {1.0, -1.0, 1.0, -1.0};
++ __Float16x4_t result;
++
++ asm ("fabs %0.4h, %1.4h"
++ : "=w"(result)
++ : "w"(a)
++ : /* No clobbers. */);
++
++ #else
++
++ __simd64_float16_t a = {1.0, -1.0, 1.0, -1.0};
++ __simd64_float16_t result;
++
++ asm ("vabs.f16 %P0, %P1"
++ : "=w"(result)
++ : "w"(a)
++ : /* No clobbers. */);
++
++ #endif
++
++ return (result[0] == 1.0) ? 0 : 1;
++ }
++ } [add_options_for_arm_v8_2a_fp16_neon ""]]
++}
++
+ # Return 1 if this is a ARM target with NEON enabled.
+
+ proc check_effective_target_arm_neon { } {
+@@ -3526,6 +3879,25 @@ proc check_effective_target_arm_neonv2 { } {
+ }
+ }
+
++# Return 1 if this is an ARM target with load acquire and store release
++# instructions for 8-, 16- and 32-bit types.
++
++proc check_effective_target_arm_acq_rel { } {
++ return [check_no_compiler_messages arm_acq_rel object {
++ void
++ load_acquire_store_release (void)
++ {
++ asm ("lda r0, [r1]\n\t"
++ "stl r0, [r1]\n\t"
++ "ldah r0, [r1]\n\t"
++ "stlh r0, [r1]\n\t"
++ "ldab r0, [r1]\n\t"
++ "stlb r0, [r1]"
++ : : : "r0", "memory");
++ }
++ }]
++}
++
+ # Return 1 if this a Loongson-2E or -2F target using an ABI that supports
+ # the Loongson vector modes.
+
+@@ -4380,6 +4752,8 @@ proc check_effective_target_vect_widen_sum_hi_to_si_pattern { } {
+ set et_vect_widen_sum_hi_to_si_pattern_saved 0
+ if { [istarget powerpc*-*-*]
+ || [istarget aarch64*-*-*]
++ || ([istarget arm*-*-*] &&
++ [check_effective_target_arm_neon_ok])
+ || [istarget ia64-*-*] } {
+ set et_vect_widen_sum_hi_to_si_pattern_saved 1
+ }
+@@ -5755,6 +6129,8 @@ proc check_effective_target_sync_int_long { } {
+ || [istarget aarch64*-*-*]
+ || [istarget alpha*-*-*]
+ || [istarget arm*-*-linux-*]
++ || ([istarget arm*-*-*]
++ && [check_effective_target_arm_acq_rel])
+ || [istarget bfin*-*linux*]
+ || [istarget hppa*-*linux*]
+ || [istarget s390*-*-*]
+@@ -5788,6 +6164,8 @@ proc check_effective_target_sync_char_short { } {
+ || [istarget i?86-*-*] || [istarget x86_64-*-*]
+ || [istarget alpha*-*-*]
+ || [istarget arm*-*-linux-*]
++ || ([istarget arm*-*-*]
++ && [check_effective_target_arm_acq_rel])
+ || [istarget hppa*-*linux*]
+ || [istarget s390*-*-*]
+ || [istarget powerpc*-*-*]
+--- a/src/gcc/tree-inline.c
++++ b/src/gcc/tree-inline.c
+@@ -244,6 +244,7 @@ remap_ssa_name (tree name, copy_body_data *id)
+ /* At least IPA points-to info can be directly transferred. */
+ if (id->src_cfun->gimple_df
+ && id->src_cfun->gimple_df->ipa_pta
++ && POINTER_TYPE_P (TREE_TYPE (name))
+ && (pi = SSA_NAME_PTR_INFO (name))
+ && !pi->pt.anything)
+ {
+@@ -276,6 +277,7 @@ remap_ssa_name (tree name, copy_body_data *id)
+ /* At least IPA points-to info can be directly transferred. */
+ if (id->src_cfun->gimple_df
+ && id->src_cfun->gimple_df->ipa_pta
++ && POINTER_TYPE_P (TREE_TYPE (name))
+ && (pi = SSA_NAME_PTR_INFO (name))
+ && !pi->pt.anything)
+ {
+--- a/src/gcc/tree-scalar-evolution.c
++++ b/src/gcc/tree-scalar-evolution.c
+@@ -1937,6 +1937,36 @@ interpret_rhs_expr (struct loop *loop, gimple *at_stmt,
+ res = chrec_convert (type, chrec1, at_stmt);
+ break;
+
++ case BIT_AND_EXPR:
++ /* Given int variable A, handle A&0xffff as (int)(unsigned short)A.
++ If A is SCEV and its value is in the range of representable set
++ of type unsigned short, the result expression is a (no-overflow)
++ SCEV. */
++ res = chrec_dont_know;
++ if (tree_fits_uhwi_p (rhs2))
++ {
++ int precision;
++ unsigned HOST_WIDE_INT val = tree_to_uhwi (rhs2);
++
++ val ++;
++ /* Skip if value of rhs2 wraps in unsigned HOST_WIDE_INT or
++ it's not the maximum value of a smaller type than rhs1. */
++ if (val != 0
++ && (precision = exact_log2 (val)) > 0
++ && (unsigned) precision < TYPE_PRECISION (TREE_TYPE (rhs1)))
++ {
++ tree utype = build_nonstandard_integer_type (precision, 1);
++
++ if (TYPE_PRECISION (utype) < TYPE_PRECISION (TREE_TYPE (rhs1)))
++ {
++ chrec1 = analyze_scalar_evolution (loop, rhs1);
++ chrec1 = chrec_convert (utype, chrec1, at_stmt);
++ res = chrec_convert (TREE_TYPE (rhs1), chrec1, at_stmt);
++ }
++ }
++ }
++ break;
++
+ default:
+ res = chrec_dont_know;
+ break;
+--- a/src/gcc/tree-ssa-address.c
++++ b/src/gcc/tree-ssa-address.c
+@@ -877,6 +877,10 @@ copy_ref_info (tree new_ref, tree old_ref)
+ && TREE_CODE (old_ref) == MEM_REF
+ && !(TREE_CODE (new_ref) == TARGET_MEM_REF
+ && (TMR_INDEX2 (new_ref)
++ /* TODO: Below conditions can be relaxed if TMR_INDEX
++ is an indcution variable and its initial value and
++ step are aligned. */
++ || (TMR_INDEX (new_ref) && !TMR_STEP (new_ref))
+ || (TMR_STEP (new_ref)
+ && (TREE_INT_CST_LOW (TMR_STEP (new_ref))
+ < align)))))
+--- a/src/gcc/tree-ssa-ccp.c
++++ b/src/gcc/tree-ssa-ccp.c
+@@ -229,13 +229,12 @@ debug_lattice_value (ccp_prop_value_t val)
+ fprintf (stderr, "\n");
+ }
+
+-/* Extend NONZERO_BITS to a full mask, with the upper bits being set. */
++/* Extend NONZERO_BITS to a full mask, based on sgn. */
+
+ static widest_int
+-extend_mask (const wide_int &nonzero_bits)
++extend_mask (const wide_int &nonzero_bits, signop sgn)
+ {
+- return (wi::mask <widest_int> (wi::get_precision (nonzero_bits), true)
+- | widest_int::from (nonzero_bits, UNSIGNED));
++ return widest_int::from (nonzero_bits, sgn);
+ }
+
+ /* Compute a default value for variable VAR and store it in the
+@@ -284,7 +283,7 @@ get_default_value (tree var)
+ {
+ val.lattice_val = CONSTANT;
+ val.value = build_zero_cst (TREE_TYPE (var));
+- val.mask = extend_mask (nonzero_bits);
++ val.mask = extend_mask (nonzero_bits, TYPE_SIGN (TREE_TYPE (var)));
+ }
+ }
+ }
+@@ -1939,7 +1938,7 @@ evaluate_stmt (gimple *stmt)
+ {
+ val.lattice_val = CONSTANT;
+ val.value = build_zero_cst (TREE_TYPE (lhs));
+- val.mask = extend_mask (nonzero_bits);
++ val.mask = extend_mask (nonzero_bits, TYPE_SIGN (TREE_TYPE (lhs)));
+ is_constant = true;
+ }
+ else
+@@ -1950,7 +1949,8 @@ evaluate_stmt (gimple *stmt)
+ if (nonzero_bits == 0)
+ val.mask = 0;
+ else
+- val.mask = val.mask & extend_mask (nonzero_bits);
++ val.mask = val.mask & extend_mask (nonzero_bits,
++ TYPE_SIGN (TREE_TYPE (lhs)));
+ }
+ }
+ }
+--- a/src/gcc/tree-ssa-strlen.c
++++ b/src/gcc/tree-ssa-strlen.c
+@@ -2263,7 +2263,7 @@ public:
+ };
+
+ /* Callback for walk_dominator_tree. Attempt to optimize various
+- string ops by remembering string lenths pointed by pointer SSA_NAMEs. */
++ string ops by remembering string lengths pointed by pointer SSA_NAMEs. */
+
+ edge
+ strlen_dom_walker::before_dom_children (basic_block bb)
+--- a/src/gcc/tree-vect-data-refs.c
++++ b/src/gcc/tree-vect-data-refs.c
+@@ -2250,6 +2250,7 @@ vect_analyze_group_access_1 (struct data_reference *dr)
+ {
+ GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)) = stmt;
+ GROUP_SIZE (vinfo_for_stmt (stmt)) = groupsize;
++ GROUP_GAP (stmt_info) = groupsize - 1;
+ if (dump_enabled_p ())
+ {
+ dump_printf_loc (MSG_NOTE, vect_location,
+--- a/src/gcc/tree-vect-loop-manip.c
++++ b/src/gcc/tree-vect-loop-manip.c
+@@ -40,6 +40,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "cfgloop.h"
+ #include "tree-scalar-evolution.h"
+ #include "tree-vectorizer.h"
++#include "tree-ssa-loop-ivopts.h"
+
+ /*************************************************************************
+ Simple Loop Peeling Utilities
+@@ -1594,10 +1595,26 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo)
+ }
+
+ /* FORNOW: We do not transform initial conditions of IVs
++ which evolution functions are not invariants in the loop. */
++
++ if (!expr_invariant_in_loop_p (loop, evolution_part))
++ {
++ if (dump_enabled_p ())
++ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
++ "evolution not invariant in loop.\n");
++ return false;
++ }
++
++ /* FORNOW: We do not transform initial conditions of IVs
+ which evolution functions are a polynomial of degree >= 2. */
+
+ if (tree_is_chrec (evolution_part))
+- return false;
++ {
++ if (dump_enabled_p ())
++ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
++ "evolution is chrec.\n");
++ return false;
++ }
+ }
+
+ return true;
+--- a/src/gcc/tree-vect-patterns.c
++++ b/src/gcc/tree-vect-patterns.c
+@@ -2136,32 +2136,313 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts,
+ return pattern_stmt;
+ }
+
+-/* Detect multiplication by constant which are postive or negatives of power 2,
+- and convert them to shift patterns.
++/* Return true iff the target has a vector optab implementing the operation
++ CODE on type VECTYPE. */
+
+- Mult with constants that are postive power of two.
+- type a_t;
+- type b_t
+- S1: b_t = a_t * n
++static bool
++target_has_vecop_for_code (tree_code code, tree vectype)
++{
++ optab voptab = optab_for_tree_code (code, vectype, optab_vector);
++ return voptab
++ && optab_handler (voptab, TYPE_MODE (vectype)) != CODE_FOR_nothing;
++}
+
+- or
++/* Verify that the target has optabs of VECTYPE to perform all the steps
++ needed by the multiplication-by-immediate synthesis algorithm described by
++ ALG and VAR. If SYNTH_SHIFT_P is true ensure that vector addition is
++ present. Return true iff the target supports all the steps. */
++
++static bool
++target_supports_mult_synth_alg (struct algorithm *alg, mult_variant var,
++ tree vectype, bool synth_shift_p)
++{
++ if (alg->op[0] != alg_zero && alg->op[0] != alg_m)
++ return false;
++
++ bool supports_vminus = target_has_vecop_for_code (MINUS_EXPR, vectype);
++ bool supports_vplus = target_has_vecop_for_code (PLUS_EXPR, vectype);
++
++ if (var == negate_variant
++ && !target_has_vecop_for_code (NEGATE_EXPR, vectype))
++ return false;
++
++ /* If we must synthesize shifts with additions make sure that vector
++ addition is available. */
++ if ((var == add_variant || synth_shift_p) && !supports_vplus)
++ return false;
++
++ for (int i = 1; i < alg->ops; i++)
++ {
++ switch (alg->op[i])
++ {
++ case alg_shift:
++ break;
++ case alg_add_t_m2:
++ case alg_add_t2_m:
++ case alg_add_factor:
++ if (!supports_vplus)
++ return false;
++ break;
++ case alg_sub_t_m2:
++ case alg_sub_t2_m:
++ case alg_sub_factor:
++ if (!supports_vminus)
++ return false;
++ break;
++ case alg_unknown:
++ case alg_m:
++ case alg_zero:
++ case alg_impossible:
++ return false;
++ default:
++ gcc_unreachable ();
++ }
++ }
++
++ return true;
++}
++
++/* Synthesize a left shift of OP by AMNT bits using a series of additions and
++ putting the final result in DEST. Append all statements but the last into
++ VINFO. Return the last statement. */
++
++static gimple *
++synth_lshift_by_additions (tree dest, tree op, HOST_WIDE_INT amnt,
++ stmt_vec_info vinfo)
++{
++ HOST_WIDE_INT i;
++ tree itype = TREE_TYPE (op);
++ tree prev_res = op;
++ gcc_assert (amnt >= 0);
++ for (i = 0; i < amnt; i++)
++ {
++ tree tmp_var = (i < amnt - 1) ? vect_recog_temp_ssa_var (itype, NULL)
++ : dest;
++ gimple *stmt
++ = gimple_build_assign (tmp_var, PLUS_EXPR, prev_res, prev_res);
++ prev_res = tmp_var;
++ if (i < amnt - 1)
++ append_pattern_def_seq (vinfo, stmt);
++ else
++ return stmt;
++ }
++ gcc_unreachable ();
++ return NULL;
++}
++
++/* Helper for vect_synth_mult_by_constant. Apply a binary operation
++ CODE to operands OP1 and OP2, creating a new temporary SSA var in
++ the process if necessary. Append the resulting assignment statements
++ to the sequence in STMT_VINFO. Return the SSA variable that holds the
++ result of the binary operation. If SYNTH_SHIFT_P is true synthesize
++ left shifts using additions. */
++
++static tree
++apply_binop_and_append_stmt (tree_code code, tree op1, tree op2,
++ stmt_vec_info stmt_vinfo, bool synth_shift_p)
++{
++ if (integer_zerop (op2)
++ && (code == LSHIFT_EXPR
++ || code == PLUS_EXPR))
++ {
++ gcc_assert (TREE_CODE (op1) == SSA_NAME);
++ return op1;
++ }
++
++ gimple *stmt;
++ tree itype = TREE_TYPE (op1);
++ tree tmp_var = vect_recog_temp_ssa_var (itype, NULL);
++
++ if (code == LSHIFT_EXPR
++ && synth_shift_p)
++ {
++ stmt = synth_lshift_by_additions (tmp_var, op1, TREE_INT_CST_LOW (op2),
++ stmt_vinfo);
++ append_pattern_def_seq (stmt_vinfo, stmt);
++ return tmp_var;
++ }
++
++ stmt = gimple_build_assign (tmp_var, code, op1, op2);
++ append_pattern_def_seq (stmt_vinfo, stmt);
++ return tmp_var;
++}
++
++/* Synthesize a multiplication of OP by an INTEGER_CST VAL using shifts
++ and simple arithmetic operations to be vectorized. Record the statements
++ produced in STMT_VINFO and return the last statement in the sequence or
++ NULL if it's not possible to synthesize such a multiplication.
++ This function mirrors the behavior of expand_mult_const in expmed.c but
++ works on tree-ssa form. */
++
++static gimple *
++vect_synth_mult_by_constant (tree op, tree val,
++ stmt_vec_info stmt_vinfo)
++{
++ tree itype = TREE_TYPE (op);
++ machine_mode mode = TYPE_MODE (itype);
++ struct algorithm alg;
++ mult_variant variant;
++ if (!tree_fits_shwi_p (val))
++ return NULL;
++
++ /* Multiplication synthesis by shifts, adds and subs can introduce
++ signed overflow where the original operation didn't. Perform the
++ operations on an unsigned type and cast back to avoid this.
++ In the future we may want to relax this for synthesis algorithms
++ that we can prove do not cause unexpected overflow. */
++ bool cast_to_unsigned_p = !TYPE_OVERFLOW_WRAPS (itype);
++
++ tree multtype = cast_to_unsigned_p ? unsigned_type_for (itype) : itype;
++
++ /* Targets that don't support vector shifts but support vector additions
++ can synthesize shifts that way. */
++ bool synth_shift_p = !vect_supportable_shift (LSHIFT_EXPR, multtype);
++
++ HOST_WIDE_INT hwval = tree_to_shwi (val);
++ /* Use MAX_COST here as we don't want to limit the sequence on rtx costs.
++ The vectorizer's benefit analysis will decide whether it's beneficial
++ to do this. */
++ bool possible = choose_mult_variant (mode, hwval, &alg,
++ &variant, MAX_COST);
++ if (!possible)
++ return NULL;
+
+- Mult with constants that are negative power of two.
+- S2: b_t = a_t * -n
++ tree vectype = get_vectype_for_scalar_type (multtype);
++
++ if (!vectype
++ || !target_supports_mult_synth_alg (&alg, variant,
++ vectype, synth_shift_p))
++ return NULL;
++
++ tree accumulator;
++
++ /* Clear out the sequence of statements so we can populate it below. */
++ STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo) = NULL;
++ gimple *stmt = NULL;
++
++ if (cast_to_unsigned_p)
++ {
++ tree tmp_op = vect_recog_temp_ssa_var (multtype, NULL);
++ stmt = gimple_build_assign (tmp_op, CONVERT_EXPR, op);
++ append_pattern_def_seq (stmt_vinfo, stmt);
++ op = tmp_op;
++ }
++
++ if (alg.op[0] == alg_zero)
++ accumulator = build_int_cst (multtype, 0);
++ else
++ accumulator = op;
++
++ bool needs_fixup = (variant == negate_variant)
++ || (variant == add_variant);
++
++ for (int i = 1; i < alg.ops; i++)
++ {
++ tree shft_log = build_int_cst (multtype, alg.log[i]);
++ tree accum_tmp = vect_recog_temp_ssa_var (multtype, NULL);
++ tree tmp_var = NULL_TREE;
++
++ switch (alg.op[i])
++ {
++ case alg_shift:
++ if (synth_shift_p)
++ stmt
++ = synth_lshift_by_additions (accum_tmp, accumulator, alg.log[i],
++ stmt_vinfo);
++ else
++ stmt = gimple_build_assign (accum_tmp, LSHIFT_EXPR, accumulator,
++ shft_log);
++ break;
++ case alg_add_t_m2:
++ tmp_var
++ = apply_binop_and_append_stmt (LSHIFT_EXPR, op, shft_log,
++ stmt_vinfo, synth_shift_p);
++ stmt = gimple_build_assign (accum_tmp, PLUS_EXPR, accumulator,
++ tmp_var);
++ break;
++ case alg_sub_t_m2:
++ tmp_var = apply_binop_and_append_stmt (LSHIFT_EXPR, op,
++ shft_log, stmt_vinfo,
++ synth_shift_p);
++ /* In some algorithms the first step involves zeroing the
++ accumulator. If subtracting from such an accumulator
++ just emit the negation directly. */
++ if (integer_zerop (accumulator))
++ stmt = gimple_build_assign (accum_tmp, NEGATE_EXPR, tmp_var);
++ else
++ stmt = gimple_build_assign (accum_tmp, MINUS_EXPR, accumulator,
++ tmp_var);
++ break;
++ case alg_add_t2_m:
++ tmp_var
++ = apply_binop_and_append_stmt (LSHIFT_EXPR, accumulator, shft_log,
++ stmt_vinfo, synth_shift_p);
++ stmt = gimple_build_assign (accum_tmp, PLUS_EXPR, tmp_var, op);
++ break;
++ case alg_sub_t2_m:
++ tmp_var
++ = apply_binop_and_append_stmt (LSHIFT_EXPR, accumulator, shft_log,
++ stmt_vinfo, synth_shift_p);
++ stmt = gimple_build_assign (accum_tmp, MINUS_EXPR, tmp_var, op);
++ break;
++ case alg_add_factor:
++ tmp_var
++ = apply_binop_and_append_stmt (LSHIFT_EXPR, accumulator, shft_log,
++ stmt_vinfo, synth_shift_p);
++ stmt = gimple_build_assign (accum_tmp, PLUS_EXPR, accumulator,
++ tmp_var);
++ break;
++ case alg_sub_factor:
++ tmp_var
++ = apply_binop_and_append_stmt (LSHIFT_EXPR, accumulator, shft_log,
++ stmt_vinfo, synth_shift_p);
++ stmt = gimple_build_assign (accum_tmp, MINUS_EXPR, tmp_var,
++ accumulator);
++ break;
++ default:
++ gcc_unreachable ();
++ }
++ /* We don't want to append the last stmt in the sequence to stmt_vinfo
++ but rather return it directly. */
++
++ if ((i < alg.ops - 1) || needs_fixup || cast_to_unsigned_p)
++ append_pattern_def_seq (stmt_vinfo, stmt);
++ accumulator = accum_tmp;
++ }
++ if (variant == negate_variant)
++ {
++ tree accum_tmp = vect_recog_temp_ssa_var (multtype, NULL);
++ stmt = gimple_build_assign (accum_tmp, NEGATE_EXPR, accumulator);
++ accumulator = accum_tmp;
++ if (cast_to_unsigned_p)
++ append_pattern_def_seq (stmt_vinfo, stmt);
++ }
++ else if (variant == add_variant)
++ {
++ tree accum_tmp = vect_recog_temp_ssa_var (multtype, NULL);
++ stmt = gimple_build_assign (accum_tmp, PLUS_EXPR, accumulator, op);
++ accumulator = accum_tmp;
++ if (cast_to_unsigned_p)
++ append_pattern_def_seq (stmt_vinfo, stmt);
++ }
++ /* Move back to a signed if needed. */
++ if (cast_to_unsigned_p)
++ {
++ tree accum_tmp = vect_recog_temp_ssa_var (itype, NULL);
++ stmt = gimple_build_assign (accum_tmp, CONVERT_EXPR, accumulator);
++ }
++
++ return stmt;
++}
++
++/* Detect multiplication by constant and convert it into a sequence of
++ shifts and additions, subtractions, negations. We reuse the
++ choose_mult_variant algorithms from expmed.c
+
+ Input/Output:
+
+ STMTS: Contains a stmt from which the pattern search begins,
+- i.e. the mult stmt. Convert the mult operation to LSHIFT if
+- constant operand is a power of 2.
+- type a_t, b_t
+- S1': b_t = a_t << log2 (n)
+-
+- Convert the mult operation to LSHIFT and followed by a NEGATE
+- if constant operand is a negative power of 2.
+- type a_t, b_t, res_T;
+- S2': b_t = a_t << log2 (n)
+- S3': res_T = - (b_t)
++ i.e. the mult stmt.
+
+ Output:
+
+@@ -2169,8 +2450,8 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts,
+
+ * TYPE_OUT: The type of the output of this pattern.
+
+- * Return value: A new stmt that will be used to replace the multiplication
+- S1 or S2 stmt. */
++ * Return value: A new stmt that will be used to replace
++ the multiplication. */
+
+ static gimple *
+ vect_recog_mult_pattern (vec<gimple *> *stmts,
+@@ -2178,11 +2459,8 @@ vect_recog_mult_pattern (vec<gimple *> *stmts,
+ {
+ gimple *last_stmt = stmts->pop ();
+ tree oprnd0, oprnd1, vectype, itype;
+- gimple *pattern_stmt, *def_stmt;
+- optab optab;
++ gimple *pattern_stmt;
+ stmt_vec_info stmt_vinfo = vinfo_for_stmt (last_stmt);
+- int power2_val, power2_neg_val;
+- tree shift;
+
+ if (!is_gimple_assign (last_stmt))
+ return NULL;
+@@ -2206,52 +2484,17 @@ vect_recog_mult_pattern (vec<gimple *> *stmts,
+
+ /* If the target can handle vectorized multiplication natively,
+ don't attempt to optimize this. */
+- optab = optab_for_tree_code (MULT_EXPR, vectype, optab_default);
+- if (optab != unknown_optab)
++ optab mul_optab = optab_for_tree_code (MULT_EXPR, vectype, optab_default);
++ if (mul_optab != unknown_optab)
+ {
+ machine_mode vec_mode = TYPE_MODE (vectype);
+- int icode = (int) optab_handler (optab, vec_mode);
++ int icode = (int) optab_handler (mul_optab, vec_mode);
+ if (icode != CODE_FOR_nothing)
+- return NULL;
++ return NULL;
+ }
+
+- /* If target cannot handle vector left shift then we cannot
+- optimize and bail out. */
+- optab = optab_for_tree_code (LSHIFT_EXPR, vectype, optab_vector);
+- if (!optab
+- || optab_handler (optab, TYPE_MODE (vectype)) == CODE_FOR_nothing)
+- return NULL;
+-
+- power2_val = wi::exact_log2 (oprnd1);
+- power2_neg_val = wi::exact_log2 (wi::neg (oprnd1));
+-
+- /* Handle constant operands that are postive or negative powers of 2. */
+- if (power2_val != -1)
+- {
+- shift = build_int_cst (itype, power2_val);
+- pattern_stmt
+- = gimple_build_assign (vect_recog_temp_ssa_var (itype, NULL),
+- LSHIFT_EXPR, oprnd0, shift);
+- }
+- else if (power2_neg_val != -1)
+- {
+- /* If the target cannot handle vector NEGATE then we cannot
+- do the optimization. */
+- optab = optab_for_tree_code (NEGATE_EXPR, vectype, optab_vector);
+- if (!optab
+- || optab_handler (optab, TYPE_MODE (vectype)) == CODE_FOR_nothing)
+- return NULL;
+-
+- shift = build_int_cst (itype, power2_neg_val);
+- def_stmt
+- = gimple_build_assign (vect_recog_temp_ssa_var (itype, NULL),
+- LSHIFT_EXPR, oprnd0, shift);
+- new_pattern_def_seq (stmt_vinfo, def_stmt);
+- pattern_stmt
+- = gimple_build_assign (vect_recog_temp_ssa_var (itype, NULL),
+- NEGATE_EXPR, gimple_assign_lhs (def_stmt));
+- }
+- else
++ pattern_stmt = vect_synth_mult_by_constant (oprnd0, oprnd1, stmt_vinfo);
++ if (!pattern_stmt)
+ return NULL;
+
+ /* Pattern detected. */
+--- a/src/gcc/tree-vect-stmts.c
++++ b/src/gcc/tree-vect-stmts.c
+@@ -6354,12 +6354,22 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
+ gcc_assert (!nested_in_vect_loop && !STMT_VINFO_GATHER_SCATTER_P (stmt_info));
+
+ first_stmt = GROUP_FIRST_ELEMENT (stmt_info);
++ group_size = GROUP_SIZE (vinfo_for_stmt (first_stmt));
++
++ if (!slp
++ && !PURE_SLP_STMT (stmt_info)
++ && !STMT_VINFO_STRIDED_P (stmt_info))
++ {
++ if (vect_load_lanes_supported (vectype, group_size))
++ load_lanes_p = true;
++ else if (!vect_grouped_load_supported (vectype, group_size))
++ return false;
++ }
+
+ /* If this is single-element interleaving with an element distance
+ that leaves unused vector loads around punt - we at least create
+ very sub-optimal code in that case (and blow up memory,
+ see PR65518). */
+- bool force_peeling = false;
+ if (first_stmt == stmt
+ && !GROUP_NEXT_ELEMENT (stmt_info))
+ {
+@@ -6373,7 +6383,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
+ }
+
+ /* Single-element interleaving requires peeling for gaps. */
+- force_peeling = true;
++ gcc_assert (GROUP_GAP (stmt_info));
+ }
+
+ /* If there is a gap in the end of the group or the group size cannot
+@@ -6381,9 +6391,8 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
+ elements in the last iteration and thus need to peel that off. */
+ if (loop_vinfo
+ && ! STMT_VINFO_STRIDED_P (stmt_info)
+- && (force_peeling
+- || GROUP_GAP (vinfo_for_stmt (first_stmt)) != 0
+- || (!slp && vf % GROUP_SIZE (vinfo_for_stmt (first_stmt)) != 0)))
++ && (GROUP_GAP (vinfo_for_stmt (first_stmt)) != 0
++ || (!slp && !load_lanes_p && vf % group_size != 0)))
+ {
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+@@ -6403,8 +6412,6 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
+ if (slp && SLP_TREE_LOAD_PERMUTATION (slp_node).exists ())
+ slp_perm = true;
+
+- group_size = GROUP_SIZE (vinfo_for_stmt (first_stmt));
+-
+ /* ??? The following is overly pessimistic (as well as the loop
+ case above) in the case we can statically determine the excess
+ elements loaded are within the bounds of a decl that is accessed.
+@@ -6417,16 +6424,6 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
+ return false;
+ }
+
+- if (!slp
+- && !PURE_SLP_STMT (stmt_info)
+- && !STMT_VINFO_STRIDED_P (stmt_info))
+- {
+- if (vect_load_lanes_supported (vectype, group_size))
+- load_lanes_p = true;
+- else if (!vect_grouped_load_supported (vectype, group_size))
+- return false;
+- }
+-
+ /* Invalidate assumptions made by dependence analysis when vectorization
+ on the unrolled body effectively re-orders stmts. */
+ if (!PURE_SLP_STMT (stmt_info)
+--- a/src/gcc/tree-vectorizer.c
++++ b/src/gcc/tree-vectorizer.c
+@@ -794,38 +794,142 @@ make_pass_slp_vectorize (gcc::context *ctxt)
+ This should involve global alignment analysis and in the future also
+ array padding. */
+
++static unsigned get_vec_alignment_for_type (tree);
++static hash_map<tree, unsigned> *type_align_map;
++
++/* Return alignment of array's vector type corresponding to scalar type.
++ 0 if no vector type exists. */
++static unsigned
++get_vec_alignment_for_array_type (tree type)
++{
++ gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
++
++ tree vectype = get_vectype_for_scalar_type (strip_array_types (type));
++ if (!vectype
++ || !TYPE_SIZE (type)
++ || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
++ || tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (vectype)))
++ return 0;
++
++ return TYPE_ALIGN (vectype);
++}
++
++/* Return alignment of field having maximum alignment of vector type
++ corresponding to it's scalar type. For now, we only consider fields whose
++ offset is a multiple of it's vector alignment.
++ 0 if no suitable field is found. */
++static unsigned
++get_vec_alignment_for_record_type (tree type)
++{
++ gcc_assert (TREE_CODE (type) == RECORD_TYPE);
++
++ unsigned max_align = 0, alignment;
++ HOST_WIDE_INT offset;
++ tree offset_tree;
++
++ if (TYPE_PACKED (type))
++ return 0;
++
++ unsigned *slot = type_align_map->get (type);
++ if (slot)
++ return *slot;
++
++ for (tree field = first_field (type);
++ field != NULL_TREE;
++ field = DECL_CHAIN (field))
++ {
++ /* Skip if not FIELD_DECL or if alignment is set by user. */
++ if (TREE_CODE (field) != FIELD_DECL
++ || DECL_USER_ALIGN (field)
++ || DECL_ARTIFICIAL (field))
++ continue;
++
++ /* We don't need to process the type further if offset is variable,
++ since the offsets of remaining members will also be variable. */
++ if (TREE_CODE (DECL_FIELD_OFFSET (field)) != INTEGER_CST
++ || TREE_CODE (DECL_FIELD_BIT_OFFSET (field)) != INTEGER_CST)
++ break;
++
++ /* Similarly stop processing the type if offset_tree
++ does not fit in unsigned HOST_WIDE_INT. */
++ offset_tree = bit_position (field);
++ if (!tree_fits_uhwi_p (offset_tree))
++ break;
++
++ offset = tree_to_uhwi (offset_tree);
++ alignment = get_vec_alignment_for_type (TREE_TYPE (field));
++
++ /* Get maximum alignment of vectorized field/array among those members
++ whose offset is multiple of the vector alignment. */
++ if (alignment
++ && (offset % alignment == 0)
++ && (alignment > max_align))
++ max_align = alignment;
++ }
++
++ type_align_map->put (type, max_align);
++ return max_align;
++}
++
++/* Return alignment of vector type corresponding to decl's scalar type
++ or 0 if it doesn't exist or the vector alignment is lesser than
++ decl's alignment. */
++static unsigned
++get_vec_alignment_for_type (tree type)
++{
++ if (type == NULL_TREE)
++ return 0;
++
++ gcc_assert (TYPE_P (type));
++
++ static unsigned alignment = 0;
++ switch (TREE_CODE (type))
++ {
++ case ARRAY_TYPE:
++ alignment = get_vec_alignment_for_array_type (type);
++ break;
++ case RECORD_TYPE:
++ alignment = get_vec_alignment_for_record_type (type);
++ break;
++ default:
++ alignment = 0;
++ break;
++ }
++
++ return (alignment > TYPE_ALIGN (type)) ? alignment : 0;
++}
++
++/* Entry point to increase_alignment pass. */
+ static unsigned int
+ increase_alignment (void)
+ {
+ varpool_node *vnode;
+
+ vect_location = UNKNOWN_LOCATION;
++ type_align_map = new hash_map<tree, unsigned>;
+
+ /* Increase the alignment of all global arrays for vectorization. */
+ FOR_EACH_DEFINED_VARIABLE (vnode)
+ {
+- tree vectype, decl = vnode->decl;
+- tree t;
++ tree decl = vnode->decl;
+ unsigned int alignment;
+
+- t = TREE_TYPE (decl);
+- if (TREE_CODE (t) != ARRAY_TYPE)
+- continue;
+- vectype = get_vectype_for_scalar_type (strip_array_types (t));
+- if (!vectype)
+- continue;
+- alignment = TYPE_ALIGN (vectype);
+- if (DECL_ALIGN (decl) >= alignment)
+- continue;
+-
+- if (vect_can_force_dr_alignment_p (decl, alignment))
++ if ((decl_in_symtab_p (decl)
++ && !symtab_node::get (decl)->can_increase_alignment_p ())
++ || DECL_USER_ALIGN (decl) || DECL_ARTIFICIAL (decl))
++ continue;
++
++ alignment = get_vec_alignment_for_type (TREE_TYPE (decl));
++ if (alignment && vect_can_force_dr_alignment_p (decl, alignment))
+ {
+- vnode->increase_alignment (TYPE_ALIGN (vectype));
++ vnode->increase_alignment (alignment);
+ dump_printf (MSG_NOTE, "Increasing alignment of decl: ");
+ dump_generic_expr (MSG_NOTE, TDF_SLIM, decl);
+ dump_printf (MSG_NOTE, "\n");
+ }
+ }
++
++ delete type_align_map;
+ return 0;
+ }
+
+--- a/src/gcc/tree-vrp.c
++++ b/src/gcc/tree-vrp.c
+@@ -3165,6 +3165,24 @@ extract_range_from_binary_expr_1 (value_range *vr,
+ if (int_cst_range1 && tree_int_cst_sgn (vr1.min) >= 0)
+ wmax = wi::min (wmax, vr1.max, TYPE_SIGN (expr_type));
+ max = wide_int_to_tree (expr_type, wmax);
++ cmp = compare_values (min, max);
++ /* PR68217: In case of signed & sign-bit-CST should
++ result in [-INF, 0] instead of [-INF, INF]. */
++ if (cmp == -2 || cmp == 1)
++ {
++ wide_int sign_bit
++ = wi::set_bit_in_zero (TYPE_PRECISION (expr_type) - 1,
++ TYPE_PRECISION (expr_type));
++ if (!TYPE_UNSIGNED (expr_type)
++ && ((value_range_constant_singleton (&vr0)
++ && !wi::cmps (vr0.min, sign_bit))
++ || (value_range_constant_singleton (&vr1)
++ && !wi::cmps (vr1.min, sign_bit))))
++ {
++ min = TYPE_MIN_VALUE (expr_type);
++ max = build_int_cst (expr_type, 0);
++ }
++ }
+ }
+ else if (code == BIT_IOR_EXPR)
+ {
+@@ -3859,7 +3877,8 @@ extract_range_basic (value_range *vr, gimple *stmt)
+ arg = gimple_call_arg (stmt, 0);
+ if (TREE_CODE (arg) == SSA_NAME
+ && SSA_NAME_IS_DEFAULT_DEF (arg)
+- && TREE_CODE (SSA_NAME_VAR (arg)) == PARM_DECL)
++ && TREE_CODE (SSA_NAME_VAR (arg)) == PARM_DECL
++ && cfun->after_inlining)
+ {
+ set_value_range_to_null (vr, type);
+ return;
+@@ -9935,6 +9954,40 @@ simplify_internal_call_using_ranges (gimple_stmt_iterator *gsi, gimple *stmt)
+ return true;
+ }
+
++/* Return true if VAR is a two-valued variable. Set a and b with the
++ two-values when it is true. Return false otherwise. */
++
++static bool
++two_valued_val_range_p (tree var, tree *a, tree *b)
++{
++ value_range *vr = get_value_range (var);
++ if ((vr->type != VR_RANGE
++ && vr->type != VR_ANTI_RANGE)
++ || TREE_CODE (vr->min) != INTEGER_CST
++ || TREE_CODE (vr->max) != INTEGER_CST)
++ return false;
++
++ if (vr->type == VR_RANGE
++ && wi::sub (vr->max, vr->min) == 1)
++ {
++ *a = vr->min;
++ *b = vr->max;
++ return true;
++ }
++
++ /* ~[TYPE_MIN + 1, TYPE_MAX - 1] */
++ if (vr->type == VR_ANTI_RANGE
++ && wi::sub (vr->min, vrp_val_min (TREE_TYPE (var))) == 1
++ && wi::sub (vrp_val_max (TREE_TYPE (var)), vr->max) == 1)
++ {
++ *a = vrp_val_min (TREE_TYPE (var));
++ *b = vrp_val_max (TREE_TYPE (var));
++ return true;
++ }
++
++ return false;
++}
++
+ /* Simplify STMT using ranges if possible. */
+
+ static bool
+@@ -9945,6 +9998,68 @@ simplify_stmt_using_ranges (gimple_stmt_iterator *gsi)
+ {
+ enum tree_code rhs_code = gimple_assign_rhs_code (stmt);
+ tree rhs1 = gimple_assign_rhs1 (stmt);
++ tree rhs2 = gimple_assign_rhs2 (stmt);
++ tree lhs = gimple_assign_lhs (stmt);
++ tree val1 = NULL_TREE, val2 = NULL_TREE;
++ use_operand_p use_p;
++ gimple *use_stmt;
++
++ /* Convert:
++ LHS = CST BINOP VAR
++ Where VAR is two-valued and LHS is used in GIMPLE_COND only
++ To:
++ LHS = VAR == VAL1 ? (CST BINOP VAL1) : (CST BINOP VAL2)
++
++ Also handles:
++ LHS = VAR BINOP CST
++ Where VAR is two-valued and LHS is used in GIMPLE_COND only
++ To:
++ LHS = VAR == VAL1 ? (VAL1 BINOP CST) : (VAL2 BINOP CST) */
++
++ if (TREE_CODE_CLASS (rhs_code) == tcc_binary
++ && INTEGRAL_TYPE_P (TREE_TYPE (lhs))
++ && ((TREE_CODE (rhs1) == INTEGER_CST
++ && TREE_CODE (rhs2) == SSA_NAME)
++ || (TREE_CODE (rhs2) == INTEGER_CST
++ && TREE_CODE (rhs1) == SSA_NAME))
++ && single_imm_use (lhs, &use_p, &use_stmt)
++ && gimple_code (use_stmt) == GIMPLE_COND)
++
++ {
++ tree new_rhs1 = NULL_TREE;
++ tree new_rhs2 = NULL_TREE;
++ tree cmp_var = NULL_TREE;
++
++ if (TREE_CODE (rhs2) == SSA_NAME
++ && two_valued_val_range_p (rhs2, &val1, &val2))
++ {
++ /* Optimize RHS1 OP [VAL1, VAL2]. */
++ new_rhs1 = int_const_binop (rhs_code, rhs1, val1);
++ new_rhs2 = int_const_binop (rhs_code, rhs1, val2);
++ cmp_var = rhs2;
++ }
++ else if (TREE_CODE (rhs1) == SSA_NAME
++ && two_valued_val_range_p (rhs1, &val1, &val2))
++ {
++ /* Optimize [VAL1, VAL2] OP RHS2. */
++ new_rhs1 = int_const_binop (rhs_code, val1, rhs2);
++ new_rhs2 = int_const_binop (rhs_code, val2, rhs2);
++ cmp_var = rhs1;
++ }
++
++ /* If we could not find two-vals or the optimzation is invalid as
++ in divide by zero, new_rhs1 / new_rhs will be NULL_TREE. */
++ if (new_rhs1 && new_rhs2)
++ {
++ tree cond = build2 (EQ_EXPR, TREE_TYPE (cmp_var), cmp_var, val1);
++ gimple_assign_set_rhs_with_ops (gsi,
++ COND_EXPR, cond,
++ new_rhs1,
++ new_rhs2);
++ update_stmt (gsi_stmt (*gsi));
++ return true;
++ }
++ }
+
+ switch (rhs_code)
+ {
+--- a/src/gcc/tree.h
++++ b/src/gcc/tree.h
+@@ -4628,69 +4628,6 @@ extern void warn_deprecated_use (tree, tree);
+ extern void cache_integer_cst (tree);
+ extern const char *combined_fn_name (combined_fn);
+
+-/* Return the memory model from a host integer. */
+-static inline enum memmodel
+-memmodel_from_int (unsigned HOST_WIDE_INT val)
+-{
+- return (enum memmodel) (val & MEMMODEL_MASK);
+-}
+-
+-/* Return the base memory model from a host integer. */
+-static inline enum memmodel
+-memmodel_base (unsigned HOST_WIDE_INT val)
+-{
+- return (enum memmodel) (val & MEMMODEL_BASE_MASK);
+-}
+-
+-/* Return TRUE if the memory model is RELAXED. */
+-static inline bool
+-is_mm_relaxed (enum memmodel model)
+-{
+- return (model & MEMMODEL_BASE_MASK) == MEMMODEL_RELAXED;
+-}
+-
+-/* Return TRUE if the memory model is CONSUME. */
+-static inline bool
+-is_mm_consume (enum memmodel model)
+-{
+- return (model & MEMMODEL_BASE_MASK) == MEMMODEL_CONSUME;
+-}
+-
+-/* Return TRUE if the memory model is ACQUIRE. */
+-static inline bool
+-is_mm_acquire (enum memmodel model)
+-{
+- return (model & MEMMODEL_BASE_MASK) == MEMMODEL_ACQUIRE;
+-}
+-
+-/* Return TRUE if the memory model is RELEASE. */
+-static inline bool
+-is_mm_release (enum memmodel model)
+-{
+- return (model & MEMMODEL_BASE_MASK) == MEMMODEL_RELEASE;
+-}
+-
+-/* Return TRUE if the memory model is ACQ_REL. */
+-static inline bool
+-is_mm_acq_rel (enum memmodel model)
+-{
+- return (model & MEMMODEL_BASE_MASK) == MEMMODEL_ACQ_REL;
+-}
+-
+-/* Return TRUE if the memory model is SEQ_CST. */
+-static inline bool
+-is_mm_seq_cst (enum memmodel model)
+-{
+- return (model & MEMMODEL_BASE_MASK) == MEMMODEL_SEQ_CST;
+-}
+-
+-/* Return TRUE if the memory model is a SYNC variant. */
+-static inline bool
+-is_mm_sync (enum memmodel model)
+-{
+- return (model & MEMMODEL_SYNC);
+-}
+-
+ /* Compare and hash for any structure which begins with a canonical
+ pointer. Assumes all pointers are interchangeable, which is sort
+ of already assumed by gcc elsewhere IIRC. */
+--- a/src/gcc/tsan.c
++++ b/src/gcc/tsan.c
+@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see
+ #include "backend.h"
+ #include "rtl.h"
+ #include "tree.h"
++#include "memmodel.h"
+ #include "gimple.h"
+ #include "tree-pass.h"
+ #include "ssa.h"
+--- a/src/gcc/varasm.c
++++ b/src/gcc/varasm.c
+@@ -6776,6 +6776,16 @@ default_use_anchors_for_symbol_p (const_rtx symbol)
+ sections that should be marked as small in the section directive. */
+ if (targetm.in_small_data_p (decl))
+ return false;
++
++ /* Don't use section anchors for decls that won't fit inside a single
++ anchor range to reduce the amount of instructions required to refer
++ to the entire declaration. */
++ if (DECL_SIZE_UNIT (decl) == NULL_TREE
++ || !tree_fits_uhwi_p (DECL_SIZE_UNIT (decl))
++ || (tree_to_uhwi (DECL_SIZE_UNIT (decl))
++ >= (unsigned HOST_WIDE_INT) targetm.max_anchor_offset))
++ return false;
++
+ }
+ return true;
+ }
+--- a/src/libcpp/expr.c
++++ b/src/libcpp/expr.c
+@@ -1073,7 +1073,7 @@ eval_token (cpp_reader *pfile, const cpp_token *token,
+ result.low = 0;
+ if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
+ cpp_warning_with_line (pfile, CPP_W_UNDEF, virtual_location, 0,
+- "\"%s\" is not defined",
++ "\"%s\" is not defined, evaluates to 0",
+ NODE_NAME (token->val.node.node));
+ }
+ break;
+--- a/src/libcpp/lex.c
++++ b/src/libcpp/lex.c
+@@ -750,6 +750,101 @@ search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
+ }
+ }
+
++#elif defined (__ARM_NEON) && defined (__ARM_64BIT_STATE)
++#include "arm_neon.h"
++
++/* This doesn't have to be the exact page size, but no system may use
++ a size smaller than this. ARMv8 requires a minimum page size of
++ 4k. The impact of being conservative here is a small number of
++ cases will take the slightly slower entry path into the main
++ loop. */
++
++#define AARCH64_MIN_PAGE_SIZE 4096
++
++static const uchar *
++search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
++{
++ const uint8x16_t repl_nl = vdupq_n_u8 ('\n');
++ const uint8x16_t repl_cr = vdupq_n_u8 ('\r');
++ const uint8x16_t repl_bs = vdupq_n_u8 ('\\');
++ const uint8x16_t repl_qm = vdupq_n_u8 ('?');
++ const uint8x16_t xmask = (uint8x16_t) vdupq_n_u64 (0x8040201008040201ULL);
++
++#ifdef __AARCH64EB
++ const int16x8_t shift = {8, 8, 8, 8, 0, 0, 0, 0};
++#else
++ const int16x8_t shift = {0, 0, 0, 0, 8, 8, 8, 8};
++#endif
++
++ unsigned int found;
++ const uint8_t *p;
++ uint8x16_t data;
++ uint8x16_t t;
++ uint16x8_t m;
++ uint8x16_t u, v, w;
++
++ /* Align the source pointer. */
++ p = (const uint8_t *)((uintptr_t)s & -16);
++
++ /* Assuming random string start positions, with a 4k page size we'll take
++ the slow path about 0.37% of the time. */
++ if (__builtin_expect ((AARCH64_MIN_PAGE_SIZE
++ - (((uintptr_t) s) & (AARCH64_MIN_PAGE_SIZE - 1)))
++ < 16, 0))
++ {
++ /* Slow path: the string starts near a possible page boundary. */
++ uint32_t misalign, mask;
++
++ misalign = (uintptr_t)s & 15;
++ mask = (-1u << misalign) & 0xffff;
++ data = vld1q_u8 (p);
++ t = vceqq_u8 (data, repl_nl);
++ u = vceqq_u8 (data, repl_cr);
++ v = vorrq_u8 (t, vceqq_u8 (data, repl_bs));
++ w = vorrq_u8 (u, vceqq_u8 (data, repl_qm));
++ t = vorrq_u8 (v, w);
++ t = vandq_u8 (t, xmask);
++ m = vpaddlq_u8 (t);
++ m = vshlq_u16 (m, shift);
++ found = vaddvq_u16 (m);
++ found &= mask;
++ if (found)
++ return (const uchar*)p + __builtin_ctz (found);
++ }
++ else
++ {
++ data = vld1q_u8 ((const uint8_t *) s);
++ t = vceqq_u8 (data, repl_nl);
++ u = vceqq_u8 (data, repl_cr);
++ v = vorrq_u8 (t, vceqq_u8 (data, repl_bs));
++ w = vorrq_u8 (u, vceqq_u8 (data, repl_qm));
++ t = vorrq_u8 (v, w);
++ if (__builtin_expect (vpaddd_u64 ((uint64x2_t)t), 0))
++ goto done;
++ }
++
++ do
++ {
++ p += 16;
++ data = vld1q_u8 (p);
++ t = vceqq_u8 (data, repl_nl);
++ u = vceqq_u8 (data, repl_cr);
++ v = vorrq_u8 (t, vceqq_u8 (data, repl_bs));
++ w = vorrq_u8 (u, vceqq_u8 (data, repl_qm));
++ t = vorrq_u8 (v, w);
++ } while (!vpaddd_u64 ((uint64x2_t)t));
++
++done:
++ /* Now that we've found the terminating substring, work out precisely where
++ we need to stop. */
++ t = vandq_u8 (t, xmask);
++ m = vpaddlq_u8 (t);
++ m = vshlq_u16 (m, shift);
++ found = vaddvq_u16 (m);
++ return (((((uintptr_t) p) < (uintptr_t) s) ? s : (const uchar *)p)
++ + __builtin_ctz (found));
++}
++
+ #elif defined (__ARM_NEON)
+ #include "arm_neon.h"
+
+--- a/src/libgcc/Makefile.in
++++ b/src/libgcc/Makefile.in
+@@ -414,8 +414,9 @@ lib2funcs = _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2 \
+ _negvsi2 _negvdi2 _ctors _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 \
+ _ctzsi2 _ctzdi2 _popcount_tab _popcountsi2 _popcountdi2 \
+ _paritysi2 _paritydi2 _powisf2 _powidf2 _powixf2 _powitf2 \
+- _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3 \
+- _divtc3 _bswapsi2 _bswapdi2 _clrsbsi2 _clrsbdi2
++ _mulhc3 _mulsc3 _muldc3 _mulxc3 _multc3 _divhc3 _divsc3 \
++ _divdc3 _divxc3 _divtc3 _bswapsi2 _bswapdi2 _clrsbsi2 \
++ _clrsbdi2
+
+ # The floating-point conversion routines that involve a single-word integer.
+ # XX stands for the integer mode.
+--- a/src/libgcc/config.host
++++ b/src/libgcc/config.host
+@@ -1399,4 +1399,8 @@ i[34567]86-*-linux* | x86_64-*-linux*)
+ fi
+ tm_file="${tm_file} i386/value-unwind.h"
+ ;;
++aarch64*-*-*)
++ # ILP32 needs an extra header for unwinding
++ tm_file="${tm_file} aarch64/value-unwind.h"
++ ;;
+ esac
+--- /dev/null
++++ b/src/libgcc/config/aarch64/value-unwind.h
+@@ -0,0 +1,25 @@
++/* Store register values as _Unwind_Word type in DWARF2 EH unwind context.
++ Copyright (C) 2017 Free Software Foundation, Inc.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published
++ by the Free Software Foundation; either version 3, or (at your
++ option) any later version.
++
++ GCC is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
++ License for more details.
++
++ You should have received a copy of the GNU General Public License and
++ a copy of the GCC Runtime Library Exception along with this program;
++ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++/* Define this macro if the target stores register values as _Unwind_Word
++ type in unwind context. Only enable it for ilp32. */
++#if defined __aarch64__ && !defined __LP64__
++# define REG_VALUE_IN_UNWIND_CONTEXT
++#endif
+--- a/src/libgcc/config/arm/bpabi-v6m.S
++++ b/src/libgcc/config/arm/bpabi-v6m.S
+@@ -1,4 +1,5 @@
+-/* Miscellaneous BPABI functions. ARMv6M implementation
++/* Miscellaneous BPABI functions. Thumb-1 implementation, suitable for ARMv4T,
++ ARMv6-M and ARMv8-M Baseline like ISA variants.
+
+ Copyright (C) 2006-2016 Free Software Foundation, Inc.
+ Contributed by CodeSourcery.
+--- /dev/null
++++ b/src/libgcc/config/arm/cmse.c
+@@ -0,0 +1,108 @@
++/* ARMv8-M Security Extensions routines.
++ Copyright (C) 2015-2016 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by the
++ Free Software Foundation; either version 3, or (at your option) any
++ later version.
++
++ This file is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ Under Section 7 of GPL version 3, you are granted additional
++ permissions described in the GCC Runtime Library Exception, version
++ 3.1, as published by the Free Software Foundation.
++
++ You should have received a copy of the GNU General Public License and
++ a copy of the GCC Runtime Library Exception along with this program;
++ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++
++#if __ARM_FEATURE_CMSE & 1
++
++#include <arm_cmse.h>
++
++/* ARM intrinsic function to perform a permission check on a given
++ address range. See ACLE changes for ARMv8-M. */
++
++void *
++cmse_check_address_range (void *p, size_t size, int flags)
++{
++ cmse_address_info_t permb, perme;
++ char *pb = (char *) p, *pe;
++
++ /* Check if the range wraps around. */
++ if (UINTPTR_MAX - (uintptr_t) p < size)
++ return NULL;
++
++ /* Check if an unknown flag is present. */
++ int known = CMSE_MPU_UNPRIV | CMSE_MPU_READWRITE | CMSE_MPU_READ;
++ int known_secure_level = CMSE_MPU_UNPRIV;
++#if __ARM_FEATURE_CMSE & 2
++ known |= CMSE_AU_NONSECURE | CMSE_MPU_NONSECURE;
++ known_secure_level |= CMSE_MPU_NONSECURE;
++#endif
++ if (flags & (~known))
++ return NULL;
++
++ /* Execute the right variant of the TT instructions. */
++ pe = pb + size - 1;
++ const int singleCheck = (((uintptr_t) pb ^ (uintptr_t) pe) < 32);
++ switch (flags & known_secure_level)
++ {
++ case 0:
++ permb = cmse_TT (pb);
++ perme = singleCheck ? permb : cmse_TT (pe);
++ break;
++ case CMSE_MPU_UNPRIV:
++ permb = cmse_TTT (pb);
++ perme = singleCheck ? permb : cmse_TTT (pe);
++ break;
++#if __ARM_FEATURE_CMSE & 2
++ case CMSE_MPU_NONSECURE:
++ permb = cmse_TTA (pb);
++ perme = singleCheck ? permb : cmse_TTA (pe);
++ break;
++ case CMSE_MPU_UNPRIV | CMSE_MPU_NONSECURE:
++ permb = cmse_TTAT (pb);
++ perme = singleCheck ? permb : cmse_TTAT (pe);
++ break;
++#endif
++ default:
++ /* Invalid flag, eg. CMSE_MPU_NONSECURE specified but
++ __ARM_FEATURE_CMSE & 2 == 0. */
++ return NULL;
++ }
++
++ /* Check that the range does not cross MPU, SAU, or IDAU boundaries. */
++ if (permb.value != perme.value)
++ return NULL;
++
++ /* Check the permissions on the range. */
++ switch (flags & (~known_secure_level))
++ {
++#if __ARM_FEATURE_CMSE & 2
++ case CMSE_MPU_READ | CMSE_MPU_READWRITE | CMSE_AU_NONSECURE:
++ case CMSE_MPU_READWRITE | CMSE_AU_NONSECURE:
++ return permb.flags.nonsecure_readwrite_ok ? p : NULL;
++ case CMSE_MPU_READ | CMSE_AU_NONSECURE:
++ return permb.flags.nonsecure_read_ok ? p : NULL;
++ case CMSE_AU_NONSECURE:
++ return permb.flags.secure ? NULL : p;
++#endif
++ case CMSE_MPU_READ | CMSE_MPU_READWRITE:
++ case CMSE_MPU_READWRITE:
++ return permb.flags.readwrite_ok ? p : NULL;
++ case CMSE_MPU_READ:
++ return permb.flags.read_ok ? p : NULL;
++ default:
++ return NULL;
++ }
++}
++
++
++#endif /* __ARM_FEATURE_CMSE & 1. */
+--- /dev/null
++++ b/src/libgcc/config/arm/cmse_nonsecure_call.S
+@@ -0,0 +1,131 @@
++/* CMSE wrapper function used to save, clear and restore callee saved registers
++ for cmse_nonsecure_call's.
++
++ Copyright (C) 2016 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by the
++ Free Software Foundation; either version 3, or (at your option) any
++ later version.
++
++ This file is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ Under Section 7 of GPL version 3, you are granted additional
++ permissions described in the GCC Runtime Library Exception, version
++ 3.1, as published by the Free Software Foundation.
++
++ You should have received a copy of the GNU General Public License and
++ a copy of the GCC Runtime Library Exception along with this program;
++ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++.syntax unified
++.thumb
++.global __gnu_cmse_nonsecure_call
++__gnu_cmse_nonsecure_call:
++#if defined(__ARM_ARCH_8M_MAIN__)
++push {r5-r11,lr}
++mov r7, r4
++mov r8, r4
++mov r9, r4
++mov r10, r4
++mov r11, r4
++mov ip, r4
++
++/* Save and clear callee-saved registers only if we are dealing with hard float
++ ABI. The unused caller-saved registers have already been cleared by GCC
++ generated code. */
++#ifdef __ARM_PCS_VFP
++vpush.f64 {d8-d15}
++mov r5, #0
++vmov d8, r5, r5
++#if __ARM_FP & 0x04
++vmov s18, s19, r5, r5
++vmov s20, s21, r5, r5
++vmov s22, s23, r5, r5
++vmov s24, s25, r5, r5
++vmov s26, s27, r5, r5
++vmov s28, s29, r5, r5
++vmov s30, s31, r5, r5
++#elif __ARM_FP & 0x08
++vmov.f64 d9, d8
++vmov.f64 d10, d8
++vmov.f64 d11, d8
++vmov.f64 d12, d8
++vmov.f64 d13, d8
++vmov.f64 d14, d8
++vmov.f64 d15, d8
++#else
++#error "Half precision implementation not supported."
++#endif
++/* Clear the cumulative exception-status bits (0-4,7) and the
++ condition code bits (28-31) of the FPSCR. */
++vmrs r5, fpscr
++movw r6, #65376
++movt r6, #4095
++ands r5, r6
++vmsr fpscr, r5
++
++/* We are not dealing with hard float ABI, so we can safely use the vlstm and
++ vlldm instructions without needing to preserve the registers used for
++ argument passing. */
++#else
++sub sp, sp, #0x88 /* Reserve stack space to save all floating point
++ registers, including FPSCR. */
++vlstm sp /* Lazy store and clearance of d0-d16 and FPSCR. */
++#endif /* __ARM_PCS_VFP */
++
++/* Make sure to clear the 'GE' bits of the APSR register if 32-bit SIMD
++ instructions are available. */
++#if defined(__ARM_FEATURE_SIMD32)
++msr APSR_nzcvqg, r4
++#else
++msr APSR_nzcvq, r4
++#endif
++
++mov r5, r4
++mov r6, r4
++blxns r4
++
++#ifdef __ARM_PCS_VFP
++vpop.f64 {d8-d15}
++#else
++vlldm sp /* Lazy restore of d0-d16 and FPSCR. */
++add sp, sp, #0x88 /* Free space used to save floating point registers. */
++#endif /* __ARM_PCS_VFP */
++
++pop {r5-r11, pc}
++
++#elif defined (__ARM_ARCH_8M_BASE__)
++push {r5-r7, lr}
++mov r5, r8
++mov r6, r9
++mov r7, r10
++push {r5-r7}
++mov r5, r11
++push {r5}
++mov r5, r4
++mov r6, r4
++mov r7, r4
++mov r8, r4
++mov r9, r4
++mov r10, r4
++mov r11, r4
++mov ip, r4
++msr APSR_nzcvq, r4
++blxns r4
++pop {r5}
++mov r11, r5
++pop {r5-r7}
++mov r10, r7
++mov r9, r6
++mov r8, r5
++pop {r5-r7, pc}
++
++#else
++#error "This should only be used for armv8-m base- and mainline."
++#endif
+--- a/src/libgcc/config/arm/ieee754-df.S
++++ b/src/libgcc/config/arm/ieee754-df.S
+@@ -160,8 +160,8 @@ ARM_FUNC_ALIAS aeabi_dadd adddf3
+ teq r4, r5
+ beq LSYM(Lad_d)
+
+-@ CFI note: we're lucky that the branches to Lad_* that appear after this function
+-@ have a CFI state that's exactly the same as the one we're in at this
++@ CFI note: we're lucky that the branches to Lad_* that appear after this
++@ function have a CFI state that's exactly the same as the one we're in at this
+ @ point. Otherwise the CFI would change to a different state after the branch,
+ @ which would be disastrous for backtracing.
+ LSYM(Lad_x):
+@@ -507,11 +507,15 @@ ARM_FUNC_ALIAS aeabi_f2d extendsfdf2
+ eorne xh, xh, #0x38000000 @ fixup exponent otherwise.
+ RETc(ne) @ and return it.
+
+- teq r2, #0 @ if actually 0
+- do_it ne, e
+- teqne r3, #0xff000000 @ or INF or NAN
++ bics r2, r2, #0xff000000 @ isolate mantissa
++ do_it eq @ if 0, that is ZERO or INF,
+ RETc(eq) @ we are done already.
+
++ teq r3, #0xff000000 @ check for NAN
++ do_it eq, t
++ orreq xh, xh, #0x00080000 @ change to quiet NAN
++ RETc(eq) @ and return it.
++
+ @ value was denormalized. We can normalize it now.
+ do_push {r4, r5, lr}
+ .cfi_adjust_cfa_offset 12 @ CFA is now sp + previousOffset + 12
+@@ -1158,8 +1162,8 @@ ARM_FUNC_ALIAS eqdf2 cmpdf2
+ 1: str ip, [sp, #-4]!
+ .cfi_adjust_cfa_offset 4 @ CFA is now sp + previousOffset + 4.
+ @ We're not adding CFI for ip as it's pushed into the stack
+- @ only because @ it may be popped off later as a return value
+- @ (i.e. we're not preserving @ it anyways).
++ @ only because it may be popped off later as a return value
++ @ (i.e. we're not preserving it anyways).
+
+ @ Trap any INF/NAN first.
+ mov ip, xh, lsl #1
+@@ -1169,14 +1173,14 @@ ARM_FUNC_ALIAS eqdf2 cmpdf2
+ COND(mvn,s,ne) ip, ip, asr #21
+ beq 3f
+ .cfi_remember_state
+- @ Save the current CFI state. This is done because the branch
+- @ is conditional, @ and if we don't take it we'll issue a
+- @ .cfi_adjust_cfa_offset and return. @ If we do take it,
+- @ however, the .cfi_adjust_cfa_offset from the non-branch @ code
+- @ will affect the branch code as well. To avoid this we'll
+- @ restore @ the current state before executing the branch code.
+-
+- @ Test for equality. @ Note that 0.0 is equal to -0.0.
++ @ Save the current CFI state. This is done because the branch
++ @ is conditional, and if we don't take it we'll issue a
++ @ .cfi_adjust_cfa_offset and return. If we do take it,
++ @ however, the .cfi_adjust_cfa_offset from the non-branch code
++ @ will affect the branch code as well. To avoid this we'll
++ @ restore the current state before executing the branch code.
++
++ @ Test for equality. Note that 0.0 is equal to -0.0.
+ 2: add sp, sp, #4
+ .cfi_adjust_cfa_offset -4 @ CFA is now sp + previousOffset.
+
+--- a/src/libgcc/config/arm/lib1funcs.S
++++ b/src/libgcc/config/arm/lib1funcs.S
+@@ -108,7 +108,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ # define __ARM_ARCH__ 7
+ #endif
+
+-#if defined(__ARM_ARCH_8A__)
++#if defined(__ARM_ARCH_8A__) || defined(__ARM_ARCH_8M_BASE__) \
++ || defined(__ARM_ARCH_8M_MAIN__)
+ # define __ARM_ARCH__ 8
+ #endif
+
+@@ -124,10 +125,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ && !defined(__thumb2__) \
+ && (!defined(__THUMB_INTERWORK__) \
+ || defined (__OPTIMIZE_SIZE__) \
+- || defined(__ARM_ARCH_6M__)))
++ || !__ARM_ARCH_ISA_ARM))
+ # define __prefer_thumb__
+ #endif
+
++#if !__ARM_ARCH_ISA_ARM && __ARM_ARCH_ISA_THUMB == 1
++#define NOT_ISA_TARGET_32BIT 1
++#endif
++
+ /* How to return from a function call depends on the architecture variant. */
+
+ #if (__ARM_ARCH__ > 4) || defined(__ARM_ARCH_4T__)
+@@ -305,35 +310,14 @@ LSYM(Lend_fde):
+
+ #ifdef __ARM_EABI__
+ .macro THUMB_LDIV0 name signed
+-#if defined(__ARM_ARCH_6M__)
+- .ifc \signed, unsigned
+- cmp r0, #0
+- beq 1f
+- mov r0, #0
+- mvn r0, r0 @ 0xffffffff
+-1:
+- .else
+- cmp r0, #0
+- beq 2f
+- blt 3f
++#ifdef NOT_ISA_TARGET_32BIT
++
++ push {r0, lr}
+ mov r0, #0
+- mvn r0, r0
+- lsr r0, r0, #1 @ 0x7fffffff
+- b 2f
+-3: mov r0, #0x80
+- lsl r0, r0, #24 @ 0x80000000
+-2:
+- .endif
+- push {r0, r1, r2}
+- ldr r0, 4f
+- adr r1, 4f
+- add r0, r1
+- str r0, [sp, #8]
++ bl SYM(__aeabi_idiv0)
+ @ We know we are not on armv4t, so pop pc is safe.
+- pop {r0, r1, pc}
+- .align 2
+-4:
+- .word __aeabi_idiv0 - 4b
++ pop {r1, pc}
++
+ #elif defined(__thumb2__)
+ .syntax unified
+ .ifc \signed, unsigned
+@@ -478,7 +462,7 @@ _L__\name:
+
+ #else /* !(__INTERWORKING_STUBS__ || __thumb2__) */
+
+-#ifdef __ARM_ARCH_6M__
++#ifdef NOT_ISA_TARGET_32BIT
+ #define EQUIV .thumb_set
+ #else
+ .macro ARM_FUNC_START name sp_section=
+@@ -510,7 +494,7 @@ SYM (__\name):
+ #endif
+ .endm
+
+-#ifndef __ARM_ARCH_6M__
++#ifndef NOT_ISA_TARGET_32BIT
+ .macro ARM_FUNC_ALIAS new old
+ .globl SYM (__\new)
+ EQUIV SYM (__\new), SYM (__\old)
+@@ -945,7 +929,170 @@ LSYM(Lover7):
+ add dividend, work
+ .endif
+ LSYM(Lgot_result):
+-.endm
++.endm
++
++/* If performance is preferred, the following functions are provided. */
++#if defined(__prefer_thumb__) && !defined(__OPTIMIZE_SIZE__)
++
++/* Branch to div(n), and jump to label if curbit is lo than divisior. */
++.macro BranchToDiv n, label
++ lsr curbit, dividend, \n
++ cmp curbit, divisor
++ blo \label
++.endm
++
++/* Body of div(n). Shift the divisor in n bits and compare the divisor
++ and dividend. Update the dividend as the substruction result. */
++.macro DoDiv n
++ lsr curbit, dividend, \n
++ cmp curbit, divisor
++ bcc 1f
++ lsl curbit, divisor, \n
++ sub dividend, dividend, curbit
++
++1: adc result, result
++.endm
++
++/* The body of division with positive divisor. Unless the divisor is very
++ big, shift it up in multiples of four bits, since this is the amount of
++ unwinding in the main division loop. Continue shifting until the divisor
++ is larger than the dividend. */
++.macro THUMB1_Div_Positive
++ mov result, #0
++ BranchToDiv #1, LSYM(Lthumb1_div1)
++ BranchToDiv #4, LSYM(Lthumb1_div4)
++ BranchToDiv #8, LSYM(Lthumb1_div8)
++ BranchToDiv #12, LSYM(Lthumb1_div12)
++ BranchToDiv #16, LSYM(Lthumb1_div16)
++LSYM(Lthumb1_div_large_positive):
++ mov result, #0xff
++ lsl divisor, divisor, #8
++ rev result, result
++ lsr curbit, dividend, #16
++ cmp curbit, divisor
++ blo 1f
++ asr result, #8
++ lsl divisor, divisor, #8
++ beq LSYM(Ldivbyzero_waypoint)
++
++1: lsr curbit, dividend, #12
++ cmp curbit, divisor
++ blo LSYM(Lthumb1_div12)
++ b LSYM(Lthumb1_div16)
++LSYM(Lthumb1_div_loop):
++ lsr divisor, divisor, #8
++LSYM(Lthumb1_div16):
++ Dodiv #15
++ Dodiv #14
++ Dodiv #13
++ Dodiv #12
++LSYM(Lthumb1_div12):
++ Dodiv #11
++ Dodiv #10
++ Dodiv #9
++ Dodiv #8
++ bcs LSYM(Lthumb1_div_loop)
++LSYM(Lthumb1_div8):
++ Dodiv #7
++ Dodiv #6
++ Dodiv #5
++LSYM(Lthumb1_div5):
++ Dodiv #4
++LSYM(Lthumb1_div4):
++ Dodiv #3
++LSYM(Lthumb1_div3):
++ Dodiv #2
++LSYM(Lthumb1_div2):
++ Dodiv #1
++LSYM(Lthumb1_div1):
++ sub divisor, dividend, divisor
++ bcs 1f
++ cpy divisor, dividend
++
++1: adc result, result
++ cpy dividend, result
++ RET
++
++LSYM(Ldivbyzero_waypoint):
++ b LSYM(Ldiv0)
++.endm
++
++/* The body of division with negative divisor. Similar with
++ THUMB1_Div_Positive except that the shift steps are in multiples
++ of six bits. */
++.macro THUMB1_Div_Negative
++ lsr result, divisor, #31
++ beq 1f
++ neg divisor, divisor
++
++1: asr curbit, dividend, #32
++ bcc 2f
++ neg dividend, dividend
++
++2: eor curbit, result
++ mov result, #0
++ cpy ip, curbit
++ BranchToDiv #4, LSYM(Lthumb1_div_negative4)
++ BranchToDiv #8, LSYM(Lthumb1_div_negative8)
++LSYM(Lthumb1_div_large):
++ mov result, #0xfc
++ lsl divisor, divisor, #6
++ rev result, result
++ lsr curbit, dividend, #8
++ cmp curbit, divisor
++ blo LSYM(Lthumb1_div_negative8)
++
++ lsl divisor, divisor, #6
++ asr result, result, #6
++ cmp curbit, divisor
++ blo LSYM(Lthumb1_div_negative8)
++
++ lsl divisor, divisor, #6
++ asr result, result, #6
++ cmp curbit, divisor
++ blo LSYM(Lthumb1_div_negative8)
++
++ lsl divisor, divisor, #6
++ beq LSYM(Ldivbyzero_negative)
++ asr result, result, #6
++ b LSYM(Lthumb1_div_negative8)
++LSYM(Lthumb1_div_negative_loop):
++ lsr divisor, divisor, #6
++LSYM(Lthumb1_div_negative8):
++ DoDiv #7
++ DoDiv #6
++ DoDiv #5
++ DoDiv #4
++LSYM(Lthumb1_div_negative4):
++ DoDiv #3
++ DoDiv #2
++ bcs LSYM(Lthumb1_div_negative_loop)
++ DoDiv #1
++ sub divisor, dividend, divisor
++ bcs 1f
++ cpy divisor, dividend
++
++1: cpy curbit, ip
++ adc result, result
++ asr curbit, curbit, #1
++ cpy dividend, result
++ bcc 2f
++ neg dividend, dividend
++ cmp curbit, #0
++
++2: bpl 3f
++ neg divisor, divisor
++
++3: RET
++
++LSYM(Ldivbyzero_negative):
++ cpy curbit, ip
++ asr curbit, curbit, #1
++ bcc LSYM(Ldiv0)
++ neg dividend, dividend
++.endm
++#endif /* ARM Thumb version. */
++
+ /* ------------------------------------------------------------------------ */
+ /* Start of the Real Functions */
+ /* ------------------------------------------------------------------------ */
+@@ -955,6 +1102,7 @@ LSYM(Lgot_result):
+
+ FUNC_START udivsi3
+ FUNC_ALIAS aeabi_uidiv udivsi3
++#if defined(__OPTIMIZE_SIZE__)
+
+ cmp divisor, #0
+ beq LSYM(Ldiv0)
+@@ -972,6 +1120,14 @@ LSYM(udivsi3_skip_div0_test):
+ pop { work }
+ RET
+
++/* Implementation of aeabi_uidiv for ARMv6m. This version is only
++ used in ARMv6-M when we need an efficient implementation. */
++#else
++LSYM(udivsi3_skip_div0_test):
++ THUMB1_Div_Positive
++
++#endif /* __OPTIMIZE_SIZE__ */
++
+ #elif defined(__ARM_ARCH_EXT_IDIV__)
+
+ ARM_FUNC_START udivsi3
+@@ -1023,12 +1179,21 @@ LSYM(udivsi3_skip_div0_test):
+ FUNC_START aeabi_uidivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
++# if defined(__OPTIMIZE_SIZE__)
+ push {r0, r1, lr}
+ bl LSYM(udivsi3_skip_div0_test)
+ POP {r1, r2, r3}
+ mul r2, r0
+ sub r1, r1, r2
+ bx r3
++# else
++ /* Both the quotient and remainder are calculated simultaneously
++ in THUMB1_Div_Positive. There is no need to calculate the
++ remainder again here. */
++ b LSYM(udivsi3_skip_div0_test)
++ RET
++# endif /* __OPTIMIZE_SIZE__ */
++
+ #elif defined(__ARM_ARCH_EXT_IDIV__)
+ ARM_FUNC_START aeabi_uidivmod
+ cmp r1, #0
+@@ -1054,7 +1219,7 @@ ARM_FUNC_START aeabi_uidivmod
+ /* ------------------------------------------------------------------------ */
+ #ifdef L_umodsi3
+
+-#ifdef __ARM_ARCH_EXT_IDIV__
++#if defined(__ARM_ARCH_EXT_IDIV__) && __ARM_ARCH_ISA_THUMB != 1
+
+ ARM_FUNC_START umodsi3
+
+@@ -1084,7 +1249,7 @@ LSYM(Lover10):
+ RET
+
+ #else /* ARM version. */
+-
++
+ FUNC_START umodsi3
+
+ subs r2, r1, #1 @ compare divisor with 1
+@@ -1109,8 +1274,9 @@ LSYM(Lover10):
+
+ #if defined(__prefer_thumb__)
+
+- FUNC_START divsi3
++ FUNC_START divsi3
+ FUNC_ALIAS aeabi_idiv divsi3
++#if defined(__OPTIMIZE_SIZE__)
+
+ cmp divisor, #0
+ beq LSYM(Ldiv0)
+@@ -1133,7 +1299,7 @@ LSYM(Lover11):
+ blo LSYM(Lgot_result)
+
+ THUMB_DIV_MOD_BODY 0
+-
++
+ mov r0, result
+ mov work, ip
+ cmp work, #0
+@@ -1143,6 +1309,22 @@ LSYM(Lover12):
+ pop { work }
+ RET
+
++/* Implementation of aeabi_idiv for ARMv6m. This version is only
++ used in ARMv6-M when we need an efficient implementation. */
++#else
++LSYM(divsi3_skip_div0_test):
++ cpy curbit, dividend
++ orr curbit, divisor
++ bmi LSYM(Lthumb1_div_negative)
++
++LSYM(Lthumb1_div_positive):
++ THUMB1_Div_Positive
++
++LSYM(Lthumb1_div_negative):
++ THUMB1_Div_Negative
++
++#endif /* __OPTIMIZE_SIZE__ */
++
+ #elif defined(__ARM_ARCH_EXT_IDIV__)
+
+ ARM_FUNC_START divsi3
+@@ -1154,8 +1336,8 @@ LSYM(Lover12):
+ RET
+
+ #else /* ARM/Thumb-2 version. */
+-
+- ARM_FUNC_START divsi3
++
++ ARM_FUNC_START divsi3
+ ARM_FUNC_ALIAS aeabi_idiv divsi3
+
+ cmp r1, #0
+@@ -1209,12 +1391,21 @@ LSYM(divsi3_skip_div0_test):
+ FUNC_START aeabi_idivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
++# if defined(__OPTIMIZE_SIZE__)
+ push {r0, r1, lr}
+ bl LSYM(divsi3_skip_div0_test)
+ POP {r1, r2, r3}
+ mul r2, r0
+ sub r1, r1, r2
+ bx r3
++# else
++ /* Both the quotient and remainder are calculated simultaneously
++ in THUMB1_Div_Positive and THUMB1_Div_Negative. There is no
++ need to calculate the remainder again here. */
++ b LSYM(divsi3_skip_div0_test)
++ RET
++# endif /* __OPTIMIZE_SIZE__ */
++
+ #elif defined(__ARM_ARCH_EXT_IDIV__)
+ ARM_FUNC_START aeabi_idivmod
+ cmp r1, #0
+@@ -1240,7 +1431,7 @@ ARM_FUNC_START aeabi_idivmod
+ /* ------------------------------------------------------------------------ */
+ #ifdef L_modsi3
+
+-#if defined(__ARM_ARCH_EXT_IDIV__)
++#if defined(__ARM_ARCH_EXT_IDIV__) && __ARM_ARCH_ISA_THUMB != 1
+
+ ARM_FUNC_START modsi3
+
+@@ -1508,14 +1699,15 @@ LSYM(Lover12):
+
+ #endif /* __symbian__ */
+
+-#if ((__ARM_ARCH__ > 5) && !defined(__ARM_ARCH_6M__)) \
+- || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
+- || defined(__ARM_ARCH_5TEJ__)
++#if (__ARM_ARCH_ISA_THUMB == 2 \
++ || (__ARM_ARCH_ISA_ARM \
++ && (__ARM_ARCH__ > 5 \
++ || (__ARM_ARCH__ == 5 && __ARM_ARCH_ISA_THUMB))))
+ #define HAVE_ARM_CLZ 1
+ #endif
+
+ #ifdef L_clzsi2
+-#if defined(__ARM_ARCH_6M__)
++#ifdef NOT_ISA_TARGET_32BIT
+ FUNC_START clzsi2
+ mov r1, #28
+ mov r3, #1
+@@ -1576,7 +1768,7 @@ ARM_FUNC_START clzsi2
+ #ifdef L_clzdi2
+ #if !defined(HAVE_ARM_CLZ)
+
+-# if defined(__ARM_ARCH_6M__)
++# ifdef NOT_ISA_TARGET_32BIT
+ FUNC_START clzdi2
+ push {r4, lr}
+ # else
+@@ -1601,7 +1793,7 @@ ARM_FUNC_START clzdi2
+ bl __clzsi2
+ # endif
+ 2:
+-# if defined(__ARM_ARCH_6M__)
++# ifdef NOT_ISA_TARGET_32BIT
+ pop {r4, pc}
+ # else
+ RETLDM r4
+@@ -1623,7 +1815,7 @@ ARM_FUNC_START clzdi2
+ #endif /* L_clzdi2 */
+
+ #ifdef L_ctzsi2
+-#if defined(__ARM_ARCH_6M__)
++#ifdef NOT_ISA_TARGET_32BIT
+ FUNC_START ctzsi2
+ neg r1, r0
+ and r0, r0, r1
+@@ -1738,7 +1930,7 @@ ARM_FUNC_START ctzsi2
+
+ /* Don't bother with the old interworking routines for Thumb-2. */
+ /* ??? Maybe only omit these on "m" variants. */
+-#if !defined(__thumb2__) && !defined(__ARM_ARCH_6M__)
++#if !defined(__thumb2__) && __ARM_ARCH_ISA_ARM
+
+ #if defined L_interwork_call_via_rX
+
+@@ -1983,11 +2175,12 @@ LSYM(Lchange_\register):
+ .endm
+
+ #ifndef __symbian__
+-#ifndef __ARM_ARCH_6M__
++/* The condition here must match the one in gcc/config/arm/elf.h. */
++#ifndef NOT_ISA_TARGET_32BIT
+ #include "ieee754-df.S"
+ #include "ieee754-sf.S"
+ #include "bpabi.S"
+-#else /* __ARM_ARCH_6M__ */
++#else /* NOT_ISA_TARGET_32BIT */
+ #include "bpabi-v6m.S"
+-#endif /* __ARM_ARCH_6M__ */
++#endif /* NOT_ISA_TARGET_32BIT */
+ #endif /* !__symbian__ */
+--- a/src/libgcc/config/arm/libunwind.S
++++ b/src/libgcc/config/arm/libunwind.S
+@@ -58,7 +58,7 @@
+ #endif
+ #endif
+
+-#ifdef __ARM_ARCH_6M__
++#if !__ARM_ARCH_ISA_ARM && __ARM_ARCH_ISA_THUMB == 1
+
+ /* r0 points to a 16-word block. Upload these values to the actual core
+ state. */
+@@ -169,7 +169,7 @@ FUNC_START gnu_Unwind_Save_WMMXC
+ UNPREFIX \name
+ .endm
+
+-#else /* !__ARM_ARCH_6M__ */
++#else /* __ARM_ARCH_ISA_ARM || __ARM_ARCH_ISA_THUMB != 1 */
+
+ /* r0 points to a 16-word block. Upload these values to the actual core
+ state. */
+@@ -351,7 +351,7 @@ ARM_FUNC_START gnu_Unwind_Save_WMMXC
+ UNPREFIX \name
+ .endm
+
+-#endif /* !__ARM_ARCH_6M__ */
++#endif /* __ARM_ARCH_ISA_ARM || __ARM_ARCH_ISA_THUMB != 1 */
+
+ UNWIND_WRAPPER _Unwind_RaiseException 1
+ UNWIND_WRAPPER _Unwind_Resume 1
+--- a/src/libgcc/config/arm/t-arm
++++ b/src/libgcc/config/arm/t-arm
+@@ -1,3 +1,17 @@
+ LIB1ASMSRC = arm/lib1funcs.S
+ LIB1ASMFUNCS = _thumb1_case_sqi _thumb1_case_uqi _thumb1_case_shi \
+ _thumb1_case_uhi _thumb1_case_si
++
++HAVE_CMSE:=$(findstring __ARM_FEATURE_CMSE,$(shell $(gcc_compile_bare) -dM -E - </dev/null))
++ifneq ($(shell $(gcc_compile_bare) -E -mcmse - </dev/null 2>/dev/null),)
++CMSE_OPTS:=-mcmse
++endif
++
++ifdef HAVE_CMSE
++libgcc-objects += cmse.o cmse_nonsecure_call.o
++
++cmse.o: $(srcdir)/config/arm/cmse.c
++ $(gcc_compile) -c $(CMSE_OPTS) $<
++cmse_nonsecure_call.o: $(srcdir)/config/arm/cmse_nonsecure_call.S
++ $(gcc_compile) -c $<
++endif
+--- a/src/libgcc/config/arm/t-softfp
++++ b/src/libgcc/config/arm/t-softfp
+@@ -1,2 +1,2 @@
+-softfp_wrap_start := '\#ifdef __ARM_ARCH_6M__'
++softfp_wrap_start := '\#if !__ARM_ARCH_ISA_ARM && __ARM_ARCH_ISA_THUMB == 1'
+ softfp_wrap_end := '\#endif'
+--- a/src/libgcc/libgcc2.c
++++ b/src/libgcc/libgcc2.c
+@@ -1852,7 +1852,8 @@ NAME (TYPE x, int m)
+
+ #endif
+
+-#if ((defined(L_mulsc3) || defined(L_divsc3)) && LIBGCC2_HAS_SF_MODE) \
++#if((defined(L_mulhc3) || defined(L_divhc3)) && LIBGCC2_HAS_HF_MODE) \
++ || ((defined(L_mulsc3) || defined(L_divsc3)) && LIBGCC2_HAS_SF_MODE) \
+ || ((defined(L_muldc3) || defined(L_divdc3)) && LIBGCC2_HAS_DF_MODE) \
+ || ((defined(L_mulxc3) || defined(L_divxc3)) && LIBGCC2_HAS_XF_MODE) \
+ || ((defined(L_multc3) || defined(L_divtc3)) && LIBGCC2_HAS_TF_MODE)
+@@ -1861,7 +1862,13 @@ NAME (TYPE x, int m)
+ #undef double
+ #undef long
+
+-#if defined(L_mulsc3) || defined(L_divsc3)
++#if defined(L_mulhc3) || defined(L_divhc3)
++# define MTYPE HFtype
++# define CTYPE HCtype
++# define MODE hc
++# define CEXT __LIBGCC_HF_FUNC_EXT__
++# define NOTRUNC (!__LIBGCC_HF_EXCESS_PRECISION__)
++#elif defined(L_mulsc3) || defined(L_divsc3)
+ # define MTYPE SFtype
+ # define CTYPE SCtype
+ # define MODE sc
+@@ -1922,7 +1929,7 @@ extern void *compile_type_assert[sizeof(INFINITY) == sizeof(MTYPE) ? 1 : -1];
+ # define TRUNC(x) __asm__ ("" : "=m"(x) : "m"(x))
+ #endif
+
+-#if defined(L_mulsc3) || defined(L_muldc3) \
++#if defined(L_mulhc3) || defined(L_mulsc3) || defined(L_muldc3) \
+ || defined(L_mulxc3) || defined(L_multc3)
+
+ CTYPE
+@@ -1992,7 +1999,7 @@ CONCAT3(__mul,MODE,3) (MTYPE a, MTYPE b, MTYPE c, MTYPE d)
+ }
+ #endif /* complex multiply */
+
+-#if defined(L_divsc3) || defined(L_divdc3) \
++#if defined(L_divhc3) || defined(L_divsc3) || defined(L_divdc3) \
+ || defined(L_divxc3) || defined(L_divtc3)
+
+ CTYPE
+--- a/src/libgcc/libgcc2.h
++++ b/src/libgcc/libgcc2.h
+@@ -34,6 +34,12 @@ extern void __clear_cache (char *, char *);
+ extern void __eprintf (const char *, const char *, unsigned int, const char *)
+ __attribute__ ((__noreturn__));
+
++#ifdef __LIBGCC_HAS_HF_MODE__
++#define LIBGCC2_HAS_HF_MODE 1
++#else
++#define LIBGCC2_HAS_HF_MODE 0
++#endif
++
+ #ifdef __LIBGCC_HAS_SF_MODE__
+ #define LIBGCC2_HAS_SF_MODE 1
+ #else
+@@ -133,6 +139,10 @@ typedef unsigned int UTItype __attribute__ ((mode (TI)));
+ #endif
+ #endif
+
++#if LIBGCC2_HAS_HF_MODE
++typedef float HFtype __attribute__ ((mode (HF)));
++typedef _Complex float HCtype __attribute__ ((mode (HC)));
++#endif
+ #if LIBGCC2_HAS_SF_MODE
+ typedef float SFtype __attribute__ ((mode (SF)));
+ typedef _Complex float SCtype __attribute__ ((mode (SC)));
+@@ -424,6 +434,10 @@ extern SItype __negvsi2 (SItype);
+ #endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */
+
+ #undef int
++#if LIBGCC2_HAS_HF_MODE
++extern HCtype __divhc3 (HFtype, HFtype, HFtype, HFtype);
++extern HCtype __mulhc3 (HFtype, HFtype, HFtype, HFtype);
++#endif
+ #if LIBGCC2_HAS_SF_MODE
+ extern DWtype __fixsfdi (SFtype);
+ extern SFtype __floatdisf (DWtype);
+--- a/src/libstdc++-v3/acinclude.m4
++++ b/src/libstdc++-v3/acinclude.m4
+@@ -632,10 +632,10 @@ dnl baseline_dir
+ dnl baseline_subdir_switch
+ dnl
+ AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
+- if $GLIBCXX_IS_NATIVE ; then
+- # Do checks for resource limit functions.
+- GLIBCXX_CHECK_SETRLIMIT
++ # Do checks for resource limit functions.
++ GLIBCXX_CHECK_SETRLIMIT
+
++ if $GLIBCXX_IS_NATIVE ; then
+ # Look for setenv, so that extended locale tests can be performed.
+ GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
+ fi
+--- a/src/libstdc++-v3/configure
++++ b/src/libstdc++-v3/configure
+@@ -79519,8 +79519,7 @@ $as_echo "$ac_cv_x86_rdrand" >&6; }
+
+ # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
+
+- if $GLIBCXX_IS_NATIVE ; then
+- # Do checks for resource limit functions.
++ # Do checks for resource limit functions.
+
+ setrlimit_have_headers=yes
+ for ac_header in unistd.h sys/time.h sys/resource.h
+@@ -79749,6 +79748,7 @@ $as_echo "#define _GLIBCXX_RES_LIMITS 1" >>confdefs.h
+ $as_echo "$ac_res_limits" >&6; }
+
+
++ if $GLIBCXX_IS_NATIVE ; then
+ # Look for setenv, so that extended locale tests can be performed.
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setenv declaration" >&5
+--- a/src/libstdc++-v3/testsuite/29_atomics/atomic/65913.cc
++++ b/src/libstdc++-v3/testsuite/29_atomics/atomic/65913.cc
+@@ -15,7 +15,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target x86_64-*-linux* powerpc*-*-linux* } }
++// { dg-do run }
++// { dg-require-atomic-builtins "" }
+ // { dg-options "-std=gnu++11 -O0" }
+
+ #include <atomic>